[med-svn] [Git][med-team/q2-types][master] 7 commits: New upstream version
Andreas Tille
gitlab at salsa.debian.org
Thu Sep 5 09:43:14 BST 2019
Andreas Tille pushed to branch master at Debian Med / q2-types
Commits:
c2e50340 by Andreas Tille at 2019-09-05T08:37:57Z
New upstream version
- - - - -
8a6ed0d9 by Andreas Tille at 2019-09-05T08:37:58Z
New upstream version 2019.7.0
- - - - -
83e00b8c by Andreas Tille at 2019-09-05T08:37:59Z
Update upstream source from tag 'upstream/2019.7.0'
Update to upstream version '2019.7.0'
with Debian dir 08592128bafebe64ffd1b73091d9c7a6d4bcebbf
- - - - -
1b7a4d73 by Andreas Tille at 2019-09-05T08:37:59Z
debhelper-compat 12
- - - - -
ad007ef2 by Andreas Tille at 2019-09-05T08:38:06Z
Standards-Version: 4.4.0
- - - - -
043e3c3e by Andreas Tille at 2019-09-05T08:38:26Z
Respect DEB_BUILD_OPTIONS in override_dh_auto_test target
- - - - -
a153552b by Andreas Tille at 2019-09-05T08:42:19Z
Upload to unstable
- - - - -
25 changed files:
- ci/recipe/meta.yaml
- debian/changelog
- − debian/compat
- debian/control
- debian/rules
- q2_types/_version.py
- q2_types/feature_data/__init__.py
- q2_types/feature_data/_format.py
- q2_types/feature_data/_transformer.py
- q2_types/feature_data/_type.py
- + q2_types/feature_data/tests/data/bad_differential.tsv
- + q2_types/feature_data/tests/data/differentials.tsv
- + q2_types/feature_data/tests/data/dna-sequences-consecutive-ids.fasta
- + q2_types/feature_data/tests/data/dna-sequences-corrupt-characters.fasta
- + q2_types/feature_data/tests/data/dna-sequences-first-line-not-id.fasta
- + q2_types/feature_data/tests/data/dna-with-bom-fails.fasta
- + q2_types/feature_data/tests/data/dna-with-bom-passes.fasta
- + q2_types/feature_data/tests/data/empty_differential.tsv
- + q2_types/feature_data/tests/data/inf_differential.tsv
- + q2_types/feature_data/tests/data/not_differential.tsv
- q2_types/feature_data/tests/test_format.py
- q2_types/feature_data/tests/test_transformer.py
- q2_types/feature_data/tests/test_type.py
- q2_types/feature_table/_transformer.py
- q2_types/feature_table/tests/test_transformer.py
Changes:
=====================================
ci/recipe/meta.yaml
=====================================
@@ -21,8 +21,6 @@ requirements:
- scikit-bio >=0.5.4
- numpy
- blas=*=openblas
- # AVX 512 extensions are broken in 0.3.5 and 0.3.6
- - openblas 0.3.3
- pandas
- biom-format >=2.1.5,<2.2.0
- ijson
=====================================
debian/changelog
=====================================
@@ -1,3 +1,13 @@
+q2-types (2019.7.0-1) unstable; urgency=medium
+
+ * Team upload.
+ * New upstream version
+ * debhelper-compat 12
+ * Standards-Version: 4.4.0
+ * Respect DEB_BUILD_OPTIONS in override_dh_auto_test target
+
+ -- Andreas Tille <tille at debian.org> Thu, 05 Sep 2019 10:38:27 +0200
+
q2-types (2019.4.1-1) unstable; urgency=medium
* New upstream version
=====================================
debian/compat deleted
=====================================
@@ -1 +0,0 @@
-12
=====================================
debian/control
=====================================
@@ -1,9 +1,9 @@
Source: q2-types
-Section: science
-Priority: optional
Maintainer: Debian Med Packaging Team <debian-med-packaging at lists.alioth.debian.org>
Uploaders: Liubov Chuprikova <chuprikovalv at gmail.com>
-Build-Depends: debhelper (>= 12~),
+Section: science
+Priority: optional
+Build-Depends: debhelper-compat (= 12),
dh-python,
python3,
python3-setuptools,
@@ -13,7 +13,7 @@ Build-Depends: debhelper (>= 12~),
python3-ijson,
python3-h5py,
qiime
-Standards-Version: 4.3.0
+Standards-Version: 4.4.0
Vcs-Browser: https://salsa.debian.org/med-team/q2-types
Vcs-Git: https://salsa.debian.org/med-team/q2-types.git
Homepage: https://qiime2.org/
=====================================
debian/rules
=====================================
@@ -14,7 +14,9 @@ export PYBUILD_BEFORE_INSTALL=rm -rvf {build_dir}/q2-types.egg-* {build_dir}/sit
dh $@ --with python3 --buildsystem=pybuild
override_dh_auto_test:
+ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
dh_auto_test -- -s custom --test-args="cd {build_dir}; py.test-3 --cov=q2_types"
+endif
override_dh_install:
dh_install
=====================================
q2_types/_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: 2019.4.1)"
- git_full = "39051b2475fccf77526778589b67efcbf00314cf"
- git_date = "2019-05-08 16:49:19 -0700"
+ git_refnames = " (tag: 2019.7.0)"
+ git_full = "9f31de0c81510fbe6be8b16f95e23b4c974ca002"
+ git_date = "2019-07-30 18:15:54 +0000"
keywords = {"refnames": git_refnames, "full": git_full, "date": git_date}
return keywords
=====================================
q2_types/feature_data/__init__.py
=====================================
@@ -13,9 +13,11 @@ from ._format import (
HeaderlessTSVTaxonomyDirectoryFormat, TSVTaxonomyFormat,
TSVTaxonomyDirectoryFormat, DNAFASTAFormat, DNASequencesDirectoryFormat,
PairedDNASequencesDirectoryFormat, AlignedDNAFASTAFormat,
- AlignedDNASequencesDirectoryFormat)
+ AlignedDNASequencesDirectoryFormat, DifferentialFormat,
+ DifferentialDirectoryFormat)
from ._type import (
- FeatureData, Taxonomy, Sequence, PairedEndSequence, AlignedSequence)
+ FeatureData, Taxonomy, Sequence, PairedEndSequence, AlignedSequence,
+ Differential)
# TODO remove these imports when tests are rewritten. Remove from __all__ too
from ._transformer import DNAIterator, PairedDNAIterator, AlignedDNAIterator
@@ -23,11 +25,11 @@ from ._transformer import DNAIterator, PairedDNAIterator, AlignedDNAIterator
__all__ = [
'TaxonomyFormat', 'TaxonomyDirectoryFormat', 'HeaderlessTSVTaxonomyFormat',
'HeaderlessTSVTaxonomyDirectoryFormat', 'TSVTaxonomyFormat',
- 'TSVTaxonomyDirectoryFormat', 'DNAFASTAFormat',
+ 'TSVTaxonomyDirectoryFormat', 'DNAFASTAFormat', 'DifferentialFormat',
'DNASequencesDirectoryFormat', 'PairedDNASequencesDirectoryFormat',
'AlignedDNAFASTAFormat', 'AlignedDNASequencesDirectoryFormat',
'FeatureData', 'Taxonomy', 'Sequence', 'PairedEndSequence',
'AlignedSequence', 'DNAIterator', 'PairedDNAIterator',
- 'AlignedDNAIterator']
+ 'AlignedDNAIterator', 'Differential', 'DifferentialDirectoryFormat']
importlib.import_module('q2_types.feature_data._transformer')
=====================================
q2_types/feature_data/_format.py
=====================================
@@ -6,8 +6,12 @@
# The full license is in the file LICENSE, distributed with this software.
# ----------------------------------------------------------------------------
+import re
import skbio.io
+
import qiime2.plugin.model as model
+from qiime2.plugin import ValidationError
+import qiime2
from ..plugin_setup import plugin
@@ -131,23 +135,47 @@ TSVTaxonomyDirectoryFormat = model.SingleFileDirectoryFormat(
class DNAFASTAFormat(model.TextFileFormat):
- def sniff(self):
- filepath = str(self)
- sniffer = skbio.io.io_registry.get_sniffer('fasta')
- if sniffer(filepath)[0]:
- generator = skbio.io.read(filepath, constructor=skbio.DNA,
- format='fasta', verify=False)
- try:
- for seq, _ in zip(generator, range(5)):
- pass
- return True
- # ValueError raised by skbio if there are invalid DNA chars.
- except ValueError:
- pass
+ def _validate_lines(self, max_lines):
+ FASTADNAValidator = re.compile(r'[ACGTURYKMSWBDHVN]+\r?\n?')
+ last_line_was_ID = False
- # Empty files are ok also
- empty_sniffer = skbio.io.io_registry.get_sniffer('<emptyfile>')
- return empty_sniffer(filepath)[0]
+ with open(str(self), 'rb') as fh:
+ try:
+ first = fh.read(6)
+ if first[:3] == b'\xEF\xBB\xBF':
+ first = first[3:]
+ # Empty files should validate
+ if first.strip() == b'':
+ return
+ if first[0] != ord(b'>'):
+ raise ValidationError("First line of file is not a valid "
+ "FASTA ID. FASTA IDs must start "
+ "with '>'")
+ fh.seek(0)
+ for line_number, line in enumerate(fh, 1):
+ if line_number >= max_lines:
+ return
+ line = line.decode('utf-8-sig')
+ if line.startswith('>'):
+ if last_line_was_ID:
+ raise ValidationError('Multiple consecutive IDs '
+ 'starting on line '
+ f'{line_number-1!r}')
+ last_line_was_ID = True
+ elif re.fullmatch(FASTADNAValidator, line):
+ last_line_was_ID = False
+ else:
+ raise ValidationError('Invalid characters on line '
+ f'{line_number} (does not match '
+ 'IUPAC characters for a DNA '
+ 'sequence).')
+ except UnicodeDecodeError as e:
+ raise ValidationError(f'utf-8 cannot decode byte on line '
+ f'{line_number}') from e
+
+ def _validate_(self, max_lines):
+ level_map = {'min': 100, 'max': float('inf')}
+ self._validate_lines(level_map[max_lines])
DNASequencesDirectoryFormat = model.SingleFileDirectoryFormat(
@@ -185,10 +213,30 @@ AlignedDNASequencesDirectoryFormat = model.SingleFileDirectoryFormat(
AlignedDNAFASTAFormat)
+class DifferentialFormat(model.TextFileFormat):
+ def validate(self, *args):
+ try:
+ md = qiime2.Metadata.load(str(self))
+ except qiime2.metadata.MetadataFileError as md_exc:
+ raise ValidationError(md_exc) from md_exc
+
+ if md.column_count == 0:
+ raise ValidationError('Format must contain at least 1 column')
+
+ filtered_md = md.filter_columns(column_type='numeric')
+ if filtered_md.column_count != md.column_count:
+ raise ValidationError('Must only contain numeric values.')
+
+
+DifferentialDirectoryFormat = model.SingleFileDirectoryFormat(
+ 'DifferentialDirectoryFormat', 'differentials.tsv', DifferentialFormat)
+
+
plugin.register_formats(
TSVTaxonomyFormat, TSVTaxonomyDirectoryFormat,
HeaderlessTSVTaxonomyFormat, HeaderlessTSVTaxonomyDirectoryFormat,
TaxonomyFormat, TaxonomyDirectoryFormat, DNAFASTAFormat,
DNASequencesDirectoryFormat, PairedDNASequencesDirectoryFormat,
- AlignedDNAFASTAFormat, AlignedDNASequencesDirectoryFormat
+ AlignedDNAFASTAFormat, AlignedDNASequencesDirectoryFormat,
+ DifferentialFormat, DifferentialDirectoryFormat
)
=====================================
q2_types/feature_data/_transformer.py
=====================================
@@ -18,7 +18,7 @@ from ..plugin_setup import plugin
from ..feature_table import BIOMV210Format
from . import (TaxonomyFormat, HeaderlessTSVTaxonomyFormat, TSVTaxonomyFormat,
DNAFASTAFormat, PairedDNASequencesDirectoryFormat,
- AlignedDNAFASTAFormat)
+ AlignedDNAFASTAFormat, DifferentialFormat)
# Taxonomy format transformers
@@ -359,3 +359,21 @@ def _19(data: AlignedDNAIterator) -> AlignedDNAFASTAFormat:
@plugin.register_transformer
def _33(ff: AlignedDNAFASTAFormat) -> qiime2.Metadata:
return _dnafastaformats_to_metadata(ff)
+
+
+# differential types
+ at plugin.register_transformer
+def _222(ff: DifferentialFormat) -> pd.DataFrame:
+ return qiime2.Metadata.load(str(ff)).to_dataframe()
+
+
+ at plugin.register_transformer
+def _223(ff: DifferentialFormat) -> qiime2.Metadata:
+ return qiime2.Metadata.load(str(ff))
+
+
+ at plugin.register_transformer
+def _224(data: pd.DataFrame) -> DifferentialFormat:
+ ff = DifferentialFormat()
+ qiime2.Metadata(data).save(str(ff))
+ return ff
=====================================
q2_types/feature_data/_type.py
=====================================
@@ -11,7 +11,8 @@ from qiime2.plugin import SemanticType
from ..plugin_setup import plugin
from . import (TSVTaxonomyDirectoryFormat, DNASequencesDirectoryFormat,
PairedDNASequencesDirectoryFormat,
- AlignedDNASequencesDirectoryFormat)
+ AlignedDNASequencesDirectoryFormat,
+ DifferentialDirectoryFormat)
FeatureData = SemanticType('FeatureData', field_names='type')
@@ -26,8 +27,13 @@ PairedEndSequence = SemanticType('PairedEndSequence',
AlignedSequence = SemanticType('AlignedSequence',
variant_of=FeatureData.field['type'])
+Differential = SemanticType('Differential',
+ variant_of=FeatureData.field['type'])
+
plugin.register_semantic_types(FeatureData, Taxonomy, Sequence,
- PairedEndSequence, AlignedSequence)
+ PairedEndSequence, AlignedSequence,
+ Differential)
+
plugin.register_semantic_type_to_format(
FeatureData[Taxonomy],
@@ -41,3 +47,5 @@ plugin.register_semantic_type_to_format(
plugin.register_semantic_type_to_format(
FeatureData[AlignedSequence],
artifact_format=AlignedDNASequencesDirectoryFormat)
+plugin.register_semantic_type_to_format(
+ FeatureData[Differential], DifferentialDirectoryFormat)
=====================================
q2_types/feature_data/tests/data/bad_differential.tsv
=====================================
@@ -0,0 +1,32 @@
+featureid effect bad_effect
+F0 -0.910182258821735 a
+F1 1.01418002973925 0
+F2 1.02456128258909 0
+F3 -0.74363992043225 0
+F4 1.29823896534823 0
+F5 -1.12965055281585 0
+F6 -0.522401797448688 0
+F7 0.327560711072239 0
+F8 -1.3738693465664802 0
+F9 -0.7847891526325621 0
+F10 -0.280063201878434 0
+F11 -0.251269847578052 0
+F12 1.24602780723028 0
+F13 0.665734866338239 0
+F14 -0.889042985114811 0
+F15 -0.811956802515126 0
+F16 0.11591764582945001 0
+F17 -0.156195990858492 0
+F18 -0.965770633683909 0
+F19 0.8035240337800391 0
+F20 0.680306950765235 0
+F21 -0.688388077896823 0
+F22 0.7949653982850671 0
+F23 -1.11912925367142 0
+F24 -1.1059356352774599 0
+F25 0.678934047810573 0
+F26 -0.937189288219405 0
+F27 -0.9997301931164799 0
+F28 -0.31799033232181 0
+F29 -0.66141741897569 0
+F30 0.550511528315366 0
=====================================
q2_types/feature_data/tests/data/differentials.tsv
=====================================
@@ -0,0 +1,32 @@
+featureid effect
+F0 -0.910182258821735
+F1 1.01418002973925
+F2 1.02456128258909
+F3 -0.74363992043225
+F4 1.29823896534823
+F5 -1.12965055281585
+F6 -0.522401797448688
+F7 0.327560711072239
+F8 -1.3738693465664802
+F9 -0.7847891526325621
+F10 -0.280063201878434
+F11 -0.251269847578052
+F12 1.24602780723028
+F13 0.665734866338239
+F14 -0.889042985114811
+F15 -0.811956802515126
+F16 0.11591764582945001
+F17 -0.156195990858492
+F18 -0.965770633683909
+F19 0.8035240337800391
+F20 0.680306950765235
+F21 -0.688388077896823
+F22 0.7949653982850671
+F23 -1.11912925367142
+F24 -1.1059356352774599
+F25 0.678934047810573
+F26 -0.937189288219405
+F27 -0.9997301931164799
+F28 -0.31799033232181
+F29 -0.66141741897569
+F30 0.550511528315366
=====================================
q2_types/feature_data/tests/data/dna-sequences-consecutive-ids.fasta
=====================================
@@ -0,0 +1,2 @@
+>This is an ID
+>This is another ID
=====================================
q2_types/feature_data/tests/data/dna-sequences-corrupt-characters.fasta
=====================================
@@ -0,0 +1,2 @@
+>This data is corrupt
+
\ No newline at end of file
=====================================
q2_types/feature_data/tests/data/dna-sequences-first-line-not-id.fasta
=====================================
@@ -0,0 +1 @@
+This is not an id
=====================================
q2_types/feature_data/tests/data/dna-with-bom-fails.fasta
=====================================
@@ -0,0 +1 @@
+Not a valid id
=====================================
q2_types/feature_data/tests/data/dna-with-bom-passes.fasta
=====================================
@@ -0,0 +1,2 @@
+>Some kinda DNA
+ACGTACGTACGT
=====================================
q2_types/feature_data/tests/data/empty_differential.tsv
=====================================
@@ -0,0 +1,32 @@
+featureid
+F0
+F1
+F2
+F3
+F4
+F5
+F6
+F7
+F8
+F9
+F10
+F11
+F12
+F13
+F14
+F15
+F16
+F17
+F18
+F19
+F20
+F21
+F22
+F23
+F24
+F25
+F26
+F27
+F28
+F29
+F30
=====================================
q2_types/feature_data/tests/data/inf_differential.tsv
=====================================
@@ -0,0 +1,32 @@
+featureid effect
+F0 inf
+F1 1.01418002973925
+F2 1.02456128258909
+F3 -0.74363992043225
+F4 1.29823896534823
+F5 -1.12965055281585
+F6 -0.522401797448688
+F7 0.327560711072239
+F8 -1.3738693465664802
+F9 -0.7847891526325621
+F10 -0.280063201878434
+F11 -0.251269847578052
+F12 1.24602780723028
+F13 0.665734866338239
+F14 -0.889042985114811
+F15 -0.811956802515126
+F16 0.11591764582945
+F17 -0.156195990858492
+F18 -0.965770633683909
+F19 0.8035240337800391
+F20 0.680306950765235
+F21 -0.688388077896823
+F22 0.7949653982850671
+F23 -1.11912925367142
+F24 -1.10593563527746
+F25 0.678934047810573
+F26 -0.937189288219405
+F27 -0.99973019311648
+F28 -0.31799033232181
+F29 -0.66141741897569
+F30 0.550511528315366
=====================================
q2_types/feature_data/tests/data/not_differential.tsv
=====================================
@@ -0,0 +1 @@
+asdfasdfasdfasdf asdfasdfa asdfasdf asdf asdfas dfa
\ No newline at end of file
=====================================
q2_types/feature_data/tests/test_format.py
=====================================
@@ -16,7 +16,7 @@ from q2_types.feature_data import (
HeaderlessTSVTaxonomyDirectoryFormat, TSVTaxonomyFormat,
TSVTaxonomyDirectoryFormat, DNAFASTAFormat, DNASequencesDirectoryFormat,
PairedDNASequencesDirectoryFormat, AlignedDNAFASTAFormat,
- AlignedDNASequencesDirectoryFormat
+ AlignedDNASequencesDirectoryFormat, DifferentialDirectoryFormat
)
from qiime2.plugin.testing import TestPluginBase
from qiime2.plugin import ValidationError
@@ -144,12 +144,11 @@ class TestDNAFASTAFormats(TestPluginBase):
format.validate()
- def test_dna_fasta_format_validate_negative(self):
- filepath = self.get_data_path('not-dna-sequences')
+ def test_dna_fasta_format_bom_passes(self):
+ filepath = self.get_data_path('dna-with-bom-passes.fasta')
format = DNAFASTAFormat(filepath, mode='r')
- with self.assertRaisesRegex(ValidationError, 'DNAFASTA'):
- format.validate()
+ format.validate()
def test_dna_fasta_format_empty_file(self):
filepath = os.path.join(self.temp_dir.name, 'empty')
@@ -159,6 +158,41 @@ class TestDNAFASTAFormats(TestPluginBase):
format.validate()
+ def test_dna_fasta_format_validate_negative(self):
+ filepath = self.get_data_path('not-dna-sequences')
+ format = DNAFASTAFormat(filepath, mode='r')
+
+ with self.assertRaisesRegex(ValidationError, 'DNAFASTA'):
+ format.validate()
+
+ def test_dna_fasta_format_consecutive_IDs(self):
+ filepath = self.get_data_path('dna-sequences-consecutive-ids.fasta')
+ format = DNAFASTAFormat(filepath, mode='r')
+
+ with self.assertRaisesRegex(ValidationError, 'consecutive IDs.*1'):
+ format.validate()
+
+ def test_dna_fasta_format_missing_initial_ID(self):
+ filepath = self.get_data_path('dna-sequences-first-line-not-id.fasta')
+ format = DNAFASTAFormat(filepath, mode='r')
+
+ with self.assertRaisesRegex(ValidationError, 'First line'):
+ format.validate()
+
+ def test_dna_fasta_format_corrupt_characters(self):
+ filepath = self.get_data_path('dna-sequences-corrupt-characters.fasta')
+ format = DNAFASTAFormat(filepath, mode='r')
+
+ with self.assertRaisesRegex(ValidationError, 'utf-8.*2'):
+ format.validate()
+
+ def test_dna_fasta_format_bom_fails(self):
+ filepath = self.get_data_path('dna-with-bom-fails.fasta')
+ format = DNAFASTAFormat(filepath, mode='r')
+
+ with self.assertRaisesRegex(ValidationError, 'First line'):
+ format.validate()
+
def test_dna_sequences_directory_format(self):
filepath = self.get_data_path('dna-sequences.fasta')
shutil.copy(filepath,
@@ -203,5 +237,58 @@ class TestDNAFASTAFormats(TestPluginBase):
format.validate()
+class TestDifferentialFormat(TestPluginBase):
+ package = 'q2_types.feature_data.tests'
+
+ def test_differential_format(self):
+ filepath = self.get_data_path('differentials.tsv')
+ temp_dir = self.temp_dir.name
+ shutil.copy(filepath,
+ os.path.join(temp_dir, 'differentials.tsv'))
+ format = DifferentialDirectoryFormat(temp_dir, mode='r')
+ format.validate()
+ self.assertTrue(True)
+
+ def test_differential_format_empty(self):
+ filepath = self.get_data_path('empty_differential.tsv')
+ temp_dir = self.temp_dir.name
+ shutil.copy(filepath,
+ os.path.join(temp_dir, 'differentials.tsv'))
+
+ with self.assertRaisesRegex(ValidationError, 'least 1 column'):
+ format = DifferentialDirectoryFormat(temp_dir, mode='r')
+ format.validate()
+
+ def test_differential_format_not(self):
+ filepath = self.get_data_path('not_differential.tsv')
+ temp_dir = self.temp_dir.name
+ shutil.copy(filepath,
+ os.path.join(temp_dir, 'differentials.tsv'))
+
+ with self.assertRaises(ValidationError):
+ format = DifferentialDirectoryFormat(temp_dir, mode='r')
+ format.validate()
+
+ def test_differential_format_inf(self):
+ filepath = self.get_data_path('inf_differential.tsv')
+ temp_dir = self.temp_dir.name
+ shutil.copy(filepath,
+ os.path.join(temp_dir, 'differentials.tsv'))
+
+ with self.assertRaisesRegex(ValidationError, 'numeric'):
+ format = DifferentialDirectoryFormat(temp_dir, mode='r')
+ format.validate()
+
+ def test_differential_format_bad_type(self):
+ filepath = self.get_data_path('bad_differential.tsv')
+ temp_dir = self.temp_dir.name
+ shutil.copy(filepath,
+ os.path.join(temp_dir, 'differentials.tsv'))
+
+ with self.assertRaisesRegex(ValidationError, 'numeric'):
+ format = DifferentialDirectoryFormat(temp_dir, mode='r')
+ format.validate()
+
+
if __name__ == '__main__':
unittest.main()
=====================================
q2_types/feature_data/tests/test_transformer.py
=====================================
@@ -21,7 +21,7 @@ from q2_types.feature_data import (
TaxonomyFormat, HeaderlessTSVTaxonomyFormat, TSVTaxonomyFormat,
DNAFASTAFormat, DNAIterator, PairedDNAIterator,
PairedDNASequencesDirectoryFormat, AlignedDNAFASTAFormat,
- AlignedDNAIterator
+ DifferentialFormat, AlignedDNAIterator
)
from q2_types.feature_data._transformer import (
_taxonomy_formats_to_dataframe, _dataframe_to_tsv_taxonomy_format)
@@ -656,5 +656,42 @@ class TestDNAFASTAFormatTransformers(TestPluginBase):
self.assertEqual(exp, obs)
+class TestDifferentialTransformer(TestPluginBase):
+ package = 'q2_types.feature_data.tests'
+
+ def test_differential_to_df(self):
+
+ _, obs = self.transform_format(DifferentialFormat, pd.DataFrame,
+ filename='differentials.tsv')
+
+ # sniff to see if the first 4 feature ids are the same
+ exp = ['F0', 'F1', 'F2', 'F3']
+ obs = list(obs.index[:4])
+ self.assertListEqual(exp, obs)
+
+ def test_differential_to_md(self):
+
+ _, obs = self.transform_format(DifferentialFormat, qiime2.Metadata,
+ filename='differentials.tsv')
+ obs = obs.to_dataframe()
+ # sniff to see if the first 4 feature ids are the same
+ exp = ['F0', 'F1', 'F2', 'F3']
+ obs = list(obs.index[:4])
+ self.assertListEqual(exp, obs)
+
+ def test_df_to_differential(self):
+ transformer = self.get_transformer(pd.DataFrame, DifferentialFormat)
+
+ index = pd.Index(['SEQUENCE1', 'SEQUENCE2', 'SEQUENCE3'])
+ index.name = 'featureid'
+ input = pd.DataFrame(
+ [-1.3, 0.1, 1.2], index=index, columns=['differential'],
+ dtype=float)
+
+ obs = transformer(input)
+
+ self.assertIsInstance(obs, DifferentialFormat)
+
+
if __name__ == '__main__':
unittest.main()
=====================================
q2_types/feature_data/tests/test_type.py
=====================================
@@ -10,8 +10,9 @@ import unittest
from q2_types.feature_data import (
FeatureData, Taxonomy, Sequence, PairedEndSequence, AlignedSequence,
- TSVTaxonomyDirectoryFormat, DNASequencesDirectoryFormat,
- PairedDNASequencesDirectoryFormat, AlignedDNASequencesDirectoryFormat
+ Differential, TSVTaxonomyDirectoryFormat, DNASequencesDirectoryFormat,
+ DifferentialDirectoryFormat, PairedDNASequencesDirectoryFormat,
+ AlignedDNASequencesDirectoryFormat
)
from qiime2.plugin.testing import TestPluginBase
@@ -34,6 +35,13 @@ class TestTypes(TestPluginBase):
def test_aligned_sequence_semantic_type_registration(self):
self.assertRegisteredSemanticType(AlignedSequence)
+ def test_differential_semantic_type_registration(self):
+ self.assertRegisteredSemanticType(AlignedSequence)
+
+ def test_differential_semantic_type_to_format_registration(self):
+ self.assertSemanticTypeRegisteredToFormat(
+ FeatureData[Differential], DifferentialDirectoryFormat)
+
def test_taxonomy_semantic_type_to_format_registration(self):
self.assertSemanticTypeRegisteredToFormat(
FeatureData[Taxonomy], TSVTaxonomyDirectoryFormat)
=====================================
q2_types/feature_table/_transformer.py
=====================================
@@ -73,13 +73,6 @@ def _table_to_v210(data):
return ff
-def _table_to_v100(data):
- ff = BIOMV100Format()
- with ff.open() as fh:
- data.to_json(generated_by=_get_generated_by(), direct_io=fh)
- return ff
-
-
def _dataframe_to_table(df):
if df.index.inferred_type != 'string':
raise TypeError("Please provide a DataFrame with a string-based Index")
@@ -87,16 +80,6 @@ def _dataframe_to_table(df):
sample_ids=df.index)
- at plugin.register_transformer
-def _1(data: biom.Table) -> BIOMV100Format:
- data = _drop_axis_metadata(data)
-
- ff = BIOMV100Format()
- with ff.open() as fh:
- fh.write(data.to_json(generated_by=_get_generated_by()))
- return ff
-
-
@plugin.register_transformer
def _2(ff: BIOMV100Format) -> biom.Table:
return _parse_biom_table_v100(ff)
@@ -152,12 +135,6 @@ def _10(df: pd.DataFrame) -> BIOMV210Format:
return _table_to_v210(_dataframe_to_table(df))
- at plugin.register_transformer
-def _11(ff: BIOMV210Format) -> BIOMV100Format:
- data = _parse_biom_table_v210(ff)
- return _table_to_v100(data)
-
-
@plugin.register_transformer
def _12(data: biom.Table) -> qiime2.Metadata:
return _table_to_metadata(data)
=====================================
q2_types/feature_table/tests/test_transformer.py
=====================================
@@ -24,20 +24,6 @@ from q2_types.feature_table._transformer import (_parse_biom_table_v100,
class TestTransformers(TestPluginBase):
package = 'q2_types.feature_table.tests'
- def test_biom_table_to_biom_v100_format(self):
- filepath = self.get_data_path('feature-table_v100.biom')
- transformer = self.get_transformer(biom.Table, BIOMV100Format)
- input = biom.load_table(filepath)
-
- obs = transformer(input)
- obs = biom.load_table(str(obs))
-
- exp = input
- self.assertEqual(obs.ids(axis='observation').all(),
- exp.ids(axis='observation').all())
- self.assertEqual(obs.ids(axis='sample').all(),
- exp.ids(axis='sample').all())
-
def test_biom_v100_format_to_biom_table(self):
input, obs = self.transform_format(BIOMV100Format, biom.Table,
filename='feature-table_v100.biom')
@@ -111,17 +97,6 @@ class TestTransformers(TestPluginBase):
self.assertEqual(obs.ids(axis='sample').all(),
exp.ids(axis='sample').all())
- def test_biom_v210_format_to_biom_v100_format(self):
- input, obs = self.transform_format(BIOMV210Format, BIOMV100Format,
- filename='feature-table_v210.biom')
- exp = biom.load_table(str(input))
- obs = biom.load_table(str(obs))
-
- self.assertEqual(obs.ids(axis='observation').all(),
- exp.ids(axis='observation').all())
- self.assertEqual(obs.ids(axis='sample').all(),
- exp.ids(axis='sample').all())
-
def test_to_pandas_data_frame_to_biom_v210_format(self):
filepath = self.get_data_path('feature-table_v100.biom')
transformer1 = self.get_transformer(BIOMV100Format, pd.DataFrame)
View it on GitLab: https://salsa.debian.org/med-team/q2-types/compare/afa40c46951c3023897821090e77cf9a3c686f36...a153552bba2e7aadb3a989420f297f69e932a888
--
View it on GitLab: https://salsa.debian.org/med-team/q2-types/compare/afa40c46951c3023897821090e77cf9a3c686f36...a153552bba2e7aadb3a989420f297f69e932a888
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/20190905/fee046ee/attachment-0001.html>
More information about the debian-med-commit
mailing list