diff --git a/README.md b/README.md
index e690226..c3dc94f 100644
--- a/README.md
+++ b/README.md
@@ -50,6 +50,9 @@ feature data. Tables can either be QZA `FeatureTable`'s or biom tables. If a `bi
 the `"table-format": "biom"` option must be specified. Taxonomy data is accepted with the
 `"feature-data-taxonomy"` keyword, which should correspond to the filepath to a QIIME2 `FeatureData[Taxonomy]`.
 
+For large datasets, creating a Taxonomy model can be slow. You can cache the model on server startup by adding the
+`"cache-taxonomy": true` keyword to your specific table. This should speed up the time for API calls.
+
 ### Metadata
 The server can be configured to contain metadata, by adding a  `"metadata"` keyword to the config,
 that gives a path to a QIIME2 formatted metadata file.
@@ -66,7 +69,8 @@ that gives a path to a QIIME2 formatted metadata file.
     "taxonomy": {
       "table": "/path/to/table.biom",
       "table-format": "biom",
-      "feature-data-taxonomy": "/path/to/a/taxonomy-data.qza"
+      "feature-data-taxonomy": "/path/to/a/taxonomy-data.qza",
+      "cache-model": true
     }
   },
   "metadata": "/path/to/some/metadata.txt"
diff --git a/microsetta_public_api/api/metadata.py b/microsetta_public_api/api/metadata.py
index 26e8d6e..9b0d6ea 100644
--- a/microsetta_public_api/api/metadata.py
+++ b/microsetta_public_api/api/metadata.py
@@ -32,7 +32,7 @@ def filter_sample_ids(taxonomy=None, alpha_metric=None, **kwargs):
     )
 
     if error_response:
-        return error_response, error_code
+        return jsonify(*error_response), error_code
 
     return jsonify(sample_ids=matching_ids), 200
 
diff --git a/microsetta_public_api/api/taxonomy.py b/microsetta_public_api/api/taxonomy.py
index 95a33ea..777319c 100644
--- a/microsetta_public_api/api/taxonomy.py
+++ b/microsetta_public_api/api/taxonomy.py
@@ -1,6 +1,5 @@
 from microsetta_public_api.repo._taxonomy_repo import TaxonomyRepo
 from microsetta_public_api.utils import jsonify
-from microsetta_public_api.models._taxonomy import Taxonomy
 from microsetta_public_api.utils._utils import (validate_resource,
                                                 check_missing_ids,
                                                 )
@@ -33,11 +32,8 @@ def _summarize_group(sample_ids, table_name):
     if missing_ids_msg:
         return missing_ids_msg
 
-    table = taxonomy_repo.table(table_name)
-    features = taxonomy_repo.feature_data_taxonomy(table_name)
-    variances = taxonomy_repo.variances(table_name)
+    taxonomy_ = taxonomy_repo.model(table_name)
 
-    taxonomy_ = Taxonomy(table, features, variances)
     taxonomy_data = taxonomy_.get_group(sample_ids, '').to_dict()
     del taxonomy_data['name']
     del taxonomy_data['feature_ranks']
diff --git a/microsetta_public_api/repo/_taxonomy_repo.py b/microsetta_public_api/repo/_taxonomy_repo.py
index 250d2ea..49b015a 100644
--- a/microsetta_public_api/repo/_taxonomy_repo.py
+++ b/microsetta_public_api/repo/_taxonomy_repo.py
@@ -1,4 +1,5 @@
 from microsetta_public_api.resources import resources
+from microsetta_public_api.models._taxonomy import Taxonomy as TaxonomyModel
 
 
 class TaxonomyRepo:
@@ -59,6 +60,15 @@ class TaxonomyRepo:
     def variances(self, table_name):
         return self._get_resource(table_name, component='variances')
 
+    def model(self, table_name):
+        model = self._get_resource(table_name, component='model')
+        if model is None:
+            table = self.table(table_name)
+            features = self.feature_data_taxonomy(table_name)
+            variances = self.variances(table_name)
+            model = TaxonomyModel(table, features, variances)
+        return model
+
     def exists(self, sample_ids, table_name):
         """Checks if sample_ids exist for the given table.
 
diff --git a/microsetta_public_api/resources.py b/microsetta_public_api/resources.py
index 8365c35..23b78fd 100644
--- a/microsetta_public_api/resources.py
+++ b/microsetta_public_api/resources.py
@@ -10,6 +10,8 @@ from q2_types.sample_data import AlphaDiversity, SampleData
 from q2_types.feature_table import FeatureTable, Frequency
 from q2_types.feature_data import FeatureData, Taxonomy
 
+from microsetta_public_api.models._taxonomy import Taxonomy as TaxonomyModel
+
 
 def _dict_of_paths_to_alpha_data(dict_of_qza_paths, resource_name):
     _validate_dict_of_paths(dict_of_qza_paths,
@@ -42,7 +44,8 @@ def _transform_single_table(dict_, resource_name):
 
     _validate_dict_of_paths(dict_, resource_name, allow_none=True,
                             required_fields=['table'],
-                            non_ext_entries=['q2-type', 'table-format'],
+                            non_ext_entries=['q2-type', 'table-format',
+                                             'cache-taxonomy'],
                             allow_extras=True,
                             extensions=['.' + table_type]
                             )
@@ -85,6 +88,14 @@ def _transform_single_table(dict_, resource_name):
         elif key in biom_kws:
             new_resource[key] = biom.load_table(value)
 
+    cache_taxonomy = new_resource.get('cache-taxonomy', True)
+    if 'feature-data-taxonomy' in new_resource and cache_taxonomy:
+        table = new_resource['table']
+        taxonomy = new_resource['feature-data-taxonomy']
+        variances = new_resource.get('variances', None)
+        model = TaxonomyModel(table, taxonomy, variances)
+        new_resource['model'] = model
+
     return new_resource
 
 

The Taxonomy model is initialized on each GET and it's very expensive
Each GET seems to initialize the `Taxonomy` model, and takes about 2 minutes on my laptop. The interaction with this object is read-only -- is there a reason it needs to be re-initialized on each call rather than being done once at server start up?
diff --git a/microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py b/microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py
index b1c145c..12ed90f 100644
--- a/microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py
+++ b/microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py
@@ -9,6 +9,7 @@ from microsetta_public_api.utils.testing import MockedJsonifyTestCase
 from microsetta_public_api.api.taxonomy import (
     resources, summarize_group, _summarize_group, single_sample,
 )
+from microsetta_public_api.models._taxonomy import Taxonomy as TaxonomyModel
 
 
 class TaxonomyImplementationTests(MockedJsonifyTestCase):
@@ -276,6 +277,37 @@ class TaxonomyImplementationTests(MockedJsonifyTestCase):
                         obs['feature_variances']
                         )
 
+    def test_taxonomy_from_list_summarize_group_simple_cached_model(self):
+        with patch('microsetta_public_api.repo._taxonomy_repo.TaxonomyRepo.'
+                   'tables', new_callable=PropertyMock) as mock_tables:
+            mock_tables.return_value = {
+                'some-table': {
+                    'table': self.table,
+                    'feature-data-taxonomy': self.taxonomy_df,
+                    'model': TaxonomyModel(self.table, self.taxonomy_df)
+                },
+            }
+            response, code = _summarize_group(self.post_body['sample_ids'],
+                                              "some-table")
+        self.assertEqual(code, 200)
+        exp_keys = ['taxonomy', 'features', 'feature_values',
+                    'feature_variances']
+        obs = json.loads(response)
+
+        self.assertCountEqual(exp_keys, obs.keys())
+        self.assertEqual('((((feature-1,((feature-2)e)d)c)b,'
+                         '(((feature-3)h)g)f)a);',
+                         obs['taxonomy']
+                         )
+        self.assertListEqual(['feature-1', 'feature-2', 'feature-3'],
+                             obs['features'])
+        assert_allclose([1. / 10, 6. / 10, 3. / 10],
+                        obs['feature_values']
+                        )
+        assert_allclose([0, 0, 0],
+                        obs['feature_variances']
+                        )
+
     def test_taxonomy_from_list_summarize_group_simple_with_variances(self):
         with patch('microsetta_public_api.repo._taxonomy_repo.TaxonomyRepo.'
                    'tables', new_callable=PropertyMock) as mock_tables:
diff --git a/microsetta_public_api/api/tests/test_integration.py b/microsetta_public_api/api/tests/test_integration.py
index b94fb55..9eb888a 100644
--- a/microsetta_public_api/api/tests/test_integration.py
+++ b/microsetta_public_api/api/tests/test_integration.py
@@ -125,28 +125,6 @@ class MetadataIntegrationTests(IntegrationTests):
         self.assertCountEqual(['sample_ids'], obs.keys())
         self.assertCountEqual(obs['sample_ids'], exp_ids)
 
-    def test_metadata_filter_on_metric_dne(self):
-        response = self.client.get(
-            # careful not to use a metric that exists in AlphaIntegrationTests
-            '/api/metadata/sample_ids?alpha_metric=bad-metric')
-        self.assertEqual(response.status_code, 404)
-
-    def test_metadata_filter_on_taxonomy_dne(self):
-        response = self.client.get(
-            # careful not to use a table that exists in
-            #  TaxonomyIntegrationTests
-            '/api/metadata/sample_ids?alpha_metric=bad-table')
-        self.assertEqual(response.status_code, 404)
-
-    def test_metadata_filter_on_metric_and_taxonomy_dne(self):
-        response = self.client.get(
-            # careful not to use a metric that exists in AlphaIntegrationTests
-            # careful not to use a table that exists in
-            #  TaxonomyIntegrationTests
-            '/api/metadata/sample_ids?alpha_metric=bad-metric&taxonomy=bad'
-            '-table')
-        self.assertEqual(response.status_code, 404)
-
 
 class TaxonomyIntegrationTests(IntegrationTests):
 
@@ -183,6 +161,7 @@ class TaxonomyIntegrationTests(IntegrationTests):
                                           ['feature-3', 'a; f; g; h', 0.678]],
                                          columns=['Feature ID', 'Taxon',
                                                   'Confidence'])
+
         self.taxonomy2_df.set_index('Feature ID', inplace=True)
 
         self.table3 = biom.Table(np.array([[1, 2],
@@ -232,6 +211,11 @@ class TaxonomyIntegrationTests(IntegrationTests):
                 'table': self.table_biom,
                 'table-format': 'biom',
             },
+            'table-cached-model': {
+                'table': self.table1_filename,
+                'feature-data-taxonomy': self.taxonomy1_filename,
+                'cache-taxonomy': True,
+            },
         }})
         resources.update(config.resources)
 
@@ -242,7 +226,8 @@ class TaxonomyIntegrationTests(IntegrationTests):
         self.assertEqual(response.status_code, 200)
         obs = json.loads(response.data)
         self.assertIn('resources', obs)
-        self.assertCountEqual(['table2', 'table-fish'], obs['resources'])
+        self.assertCountEqual(['table2', 'table-fish', 'table-cached-model'],
+                              obs['resources'])
 
     def test_summarize_group(self):
         response = self.client.post('/api/taxonomy/group/table2',
@@ -268,6 +253,30 @@ class TaxonomyIntegrationTests(IntegrationTests):
                         obs['feature_variances']
                         )
 
+    def test_summarize_group_cached_model(self):
+        response = self.client.post('/api/taxonomy/group/table-cached-model',
+                                    content_type='application/json',
+                                    data=json.dumps({'sample_ids': [
+                                        'sample-1']}))
+
+        self.assertEqual(response.status_code, 200)
+        obs = json.loads(response.data)
+        self.assertCountEqual(['taxonomy', 'features',
+                               'feature_values', 'feature_variances'],
+                              obs.keys())
+
+        self.assertEqual('((((((feature-2)e)d)c)b,(((feature-3)h)g)f)a);',
+                         obs['taxonomy']
+                         )
+        self.assertListEqual(['feature-2', 'feature-3'],
+                             obs['features'])
+        assert_allclose([2. / 5, 3. / 5],
+                        obs['feature_values']
+                        )
+        assert_allclose([0, 0],
+                        obs['feature_variances']
+                        )
+
     def test_summarize_single_sample(self):
         response = self.client.get(
             '/api/taxonomy/single/table2/sample-1',
diff --git a/microsetta_public_api/repo/tests/test_taxonomy_repo.py b/microsetta_public_api/repo/tests/test_taxonomy_repo.py
index 7cb3bcd..f671959 100644
--- a/microsetta_public_api/repo/tests/test_taxonomy_repo.py
+++ b/microsetta_public_api/repo/tests/test_taxonomy_repo.py
@@ -12,6 +12,7 @@ from microsetta_public_api.resources import resources
 from microsetta_public_api.utils.testing import (TempfileTestCase,
                                                  ConfigTestCase)
 from microsetta_public_api.repo._taxonomy_repo import TaxonomyRepo
+from microsetta_public_api.models._taxonomy import Taxonomy as TaxonomyModel
 
 
 class TestTaxonomyRepoHelpers(TestCase):
@@ -113,15 +114,18 @@ class TestTaxonomyRepoWithResources(TempfileTestCase, ConfigTestCase):
             'table2': {
                 'table': self.table1_filename,
                 'feature-data-taxonomy': self.taxonomy1_filename,
+                'cache-taxonomy': False,
             },
             'table3': {
                 'table': self.table3_filename,
                 'feature-data-taxonomy': self.taxonomy2_filename,
+                'cache-taxonomy': False,
                 'variances': self.table3_filename,
             },
             'table4': {
                 'table': self.table_biom,
                 'feature-data-taxonomy': self.taxonomy1_filename,
+                'cache-taxonomy': False,
                 'table-format': 'biom'
             },
             'table5': {
@@ -131,6 +135,11 @@ class TestTaxonomyRepoWithResources(TempfileTestCase, ConfigTestCase):
                 'table': self.table_biom,
                 'table-format': 'biom',
             },
+            'cached-taxonomy-table': {
+                'table': self.table1_filename,
+                'feature-data-taxonomy': self.taxonomy1_filename,
+                'cache-taxonomy': True,
+            },
         }})
         resources.update(config.resources)
         self.repo = TaxonomyRepo()
@@ -140,7 +149,7 @@ class TestTaxonomyRepoWithResources(TempfileTestCase, ConfigTestCase):
         ConfigTestCase.tearDown(self)
 
     def test_available_taxonomy_tables(self):
-        exp = ['table2', 'table3', 'table4']
+        exp = ['table2', 'table3', 'table4', 'cached-taxonomy-table']
         obs = self.repo.resources()
         self.assertCountEqual(exp, obs)
 
@@ -154,6 +163,11 @@ class TestTaxonomyRepoWithResources(TempfileTestCase, ConfigTestCase):
         obs = self.repo.table('table2')
         self.assertEqual(exp, obs)
 
+    def test_get_table_cached_taxonomy(self):
+        exp = self.table
+        obs = self.repo.table('cached-taxonomy-table')
+        self.assertEqual(exp, obs)
+
     def test_get_table_invalid(self):
         with self.assertRaises(ValueError):
             self.repo.table('table1')
@@ -164,6 +178,16 @@ class TestTaxonomyRepoWithResources(TempfileTestCase, ConfigTestCase):
         obs['Confidence'] = obs['Confidence'].astype('float64')
         assert_frame_equal(exp, obs)
 
+    def test_get_taxonomy_model_cached(self):
+        exp = resources['table_resources']['cached-taxonomy-table']['model']
+        obs = self.repo.model('cached-taxonomy-table')
+        self.assertIs(exp, obs)
+
+    def test_get_taxonomy_model_non_cached(self):
+        self.assertNotIn('model', resources['table_resources']['table2'])
+        obs = self.repo.model('table2')
+        self.assertIsInstance(obs, TaxonomyModel)
+
     def test_get_taxonomy_invalid(self):
         with self.assertRaises(ValueError):
             self.repo.table('foo')
diff --git a/microsetta_public_api/tests/test_resources.py b/microsetta_public_api/tests/test_resources.py
index b9f0f8e..ef01b8d 100644
--- a/microsetta_public_api/tests/test_resources.py
+++ b/microsetta_public_api/tests/test_resources.py
@@ -11,6 +11,7 @@ from qiime2.metadata.io import MetadataFileError
 from microsetta_public_api.exceptions import ConfigurationError
 from microsetta_public_api.utils.testing import TempfileTestCase
 from microsetta_public_api.resources import ResourceManager, _parse_q2_data
+from microsetta_public_api.models._taxonomy import Taxonomy as TaxonomyModel
 
 
 class TestResourceManagerUpdateMetadata(TempfileTestCase):
@@ -218,7 +219,12 @@ class TestResourceManagerUpdateTables(TempfileTestCase):
                 'feature-data-taxonomy': self.taxonomy_qza,
                 'variances': self.table_biom,
                 'table-format': 'biom',
-            }
+            },
+            'table-with-cached-taxonomy': {
+                'table': self.table_qza,
+                'feature-data-taxonomy': self.taxonomy_qza,
+                'cache-taxonomy': True,
+            },
         }}
 
     def test_simple_table(self):
@@ -290,7 +296,7 @@ class TestResourceManagerUpdateTables(TempfileTestCase):
                              [subset_table])
         new_table_config = self.resources['table_resources'][
             subset_table]
-        self.assertCountEqual(['table', 'feature-data-taxonomy'],
+        self.assertCountEqual(['table', 'feature-data-taxonomy', 'model'],
                               new_table_config.keys())
 
         exp_table = self.table
@@ -333,7 +339,8 @@ class TestResourceManagerUpdateTables(TempfileTestCase):
                              [subset_table])
         new_table_config = self.resources['table_resources'][
             subset_table]
-        self.assertCountEqual(['table', 'variances', 'feature-data-taxonomy'],
+        self.assertCountEqual(['table', 'variances',
+                               'feature-data-taxonomy', 'model'],
                               new_table_config.keys())
 
         exp_table = self.table
@@ -349,6 +356,26 @@ class TestResourceManagerUpdateTables(TempfileTestCase):
         obs_tax['Confidence'] = obs_tax['Confidence'].astype('float')
         assert_frame_equal(exp_tax, obs_tax)
 
+    def test_table_with_taxonomy_and_cached_taxonomy(self):
+        subset_table = 'table-with-cached-taxonomy'
+        config = {'table_resources': {
+            subset_table: self.config['table_resources'][subset_table]}}
+        self.resources.update(config)
+        self.assertListEqual(list(self.resources['table_resources']),
+                             [subset_table])
+        new_table_config = self.resources['table_resources'][
+            subset_table]
+        self.assertCountEqual(['table', 'feature-data-taxonomy',
+                               'cache-taxonomy', 'model'],
+                              new_table_config.keys())
+
+        exp_table = self.table
+        obs_table = new_table_config['table']
+        assert_frame_equal(exp_table.to_dataframe(dense=True),
+                           obs_table.to_dataframe(dense=True))
+        tax_model = new_table_config.get('model', None)
+        self.assertIsInstance(tax_model, TaxonomyModel)
+
 
 class TestResourceManagerQ2Parse(TempfileTestCase):
 

ci/test-env.yml
pip install -e .[dev]
parse_log_pytest
environment.yml
pytest flake8
apt-get update apt-get install -y gcc
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
anyio==4.5.2
asgiref==3.8.1
attrs==25.3.0
bibtexparser @ file:///home/conda/feedstock_root/build_artifacts/bibtexparser_1728919167780/work
biom-format @ file:///home/conda/feedstock_root/build_artifacts/biom-format_1716131825166/work
blinker @ file:///home/conda/feedstock_root/build_artifacts/blinker_1715091184126/work
Brotli @ file:///home/conda/feedstock_root/build_artifacts/brotli-split_1695989787169/work
cached-property @ file:///home/conda/feedstock_root/build_artifacts/cached_property_1615209429212/work
certifi @ file:///home/conda/feedstock_root/build_artifacts/certifi_1725278078093/work/certifi
cffi @ file:///home/conda/feedstock_root/build_artifacts/cffi_1723018376978/work
charset-normalizer @ file:///home/conda/feedstock_root/build_artifacts/charset-normalizer_1728479282467/work
click @ file:///home/conda/feedstock_root/build_artifacts/click_1692311806742/work
colorama @ file:///home/conda/feedstock_root/build_artifacts/colorama_1666700638685/work
connexion==3.2.0
decorator==4.4.2
dill @ file:///home/conda/feedstock_root/build_artifacts/dill_1727594984357/work
exceptiongroup @ file:///home/conda/feedstock_root/build_artifacts/exceptiongroup_1720869315914/work
flake8==7.1.2
Flask @ file:///home/conda/feedstock_root/build_artifacts/flask_1712667726126/work
h11==0.14.0
h2 @ file:///home/conda/feedstock_root/build_artifacts/h2_1634280454336/work
h5py @ file:///home/conda/feedstock_root/build_artifacts/h5py_1717664826778/work
hpack==4.0.0
httpcore==1.0.7
httpx==0.28.1
hyperframe @ file:///home/conda/feedstock_root/build_artifacts/hyperframe_1619110129307/work
idna @ file:///home/conda/feedstock_root/build_artifacts/idna_1726459485162/work
ijson @ file:///home/conda/feedstock_root/build_artifacts/ijson_1717674449751/work
importlib-resources==5.13.0
importlib_metadata @ file:///home/conda/feedstock_root/build_artifacts/importlib-metadata_1726082825846/work
inflection==0.5.1
iniconfig @ file:///home/conda/feedstock_root/build_artifacts/iniconfig_1673103042956/work
itsdangerous @ file:///home/conda/feedstock_root/build_artifacts/itsdangerous_1713372668944/work
Jinja2 @ file:///home/conda/feedstock_root/build_artifacts/jinja2_1715127149914/work
jsonschema==4.23.0
jsonschema-specifications==2023.12.1
MarkupSafe @ file:///home/conda/feedstock_root/build_artifacts/markupsafe_1706899923320/work
mccabe==0.7.0
-e git+https://github.com/biocore/microsetta-public-api.git@0f7a462d4a610e5e799772253ad61e09d04411d6#egg=microsetta_public_api
natsort @ file:///home/conda/feedstock_root/build_artifacts/natsort_1687263093793/work
networkx @ file:///home/conda/feedstock_root/build_artifacts/networkx_1680692919326/work
numpy @ file:///home/conda/feedstock_root/build_artifacts/numpy_1687808301083/work
packaging @ file:///home/conda/feedstock_root/build_artifacts/packaging_1733203243479/work
pandas @ file:///home/conda/feedstock_root/build_artifacts/pandas_1688740514018/work
patsy @ file:///home/conda/feedstock_root/build_artifacts/patsy_1704469236901/work
pkgutil_resolve_name==1.3.10
platformdirs @ file:///home/conda/feedstock_root/build_artifacts/platformdirs_1726613481435/work
pluggy @ file:///home/conda/feedstock_root/build_artifacts/pluggy_1713667077545/work
pooch @ file:///home/conda/feedstock_root/build_artifacts/pooch_1717777836653/work
pycodestyle==2.12.1
pycparser @ file:///home/conda/feedstock_root/build_artifacts/pycparser_1711811537435/work
pyflakes==3.2.0
pyparsing @ file:///home/conda/feedstock_root/build_artifacts/pyparsing_1724616129934/work
PySocks @ file:///home/conda/feedstock_root/build_artifacts/pysocks_1661604839144/work
pytest @ file:///home/conda/feedstock_root/build_artifacts/pytest_1733087655016/work
python-dateutil @ file:///home/conda/feedstock_root/build_artifacts/python-dateutil_1709299778482/work
python-multipart==0.0.20
pytz @ file:///home/conda/feedstock_root/build_artifacts/pytz_1726055524169/work
PyYAML @ file:///home/conda/feedstock_root/build_artifacts/pyyaml_1723018227672/work
q2-types==2022.2.0
qiime2==2022.2.0
referencing==0.35.1
requests @ file:///home/conda/feedstock_root/build_artifacts/requests_1717057054362/work
rpds-py==0.20.1
scikit-bio @ file:///home/conda/feedstock_root/build_artifacts/scikit-bio_1720451147408/work
scipy @ file:///home/conda/feedstock_root/build_artifacts/scipy-split_1683900206454/work/base/dist/scipy-1.10.1-cp38-cp38-linux_x86_64.whl#sha256=13ab5c17dedeb97a65ba90de1c51475f2d3ae0fe50bc43e9b018cc2943541de4
six @ file:///home/conda/feedstock_root/build_artifacts/six_1620240208055/work
sniffio==1.3.1
starlette==0.44.0
statsmodels @ file:///home/conda/feedstock_root/build_artifacts/statsmodels_1702575354706/work
swagger_ui_bundle==1.1.0
tomli @ file:///home/conda/feedstock_root/build_artifacts/tomli_1727974628237/work
typing_extensions==4.13.0
tzdata @ file:///home/conda/feedstock_root/build_artifacts/python-tzdata_1727140567071/work
tzlocal @ file:///home/conda/feedstock_root/build_artifacts/tzlocal_1588939190034/work
urllib3 @ file:///home/conda/feedstock_root/build_artifacts/urllib3_1726496430923/work
Werkzeug @ file:///home/conda/feedstock_root/build_artifacts/werkzeug_1729884156362/work
zipp @ file:///home/conda/feedstock_root/build_artifacts/zipp_1731262100163/work
zstandard==0.23.0

name: microsetta-public-api
channels:
  - qiime2
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - bibtexparser=1.4.2=pyhd8ed1ab_0
  - biom-format=2.1.16=py38hfb59056_1
  - blinker=1.8.2=pyhd8ed1ab_0
  - brotli-python=1.1.0=py38h17151c0_1
  - bzip2=1.0.8=h4bc722e_7
  - c-ares=1.34.4=hb9d3cd8_0
  - ca-certificates=2025.2.25=h06a4308_0
  - cached-property=1.5.2=hd8ed1ab_1
  - cached_property=1.5.2=pyha770c72_1
  - certifi=2024.8.30=pyhd8ed1ab_0
  - cffi=1.17.0=py38heb5c249_0
  - charset-normalizer=3.4.0=pyhd8ed1ab_0
  - click=8.1.7=unix_pyh707e725_0
  - colorama=0.4.6=pyhd8ed1ab_0
  - decorator=4.4.2=py_0
  - dill=0.3.9=pyhd8ed1ab_0
  - exceptiongroup=1.2.2=pyhd8ed1ab_0
  - flask=3.0.3=pyhd8ed1ab_0
  - h2=4.1.0=pyhd8ed1ab_0
  - h5py=3.11.0=nompi_py38h55b5aab_102
  - hdf5=1.14.3=nompi_h2d575fe_109
  - hpack=4.0.0=pyh9f0ad1d_0
  - hyperframe=6.0.1=pyhd8ed1ab_0
  - idna=3.10=pyhd8ed1ab_0
  - ijson=3.3.0=pyhd8ed1ab_0
  - importlib-metadata=8.5.0=pyha770c72_0
  - iniconfig=2.0.0=pyhd8ed1ab_0
  - itsdangerous=2.2.0=pyhd8ed1ab_0
  - jinja2=3.1.4=pyhd8ed1ab_0
  - keyutils=1.6.1=h166bdaf_0
  - krb5=1.21.3=h659f571_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libaec=1.1.3=h59595ed_0
  - libblas=3.9.0=20_linux64_openblas
  - libcblas=3.9.0=20_linux64_openblas
  - libcurl=8.12.1=h332b0f4_0
  - libedit=3.1.20250104=pl5321h7949ede_0
  - libev=4.33=hd590300_2
  - libffi=3.4.4=h6a678d5_1
  - libgcc=14.2.0=h767d61c_2
  - libgcc-ng=14.2.0=h69a702a_2
  - libgfortran=14.2.0=h69a702a_2
  - libgfortran-ng=14.2.0=h69a702a_2
  - libgfortran5=14.2.0=hf1ad2bd_2
  - libgomp=14.2.0=h767d61c_2
  - liblapack=3.9.0=20_linux64_openblas
  - libnghttp2=1.64.0=h161d5f1_0
  - libnsl=2.0.1=hd590300_0
  - libopenblas=0.3.25=pthreads_h413a1c8_0
  - libsqlite=3.49.1=hee588c1_2
  - libssh2=1.11.1=hf672d98_0
  - libstdcxx=14.2.0=h8f9b012_2
  - libstdcxx-ng=14.2.0=h4852527_2
  - libuuid=2.38.1=h0b41bf4_0
  - libxcrypt=4.4.36=hd590300_1
  - libzlib=1.3.1=hb9d3cd8_2
  - markupsafe=2.1.5=py38h01eb140_0
  - natsort=8.4.0=pyhd8ed1ab_0
  - ncurses=6.5=h2d0b736_3
  - networkx=3.1=pyhd8ed1ab_0
  - numpy=1.24.4=py38h59b608b_0
  - openssl=3.4.1=h7b32b05_0
  - packaging=24.2=pyhd8ed1ab_2
  - pandas=2.0.3=py38h01efb38_1
  - patsy=0.5.6=pyhd8ed1ab_0
  - pip=24.3.1=pyh8b19718_0
  - platformdirs=4.3.6=pyhd8ed1ab_0
  - pluggy=1.5.0=pyhd8ed1ab_0
  - pooch=1.8.2=pyhd8ed1ab_0
  - pycparser=2.22=pyhd8ed1ab_0
  - pyparsing=3.1.4=pyhd8ed1ab_0
  - pysocks=1.7.1=pyha2e5f31_6
  - pytest=8.3.4=pyhd8ed1ab_0
  - python=3.8.20=h4a871b0_2_cpython
  - python-dateutil=2.9.0=pyhd8ed1ab_0
  - python-tzdata=2024.2=pyhd8ed1ab_0
  - python_abi=3.8=5_cp38
  - pytz=2024.2=pyhd8ed1ab_0
  - pyyaml=6.0.2=py38h2019614_0
  - q2-types=2022.2.0=py38_0
  - qiime2=2022.2.0=py38_0
  - readline=8.2=h5eee18b_0
  - requests=2.32.3=pyhd8ed1ab_0
  - scikit-bio=0.6.2=py38haee39ac_0
  - scipy=1.10.1=py38h59b608b_3
  - setuptools=75.3.0=pyhd8ed1ab_0
  - six=1.16.0=pyh6c4a22f_0
  - statsmodels=0.14.1=py38h7f0c24c_0
  - tk=8.6.13=noxft_h4845f30_101
  - tomli=2.0.2=pyhd8ed1ab_0
  - tzlocal=2.1=pyh9f0ad1d_0
  - urllib3=2.2.3=pyhd8ed1ab_0
  - werkzeug=3.0.6=pyhd8ed1ab_0
  - wheel=0.45.1=pyhd8ed1ab_0
  - xz=5.6.4=h5eee18b_1
  - yaml=0.2.5=h7f98852_2
  - zipp=3.21.0=pyhd8ed1ab_0
  - zstandard=0.23.0=py38h62bed22_0
  - zstd=1.5.6=ha6fb4c9_0
  - pip:
      - anyio==4.5.2
      - asgiref==3.8.1
      - attrs==25.3.0
      - connexion==3.2.0
      - flake8==7.1.2
      - h11==0.14.0
      - httpcore==1.0.7
      - httpx==0.28.1
      - importlib-resources==5.13.0
      - inflection==0.5.1
      - jsonschema==4.23.0
      - jsonschema-specifications==2023.12.1
      - mccabe==0.7.0
      - pkgutil-resolve-name==1.3.10
      - pycodestyle==2.12.1
      - pyflakes==3.2.0
      - python-multipart==0.0.20
      - referencing==0.35.1
      - rpds-py==0.20.1
      - sniffio==1.3.1
      - starlette==0.44.0
      - swagger-ui-bundle==1.1.0
      - typing-extensions==4.13.0
prefix: /opt/conda/envs/microsetta-public-api

microsetta_public_api/repo/tests/test_taxonomy_repo.py::TestTaxonomyRepoWithResources::test_available_taxonomy_tables microsetta_public_api/repo/tests/test_taxonomy_repo.py::TestTaxonomyRepoWithResources::test_available_taxonomy_tables_empty_repo microsetta_public_api/repo/tests/test_taxonomy_repo.py::TestTaxonomyRepoWithResources::test_exists microsetta_public_api/repo/tests/test_taxonomy_repo.py::TestTaxonomyRepoWithResources::test_exists_single microsetta_public_api/repo/tests/test_taxonomy_repo.py::TestTaxonomyRepoWithResources::test_get_table microsetta_public_api/repo/tests/test_taxonomy_repo.py::TestTaxonomyRepoWithResources::test_get_table_cached_taxonomy microsetta_public_api/repo/tests/test_taxonomy_repo.py::TestTaxonomyRepoWithResources::test_get_table_invalid microsetta_public_api/repo/tests/test_taxonomy_repo.py::TestTaxonomyRepoWithResources::test_get_taxonomy microsetta_public_api/repo/tests/test_taxonomy_repo.py::TestTaxonomyRepoWithResources::test_get_taxonomy_invalid microsetta_public_api/repo/tests/test_taxonomy_repo.py::TestTaxonomyRepoWithResources::test_get_taxonomy_model_cached microsetta_public_api/repo/tests/test_taxonomy_repo.py::TestTaxonomyRepoWithResources::test_get_taxonomy_model_non_cached microsetta_public_api/repo/tests/test_taxonomy_repo.py::TestTaxonomyRepoWithResources::test_get_variances microsetta_public_api/repo/tests/test_taxonomy_repo.py::TestTaxonomyRepoWithResources::test_get_variances_invalid microsetta_public_api/repo/tests/test_taxonomy_repo.py::TestTaxonomyRepoWithResources::test_get_variances_none microsetta_public_api/tests/test_resources.py::TestResourceManagerUpdateTables::test_table_with_taxonomy microsetta_public_api/tests/test_resources.py::TestResourceManagerUpdateTables::test_table_with_taxonomy_and_cached_taxonomy microsetta_public_api/tests/test_resources.py::TestResourceManagerUpdateTables::test_table_with_taxonomy_and_variance
microsetta_public_api/api/tests/test_integration.py::MetadataIntegrationTests::test_metadata_category_values_returns_404 microsetta_public_api/api/tests/test_integration.py::MetadataIntegrationTests::test_metadata_category_values_returns_numeric_array microsetta_public_api/api/tests/test_integration.py::MetadataIntegrationTests::test_metadata_category_values_returns_string_array microsetta_public_api/api/tests/test_integration.py::MetadataIntegrationTests::test_metadata_sample_ids_extra_categories_have_no_effect microsetta_public_api/api/tests/test_integration.py::MetadataIntegrationTests::test_metadata_sample_ids_get_age_cat_only microsetta_public_api/api/tests/test_integration.py::MetadataIntegrationTests::test_metadata_sample_ids_get_bmi_only microsetta_public_api/api/tests/test_integration.py::MetadataIntegrationTests::test_metadata_sample_ids_get_null_parameters_succeeds microsetta_public_api/api/tests/test_integration.py::MetadataIntegrationTests::test_metadata_sample_ids_returns_empty microsetta_public_api/api/tests/test_integration.py::MetadataIntegrationTests::test_metadata_sample_ids_returns_simple microsetta_public_api/api/tests/test_integration.py::TaxonomyIntegrationTests::test_resources microsetta_public_api/api/tests/test_integration.py::TaxonomyIntegrationTests::test_summarize_group microsetta_public_api/api/tests/test_integration.py::TaxonomyIntegrationTests::test_summarize_group_cached_model microsetta_public_api/api/tests/test_integration.py::TaxonomyIntegrationTests::test_summarize_single_sample microsetta_public_api/api/tests/test_integration.py::AlphaIntegrationTests::test_group_summary microsetta_public_api/api/tests/test_integration.py::AlphaIntegrationTests::test_resources_available microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_group_summary microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_metadata_category_values_returns_404 microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_metadata_category_values_returns_numeric_array microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_metadata_category_values_returns_string_array microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_metadata_filter_on_alpha_and_age_cat microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_metadata_filter_on_alpha_and_and_taxonomy_and_age_cat microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_metadata_filter_on_alpha_and_and_taxonomy_and_age_cat_empty microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_metadata_filter_on_taxonomy microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_metadata_filter_on_taxonomy_and_age_cat microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_metadata_sample_ids_extra_categories_have_no_effect microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_metadata_sample_ids_get_age_cat_only microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_metadata_sample_ids_get_bmi_only microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_metadata_sample_ids_get_null_parameters_succeeds microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_metadata_sample_ids_returns_empty microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_metadata_sample_ids_returns_simple microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_resources microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_resources_available microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_summarize_group microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_summarize_group_cached_model microsetta_public_api/api/tests/test_integration.py::AllIntegrationTest::test_summarize_single_sample
microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py::TaxonomyImplementationTests::test_taxonomy_from_list_summarize_group_one_sample_with_variance microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py::TaxonomyImplementationTests::test_taxonomy_from_list_summarize_group_simple microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py::TaxonomyImplementationTests::test_taxonomy_from_list_summarize_group_simple_cached_model microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py::TaxonomyImplementationTests::test_taxonomy_from_list_summarize_group_simple_with_variances microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py::TaxonomyImplementationTests::test_taxonomy_from_list_summarize_single_sample_simple microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py::TaxonomyImplementationTests::test_taxonomy_from_list_summarize_single_simple microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py::TaxonomyImplementationTests::test_taxonomy_from_list_unknown_resource microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py::TaxonomyImplementationTests::test_taxonomy_from_list_unknown_sample microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py::TaxonomyImplementationTests::test_taxonomy_resources_available microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py::TaxonomyImplementationTests::test_taxonomy_summarize_group_one_sample_with_variance microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py::TaxonomyImplementationTests::test_taxonomy_summarize_group_simple microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py::TaxonomyImplementationTests::test_taxonomy_summarize_group_simple_with_variances microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py::TaxonomyImplementationTests::test_taxonomy_unknown_resource microsetta_public_api/api/tests/implementation_tests/test_taxonomy.py::TaxonomyImplementationTests::test_taxonomy_unknown_sample microsetta_public_api/repo/tests/test_taxonomy_repo.py::TestTaxonomyRepoHelpers::test_get_resource_component microsetta_public_api/repo/tests/test_taxonomy_repo.py::TestTaxonomyRepoHelpers::test_get_resource_table_not_available microsetta_public_api/tests/test_resources.py::TestResourceManagerUpdateMetadata::test_resource_manager_update_metadata_correct microsetta_public_api/tests/test_resources.py::TestResourceManagerUpdateMetadata::test_resource_manager_update_metadata_does_not_exist microsetta_public_api/tests/test_resources.py::TestResourceManagerUpdateMetadata::test_resource_manager_update_metadata_non_string_dict microsetta_public_api/tests/test_resources.py::TestResourceManagerUpdateAlpha::test_update_alpha_resources microsetta_public_api/tests/test_resources.py::TestResourceManagerUpdateAlpha::test_update_alpha_resources_non_dict microsetta_public_api/tests/test_resources.py::TestResourceManagerUpdateAlpha::test_update_alpha_resources_path_is_not_qza microsetta_public_api/tests/test_resources.py::TestResourceManagerUpdateAlpha::test_update_alpha_resources_qza_dne microsetta_public_api/tests/test_resources.py::TestResourceManagerUpdateTables::test_simple_table microsetta_public_api/tests/test_resources.py::TestResourceManagerUpdateTables::test_table_with_variance microsetta_public_api/tests/test_resources.py::TestResourceManagerUpdateTables::test_two_tables microsetta_public_api/tests/test_resources.py::TestResourceManagerUpdateTables::test_two_tables_with_biom microsetta_public_api/tests/test_resources.py::TestResourceManagerQ2Parse::test_parse_q2_data microsetta_public_api/tests/test_resources.py::TestResourceManagerQ2Parse::test_parse_q2_data_file_does_not_exist microsetta_public_api/tests/test_resources.py::TestResourceManagerQ2Parse::test_parse_q2_data_with_predicate microsetta_public_api/tests/test_resources.py::TestResourceManagerQ2Parse::test_parse_q2_data_wrong_semantic_type
microsetta_public_api/api/metadata.py microsetta_public_api/api/taxonomy.py microsetta_public_api/repo/_taxonomy_repo.py microsetta_public_api/resources.py README.md
microsetta_public_api/api/metadata.py microsetta_public_api/api/taxonomy.py microsetta_public_api/repo/_taxonomy_repo.py microsetta_public_api/resources.py README.md