[med-svn] [Git][med-team/q2-feature-table][upstream] New upstream version 2022.11.1+dfsg

Andreas Tille (@tille) gitlab at salsa.debian.org
Thu Jan 12 17:45:55 GMT 2023



Andreas Tille pushed to branch upstream at Debian Med / q2-feature-table


Commits:
7ef487bc by Andreas Tille at 2023-01-12T18:38:32+01:00
New upstream version 2022.11.1+dfsg
- - - - -


9 changed files:

- + .github/workflows/add-to-project-ci.yml
- .github/workflows/ci.yml
- ci/recipe/meta.yaml
- + q2_feature_table/_examples.py
- q2_feature_table/_normalize.py
- q2_feature_table/_version.py
- − q2_feature_table/examples.py
- q2_feature_table/plugin_setup.py
- q2_feature_table/tests/test_normalize.py


Changes:

=====================================
.github/workflows/add-to-project-ci.yml
=====================================
@@ -0,0 +1,21 @@
+name: Add new issues and PRs to triage project board
+
+on:
+  issues:
+    types:
+      - opened
+  pull_request_target:
+    types:
+      - opened
+
+jobs:
+  add-to-project:
+    name: Add issue to project
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/add-to-project at v0.3.0
+        with:
+          project-url: https://github.com/orgs/qiime2/projects/36
+          github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}
+          labeled: skip-triage
+          label-operator: NOT


=====================================
.github/workflows/ci.yml
=====================================
@@ -8,7 +8,7 @@ on:
   pull_request:
   push:
     branches:
-      - 2022.8-patches
+      - master
 
 jobs:
   lint:
@@ -50,6 +50,6 @@ jobs:
     - uses: qiime2/action-library-packaging at alpha1
       with:
         package-name: q2-feature-table
-        build-target: release
+        build-target: dev
         additional-tests: py.test --pyargs q2_feature_table
         library-token: ${{ secrets.LIBRARY_TOKEN }}


=====================================
ci/recipe/meta.yaml
=====================================
@@ -21,6 +21,9 @@ requirements:
     - scikit-bio {{ scikit_bio }}
     - biom-format {{ biom_format }}
     - seaborn
+    # pinned here on 10.19.22 due to pkg int build failure on community
+    # due to matplotlib bug. will be resolved once 3.7.0 is released
+    - matplotlib =3.6.0
     - pandas {{ pandas }}
     - numpy
     # `ipywidgets` included to avoid ShimWarning from


=====================================
q2_feature_table/_examples.py
=====================================
@@ -0,0 +1,334 @@
+# ----------------------------------------------------------------------------
+# Copyright (c) 2016-2022, QIIME 2 development team.
+#
+# Distributed under the terms of the Modified BSD License.
+#
+# The full license is in the file LICENSE, distributed with this software.
+# ----------------------------------------------------------------------------
+
+import numpy as np
+from biom import Table
+
+import qiime2
+from qiime2 import Artifact
+
+
+rep_seqs_1_url = (f'https://data.qiime2.org/{qiime2.__release__}/'
+                  'tutorials/metadata/rep-seqs.qza')
+rep_seqs_2_url = (f'https://data.qiime2.org/{qiime2.__release__}/'
+                  'tutorials/phylogeny/rep-seqs.qza')
+taxonomy_1_url = ('https://docs.qiime2.org/jupyterbooks/cancer-microbiome-'
+                  'intervention-tutorial/data/030-tutorial-downstream/020-'
+                  'taxonomy/taxonomy.qza')
+moving_pics_ft_url = (f'https://data.qiime2.org/{qiime2.__release__}/'
+                      'tutorials/filtering/table.qza')
+moving_pics_md_url = (f'https://data.qiime2.org/{qiime2.__release__}/'
+                      'tutorials/moving-pictures/sample_metadata.tsv')
+rep_seqs_dada2_url = 'https://data.qiime2.org/usage-examples/' \
+                     'moving-pictures/rep-seqs-dada2.qza'
+rep_seqs_deblur_url = 'https://data.qiime2.org/usage-examples/' \
+                      'moving-pictures/rep-seqs-deblur.qza'
+
+
+def ft1_factory():
+    return Artifact.import_data(
+        'FeatureTable[Frequency]',
+        Table(np.array([[0, 1, 3], [1, 1, 2]]),
+              ['O1', 'O2'],
+              ['S1', 'S2', 'S3']))
+
+
+def ft2_factory():
+    return Artifact.import_data(
+        'FeatureTable[Frequency]',
+        Table(np.array([[0, 2, 6], [2, 2, 4]]),
+              ['O1', 'O3'],
+              ['S4', 'S5', 'S6']))
+
+
+def ft3_factory():
+    return Artifact.import_data(
+        'FeatureTable[Frequency]',
+        Table(np.array([[0, 4, 9], [4, 4, 8]]),
+              ['O1', 'O4'],
+              ['S7', 'S8', 'S9']))
+
+
+def feature_table_merge_two_tables(use):
+    feature_table1 = use.init_artifact('feature_table1', ft1_factory)
+    feature_table2 = use.init_artifact('feature_table2', ft2_factory)
+
+    merged_table, = use.action(
+        use.UsageAction(plugin_id='feature_table',
+                        action_id='merge'),
+        use.UsageInputs(tables=[feature_table1, feature_table2]),
+        use.UsageOutputNames(merged_table='merged_table'),
+    )
+
+    merged_table.assert_output_type('FeatureTable[Frequency]')
+
+
+def feature_table_merge_three_tables(use):
+    feature_table1 = use.init_artifact('feature_table1', ft1_factory)
+    feature_table2 = use.init_artifact('feature_table2', ft2_factory)
+    feature_table3 = use.init_artifact('feature_table3', ft3_factory)
+
+    merged_table, = use.action(
+        use.UsageAction(plugin_id='feature_table',
+                        action_id='merge'),
+        use.UsageInputs(
+            tables=[feature_table1, feature_table2, feature_table3],
+            overlap_method='sum'
+        ),
+        use.UsageOutputNames(merged_table='merged_table'),
+    )
+
+    merged_table.assert_output_type('FeatureTable[Frequency]')
+
+
+def feature_table_merge_taxa(use):
+    # TODO: Would probably be better to have two different artifacts here
+    tax1 = use.init_artifact_from_url('tax1', taxonomy_1_url)
+    tax2 = \
+        use.init_artifact_from_url('tax2', taxonomy_1_url)
+
+    merged_data, = use.action(
+        use.UsageAction('feature_table', 'merge_taxa'),
+        use.UsageInputs(
+            data=[tax1, tax2]
+        ),
+        use.UsageOutputNames(
+            merged_data='merged_data'
+        )
+    )
+
+    merged_data.assert_output_type('FeatureData[Taxonomy]')
+
+
+def feature_table_merge_seqs(use):
+    dada2_seqs = use.init_artifact_from_url('seqs1', rep_seqs_dada2_url)
+    deblur_seqs = use.init_artifact_from_url('seqs2', rep_seqs_deblur_url)
+
+    merged_data, = use.action(
+        use.UsageAction('feature_table', 'merge_seqs'),
+        use.UsageInputs(
+            data=[dada2_seqs, deblur_seqs]
+        ),
+        use.UsageOutputNames(
+            merged_data='merged_data'
+        )
+    )
+
+    merged_data.assert_output_type('FeatureData[Sequence]')
+
+
+def feature_table_filter_samples_min_features(use):
+    feature_table = use.init_artifact_from_url(
+        'feature_table', moving_pics_ft_url
+    )
+
+    filtered_table, = use.action(
+        use.UsageAction(plugin_id='feature_table', action_id='filter_samples'),
+        use.UsageInputs(table=feature_table,
+                        min_features=10),
+        use.UsageOutputNames(filtered_table='filtered_table')
+    )
+
+    filtered_table.assert_output_type('FeatureTable[Frequency]')
+
+
+def feature_table_filter_samples_min_frequency(use):
+    feature_table = use.init_artifact_from_url(
+        'feature_table', moving_pics_ft_url
+    )
+
+    filtered_table, = use.action(
+        use.UsageAction(plugin_id='feature_table', action_id='filter_samples'),
+        use.UsageInputs(table=feature_table,
+                        min_frequency=1500),
+        use.UsageOutputNames(filtered_table='filtered_table')
+    )
+
+    filtered_table.assert_output_type('FeatureTable[Frequency]')
+
+
+def feature_table_filter_samples_to_subject1(use):
+    feature_table = use.init_artifact_from_url(
+        'feature_table', moving_pics_ft_url
+    )
+    sample_metadata = use.init_metadata_from_url(
+        'sample_metadata', moving_pics_md_url
+    )
+
+    filtered_table, = use.action(
+        use.UsageAction(plugin_id='feature_table', action_id='filter_samples'),
+        use.UsageInputs(table=feature_table, metadata=sample_metadata,
+                        where='[subject]="subject-1"'),
+        use.UsageOutputNames(filtered_table='filtered_table')
+    )
+
+    filtered_table.assert_output_type('FeatureTable[Frequency]')
+
+
+def feature_table_filter_samples_to_skin(use):
+    feature_table = use.init_artifact_from_url(
+        'feature_table', moving_pics_ft_url
+    )
+    sample_metadata = use.init_metadata_from_url(
+        'sample_metadata', moving_pics_md_url
+    )
+
+    filtered_table, = use.action(
+        use.UsageAction(plugin_id='feature_table', action_id='filter_samples'),
+        use.UsageInputs(table=feature_table, metadata=sample_metadata,
+                        where='[body-site] IN ("left palm", "right palm")'),
+        use.UsageOutputNames(filtered_table='filtered_table')
+    )
+
+    filtered_table.assert_output_type('FeatureTable[Frequency]')
+
+
+def feature_table_filter_samples_to_subject1_gut(use):
+    feature_table = use.init_artifact_from_url(
+        'feature_table', moving_pics_ft_url
+    )
+    sample_metadata = use.init_metadata_from_url(
+        'sample_metadata', moving_pics_md_url
+    )
+
+    filtered_table, = use.action(
+        use.UsageAction(plugin_id='feature_table', action_id='filter_samples'),
+        use.UsageInputs(table=feature_table, metadata=sample_metadata,
+                        where=r'[subject]="subject-1" AND [body-site]="gut"'),
+        use.UsageOutputNames(filtered_table='filtered_table')
+    )
+
+    filtered_table.assert_output_type('FeatureTable[Frequency]')
+
+
+def feature_table_filter_samples_to_gut_or_abx(use):
+    feature_table = use.init_artifact_from_url(
+        'feature_table', moving_pics_ft_url
+    )
+    sample_metadata = use.init_metadata_from_url(
+        'sample_metadata', moving_pics_md_url
+    )
+
+    filtered_table, = use.action(
+        use.UsageAction(plugin_id='feature_table', action_id='filter_samples'),
+        use.UsageInputs(
+            table=feature_table, metadata=sample_metadata,
+            where=r'[body-site]="gut" OR [reported-antibiotic-usage]="Yes"'),
+        use.UsageOutputNames(filtered_table='filtered_table')
+    )
+
+    filtered_table.assert_output_type('FeatureTable[Frequency]')
+
+
+def feature_table_filter_samples_to_subject1_not_gut(use):
+    feature_table = use.init_artifact_from_url(
+        'feature_table', moving_pics_ft_url
+    )
+    sample_metadata = use.init_metadata_from_url(
+        'sample_metadata', moving_pics_md_url
+    )
+
+    filtered_table, = use.action(
+        use.UsageAction(plugin_id='feature_table', action_id='filter_samples'),
+        use.UsageInputs(
+            table=feature_table, metadata=sample_metadata,
+            where=r'[subject]="subject-1" AND NOT [body-site]="gut"'),
+        use.UsageOutputNames(filtered_table='filtered_table')
+    )
+
+    filtered_table.assert_output_type('FeatureTable[Frequency]')
+
+
+def feature_table_filter_features_min_samples(use):
+    feature_table = use.init_artifact_from_url(
+        'feature_table', moving_pics_ft_url
+    )
+
+    filtered_table, = use.action(
+        use.UsageAction(plugin_id='feature_table',
+                        action_id='filter_features'),
+        use.UsageInputs(table=feature_table,
+                        min_samples=2),
+        use.UsageOutputNames(filtered_table='filtered_table')
+    )
+
+    filtered_table.assert_output_type('FeatureTable[Frequency]')
+
+
+def feature_table_filter_features_conditionally(use):
+    feature_table = use.init_artifact_from_url(
+        'feature_table', moving_pics_ft_url
+    )
+
+    use.comment("Retain only features with at least 1%% abundance in at "
+                "least 34%% of samples.")
+
+    filtered_table, = use.action(
+        use.UsageAction(plugin_id='feature_table',
+                        action_id='filter_features_conditionally'),
+        use.UsageInputs(table=feature_table,
+                        abundance=0.01,
+                        prevalence=0.34),
+        use.UsageOutputNames(filtered_table='filtered_table')
+    )
+
+    filtered_table.assert_output_type('FeatureTable[Frequency]')
+
+
+def feature_table_group_samples(use):
+    feature_table = use.init_artifact_from_url(
+        'feature_table', moving_pics_ft_url
+    )
+    metadata = use.init_metadata_from_url(
+        'sample_metadata', moving_pics_md_url,
+    )
+    metadata_col = use.get_metadata_column('body-site', 'body-site', metadata)
+
+    use.comment("Combine samples from the same body-site into single sample. "
+                "Feature frequencies will be the median across the samples "
+                "being combined, rounded up to the nearest whole number.")
+
+    filtered_table, = use.action(
+        use.UsageAction(plugin_id='feature_table',
+                        action_id='group'),
+        use.UsageInputs(table=feature_table,
+                        metadata=metadata_col,
+                        mode='median-ceiling',
+                        axis='sample'),
+        use.UsageOutputNames(grouped_table='body_site_table')
+    )
+
+    filtered_table.assert_output_type('FeatureTable[Frequency]')
+
+
+def feature_table_summarize(use):
+    feature_table = use.init_artifact_from_url(
+        'feature_table', moving_pics_ft_url
+    )
+
+    viz, = use.action(
+        use.UsageAction('feature_table', 'summarize'),
+        use.UsageInputs(table=feature_table),
+        use.UsageOutputNames(visualization='table')
+    )
+
+    viz.assert_output_type('Visualization')
+
+
+def feature_table_tabulate_seqs(use):
+    rep_seqs = use.init_artifact_from_url(
+        'rep_seqs', rep_seqs_1_url
+    )
+
+    viz, = use.action(
+        use.UsageAction('feature_table', 'tabulate_seqs'),
+        use.UsageInputs(data=rep_seqs),
+        use.UsageOutputNames(visualization='rep-seqs')
+    )
+
+    viz.assert_output_type('Visualization')


=====================================
q2_feature_table/_normalize.py
=====================================
@@ -11,6 +11,9 @@ import biom
 
 def rarefy(table: biom.Table, sampling_depth: int,
            with_replacement: bool = False) -> biom.Table:
+    if with_replacement:
+        table = table.filter(lambda v, i, m: v.sum() >= sampling_depth,
+                             inplace=False, axis='sample')
     table = table.subsample(sampling_depth, axis='sample', by_id=False,
                             with_replacement=with_replacement)
 


=====================================
q2_feature_table/_version.py
=====================================
@@ -23,9 +23,9 @@ def get_keywords():
     # setup.py/versioneer.py will grep for the variable names, so they must
     # each be defined on a line of their own. _version.py will just call
     # get_keywords().
-    git_refnames = " (tag: 2022.8.1, 2022.8-patches)"
-    git_full = "90a5137f0c0050bd09e66265b84df615f20c4240"
-    git_date = "2022-09-06 14:01:49 -0700"
+    git_refnames = " (HEAD -> master, tag: 2022.11.1)"
+    git_full = "f01598e51815fd4ea25e8812c2c29eaef912bd4d"
+    git_date = "2022-12-21 21:42:18 +0000"
     keywords = {"refnames": git_refnames, "full": git_full, "date": git_date}
     return keywords
 


=====================================
q2_feature_table/examples.py deleted
=====================================
@@ -1,64 +0,0 @@
-# ----------------------------------------------------------------------------
-# Copyright (c) 2016-2022, QIIME 2 development team.
-#
-# Distributed under the terms of the Modified BSD License.
-#
-# The full license is in the file LICENSE, distributed with this software.
-# ----------------------------------------------------------------------------
-
-import numpy as np
-from biom import Table
-
-from qiime2 import Artifact
-
-
-def ft1_factory():
-    return Artifact.import_data(
-        'FeatureTable[Frequency]',
-        Table(np.array([[0, 1, 3], [1, 1, 2]]),
-              ['O1', 'O2'],
-              ['S1', 'S2', 'S3']))
-
-
-def ft2_factory():
-    return Artifact.import_data(
-        'FeatureTable[Frequency]',
-        Table(np.array([[0, 2, 6], [2, 2, 4]]),
-              ['O1', 'O3'],
-              ['S4', 'S5', 'S6']))
-
-
-def ft3_factory():
-    return Artifact.import_data(
-        'FeatureTable[Frequency]',
-        Table(np.array([[0, 4, 9], [4, 4, 8]]),
-              ['O1', 'O4'],
-              ['S7', 'S8', 'S9']))
-
-
-def feature_table_merge_example(use):
-    feature_table1 = use.init_artifact('feature_table1', ft1_factory)
-    feature_table2 = use.init_artifact('feature_table2', ft2_factory)
-
-    merged_table, = use.action(
-        use.UsageAction(plugin_id='feature_table',
-                        action_id='merge'),
-        use.UsageInputs(tables=[feature_table1, feature_table2]),
-        use.UsageOutputNames(merged_table='merged_table'),
-    )
-
-
-def feature_table_merge_three_tables_example(use):
-    feature_table1 = use.init_artifact('feature_table1', ft1_factory)
-    feature_table2 = use.init_artifact('feature_table2', ft2_factory)
-    feature_table3 = use.init_artifact('feature_table3', ft3_factory)
-
-    merged_table, = use.action(
-        use.UsageAction(plugin_id='feature_table',
-                        action_id='merge'),
-        use.UsageInputs(
-            tables=[feature_table1, feature_table2, feature_table3],
-            overlap_method='sum'
-        ),
-        use.UsageOutputNames(merged_table='merged_table'),
-    )


=====================================
q2_feature_table/plugin_setup.py
=====================================
@@ -10,13 +10,13 @@ from qiime2.plugin import (Plugin, Int, Float, Range, Metadata, Str, Bool,
                            Choices, MetadataColumn, Categorical, List,
                            Citations, TypeMatch, TypeMap)
 
-import q2_feature_table
 from q2_types.feature_table import (
     FeatureTable, Frequency, RelativeFrequency, PresenceAbsence, Composition)
 from q2_types.feature_data import (
     FeatureData, Sequence, Taxonomy, AlignedSequence)
-from .examples import (feature_table_merge_example,
-                       feature_table_merge_three_tables_example)
+
+import q2_feature_table
+import q2_feature_table._examples as ex
 
 citations = Citations.load('citations.bib', package='q2_feature_table')
 plugin = Plugin(
@@ -41,8 +41,7 @@ plugin.methods.register_function(
         'sampling_depth': ('The total frequency that each sample should be '
                            'rarefied to. Samples where the sum of frequencies '
                            'is less than the sampling depth will be not be '
-                           'included in the resulting table unless '
-                           'subsampling is performed with replacement.'),
+                           'included in the resulting table.'),
         'with_replacement': ('Rarefy with replacement by sampling from the '
                              'multinomial distribution instead of rarefying '
                              'without replacement.')
@@ -171,7 +170,8 @@ plugin.methods.register_function(
     },
     name="Group samples or features by a metadata column",
     description="Group samples or features in a feature table using metadata "
-                "to define the mapping of IDs to a group."
+                "to define the mapping of IDs to a group.",
+    examples={'group_samples': ex.feature_table_group_samples}
 )
 
 i_table, p_overlap_method, o_table = TypeMap({
@@ -204,8 +204,10 @@ plugin.methods.register_function(
     },
     name="Combine multiple tables",
     description="Combines feature tables using the `overlap_method` provided.",
-    examples={'basic': feature_table_merge_example,
-              'three_tables': feature_table_merge_three_tables_example},
+    examples={'feature_table_merge_two_tables':
+              ex.feature_table_merge_two_tables,
+              'feature_table_merge_three_tables':
+              ex.feature_table_merge_three_tables},
 )
 
 
@@ -227,7 +229,10 @@ plugin.methods.register_function(
     description="Combines feature data objects which may or may not "
                 "contain data for the same features. If different feature "
                 "data is present for the same feature id in the inputs, "
-                "the data from the first will be propagated to the result."
+                "the data from the first will be propagated to the result.",
+    examples={
+        'feature_table_merge_seqs': ex.feature_table_merge_seqs
+    }
 )
 
 
@@ -249,7 +254,10 @@ plugin.methods.register_function(
     description="Combines a pair of feature data objects which may or may not "
                 "contain data for the same features. If different feature "
                 "data is present for the same feature id in the inputs, "
-                "the data from the first will be propagated to the result."
+                "the data from the first will be propagated to the result.",
+    examples={
+        'feature_table_merge_taxa': ex.feature_table_merge_taxa
+    }
 )
 
 T1 = TypeMatch([Frequency, RelativeFrequency, PresenceAbsence, Composition])
@@ -338,7 +346,17 @@ plugin.methods.register_function(
     description="Filter samples from table based on frequency and/or "
                 "metadata. Any features with a frequency of zero after sample "
                 "filtering will also be removed. See the filtering tutorial "
-                "on https://docs.qiime2.org for additional details."
+                "on https://docs.qiime2.org for additional details.",
+    examples={
+        'filter_to_subject1': ex.feature_table_filter_samples_to_subject1,
+        'filter_to_skin': ex.feature_table_filter_samples_to_skin,
+        'filter_to_subject1_gut':
+        ex.feature_table_filter_samples_to_subject1_gut,
+        'filter_to_gut_or_abx': ex.feature_table_filter_samples_to_gut_or_abx,
+        'filter_to_subject1_not_gut':
+        ex.feature_table_filter_samples_to_subject1_not_gut,
+        'filter_min_features': ex.feature_table_filter_samples_min_features,
+        'filter_min_frequency': ex.feature_table_filter_samples_min_frequency}
 )
 
 plugin.methods.register_function(
@@ -367,7 +385,11 @@ plugin.methods.register_function(
                  "relative abundance of at least `abundance` in at least "
                  "`prevalence` number of samples). Any samples with a "
                  "frequency of zero after feature filtering will also be "
-                 "removed.")
+                 "removed."),
+    examples={
+        'feature_table_filter_features_conditionally':
+        ex.feature_table_filter_features_conditionally
+    }
 )
 
 
@@ -419,7 +441,11 @@ plugin.methods.register_function(
     description="Filter features from table based on frequency and/or "
                 "metadata. Any samples with a frequency of zero after feature "
                 "filtering will also be removed. See the filtering tutorial "
-                "on https://docs.qiime2.org for additional details."
+                "on https://docs.qiime2.org for additional details.",
+    examples={
+     'filter_features_min_samples':
+     ex.feature_table_filter_features_min_samples
+    }
 )
 
 
@@ -475,7 +501,10 @@ plugin.visualizers.register_function(
     input_descriptions={'table': 'The feature table to be summarized.'},
     parameter_descriptions={'sample_metadata': 'The sample metadata.'},
     name="Summarize table",
-    description="Generate visual and tabular summaries of a feature table."
+    description="Generate visual and tabular summaries of a feature table.",
+    examples={
+        'feature_table_summarize': ex.feature_table_summarize,
+    }
 )
 
 plugin.visualizers.register_function(
@@ -488,7 +517,10 @@ plugin.visualizers.register_function(
     description="Generate tabular view of feature identifier to sequence "
                 "mapping, including links to BLAST each sequence against "
                 "the NCBI nt database.",
-    citations=[citations['NCBI'], citations['NCBI-BLAST']]
+    citations=[citations['NCBI'], citations['NCBI-BLAST']],
+    examples={
+        'feature_table_tabulate_seqs': ex.feature_table_tabulate_seqs,
+    }
 )
 
 plugin.visualizers.register_function(


=====================================
q2_feature_table/tests/test_normalize.py
=====================================
@@ -28,16 +28,21 @@ class RarefyTests(TestCase):
         npt.assert_array_equal(a.sum(axis='sample'), np.array([2., 2.]))
 
     def test_rarefy_replacement(self):
-        t = Table(np.array([[0, 1, 3], [1, 1, 2]]),
+        t = Table(np.array([[0, 10, 30], [10, 10, 20]]),
                   ['O1', 'O2'],
                   ['S1', 'S2', 'S3'])
         rt = rarefy(t, 3, with_replacement=True)
         self.assertEqual(rt.shape, (2, 3))
 
-        for n_draws in range(5, 100, 5):
+        # IMPORTANT: samples below subsample depth should be removed
+        for n_draws in range(11, 21):
+            rt = rarefy(t, n_draws, with_replacement=True)
+            npt.assert_array_equal(rt.sum('sample'),
+                                   np.array([n_draws] * 2))
+        for n_draws in range(21, 50):
             rt = rarefy(t, n_draws, with_replacement=True)
             npt.assert_array_equal(rt.sum('sample'),
-                                   np.array([n_draws] * 3))
+                                   np.array([n_draws] * 1))
 
     def test_rarefy_depth_error(self):
         t = Table(np.array([[0, 1, 3], [1, 1, 2]]),



View it on GitLab: https://salsa.debian.org/med-team/q2-feature-table/-/commit/7ef487bc384272bcf7e1cf8f2763e3dde8fa6c6f

-- 
View it on GitLab: https://salsa.debian.org/med-team/q2-feature-table/-/commit/7ef487bc384272bcf7e1cf8f2763e3dde8fa6c6f
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20230112/733c6b15/attachment-0001.htm>


More information about the debian-med-commit mailing list