docs: def to_otu(self, biom_id=None):
          """Converts a list of objects associated with a classification result into a `dict` resembling
          an OTU table.
  
          Parameters
          ----------
          biom_id : `string`, optional
              Optionally specify an `id` field for the generated v1 BIOM file.
  
          Returns
          -------
          otu_table : `OrderedDict`
              A BIOM OTU table, returned as a Python OrderedDict (can be dumped to JSON)
          """
          otu_format = "Biological Observation Matrix 1.0.0"
  
          # Note: This is exact format URL is required by https://github.com/biocore/biom-format
          otu_url = "http://biom-format.org"
  
          otu = OrderedDict(
              {
                  "id": biom_id,
                  "format": otu_format,
                  "format_url": otu_url,
                  "type": "OTU table",
                  "generated_by": "One Codex API V1",
                  "date": datetime.now().isoformat(),
                  "rows": [],
                  "columns": [],
                  "matrix_type": "sparse",
                  "matrix_element_type": "int",
              }
          )
  
          rows = defaultdict(dict)
  
          tax_ids_to_names = {}
          for classification in self._classifications:
              col_id = len(otu["columns"])  # 0 index
  
              # Re-encoding the JSON is a bit of a hack, but
              # we need a ._to_dict() method that properly
              # resolves references and don't have one at the moment
              columns_entry = {
                  "id": str(classification.id),
                  "sample_id": str(classification.sample.id),
                  "sample_filename": classification.sample.filename,
                  "metadata": json.loads(
                      classification.sample.metadata._to_json(include_references=False)
                  ),
              }
  
              otu["columns"].append(columns_entry)
              sample_df = classification.table()
  
              for row in sample_df.iterrows():
                  tax_id = row[1]["tax_id"]
                  tax_ids_to_names[tax_id] = row[1]["name"]
                  rows[tax_id][col_id] = int(row[1]["readcount"])
  
          num_rows = len(rows)
          num_cols = len(otu["columns"])
  
          otu["shape"] = [num_rows, num_cols]
          otu["data"] = []
  
          for present_taxa in sorted(rows):
              # add the row entry
              row_id = len(otu["rows"])
              otu["rows"].append(
                  {"id": present_taxa, "metadata": {"taxonomy": tax_ids_to_names[present_taxa]}}
              )
  
              for sample_with_hit in rows[present_taxa]:
                  counts = rows[present_taxa][sample_with_hit]
                  otu["data"].append([row_id, sample_with_hit, counts])
  
          return otu