[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