From 9fe4e1adc550ba2ac03def4e00eb288ce26351a7 Mon Sep 17 00:00:00 2001 From: Michele Berselli Date: Mon, 14 Nov 2022 15:33:27 -0500 Subject: [PATCH 1/2] improved error handling vcf_parser --- .github/workflows/main.yml | 1 - docs/API.md | 17 +- docs/conf.py | 2 +- granite/_version.py | 2 +- granite/lib/vcf_parser.py | 98 +++++++++-- poetry.lock | 341 ++++--------------------------------- pyproject.toml | 2 +- tests/test_SVqcVCF.py | 4 +- tests/test_novoCaller.py | 10 +- tests/test_toBig.py | 2 +- 10 files changed, 140 insertions(+), 339 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index af6733c..00807f6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -36,6 +36,5 @@ jobs: - name: Test granite run: | make configure - make update make build make test diff --git a/docs/API.md b/docs/API.md index fc5c183..0e1216b 100644 --- a/docs/API.md +++ b/docs/API.md @@ -187,7 +187,8 @@ The method *add_values_genotype(ID_genotype, values, sep=':')* allows to add val vnt_obj.add_values_genotype(ID_genotype, values) -The method *get_genotype_value(ID_genotype, tag, sep=':')* returns value for tag from the genotype specified by corresponding ID. sep is the tags separator used in format definition and genotype(s). +The method *get_genotype_value(ID_genotype, tag, complete_genotype=False, sep=':')* returns value for tag from the genotype specified by corresponding ID. sep is the tags separator used in format definition and genotype(s). +If complete_genotype=True, return '.' if tag is missing. If complete_genotype=False (default) raise exception for the missing tag. tag_val = vnt_obj.get_genotype_value(ID_genotype, tag) @@ -207,3 +208,17 @@ The method *get_tag_value(tag, sep=';')* returns the value from tag in INFO. sep tag_val = vnt_obj.get_tag_value(tag) *note: tag and ID are case sensitive.* + +### Custom error classes + +*MissingTag* describes a missing tag or tag value. + +*MissingTagDefinition* describes a missing tag definition. + +*TagDefinitionError* describes a format error for a tag definition. + +*TagFormatError* describes a format error for a tag. + +*MissingIdentifier* describes a missing genotype identifier in the VCF file. + +*VcfFormatError* describes an error in the VCF format. diff --git a/docs/conf.py b/docs/conf.py index 20dccd9..d33fa62 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -22,7 +22,7 @@ author = 'Michele Berselli, Phil Grayson' # The full version, including alpha/beta/rc tags -release = '0.2.0' +release = '0.2.1' # -- General configuration --------------------------------------------------- diff --git a/granite/_version.py b/granite/_version.py index 90477e9..36509b4 100644 --- a/granite/_version.py +++ b/granite/_version.py @@ -1,4 +1,4 @@ """Version information.""" # The following line *must* be the last in the module, exactly as formatted: -__version__ = "0.2.0" +__version__ = "0.2.1" diff --git a/granite/lib/vcf_parser.py b/granite/lib/vcf_parser.py index f16251a..f9497e9 100644 --- a/granite/lib/vcf_parser.py +++ b/granite/lib/vcf_parser.py @@ -21,6 +21,60 @@ import gzip +################################################################# +# +# Custom errors +# -> MissingTag +# -> MissingTagDefinition +# -> TagDefinitionError +# -> TagFormatError +# -> MissingIdentifier +# -> VcfFormatError +# +################################################################# +class MissingTag(Exception): + ''' custom error class, + describe a missing tag ''' + + def __init__(self, message): + self.message = message + +class MissingTagDefinition(Exception): + ''' custom error class, + describe a missing tag definition ''' + + def __init__(self, message): + self.message = message + +class TagDefinitionError(Exception): + ''' custom error class, + describe a format error for a tag definition ''' + + def __init__(self, message): + self.message = message + +class TagFormatError(Exception): + ''' custom error class, + describe a format error for a tag ''' + + def __init__(self, message): + self.message = message + +class MissingIdentifier(Exception): + ''' custom error class, + describe a missing genotype identifier in the VCF''' + + def __init__(self, message): + self.message = message + +class VcfFormatError(Exception): + ''' custom error class, + describe a format error in the VCF ''' + + def __init__(self, message): + self.message = message + + ################################################################# # # Vcf @@ -87,7 +141,7 @@ def get_tag_field_idx(self, tag, field, tag_type='INFO', sep='|'): format = format.replace('\"', '') format = format.replace('>', '') except Exception: - raise ValueError('\nERROR in VCF header structure, {0} tag definition has no format specification\n' + raise TagDefinitionError('\nERROR in VCF header structure, {0} tag definition has no format specification\n' .format(tag)) #end try # Search exact match @@ -102,7 +156,7 @@ def get_tag_field_idx(self, tag, field, tag_type='INFO', sep='|'): #end for #end if #end for - raise ValueError('\nERROR in VCF header structure, {0} tag definition is missing\n' + raise MissingTagDefinition('\nERROR in VCF header structure, {0} tag definition is missing\n' .format(tag)) #end def @@ -122,7 +176,7 @@ def check_tag_definition(self, tag, tag_type='INFO', sep='|'): #end if #end if #end for - raise ValueError('\nERROR in VCF header structure, {0} tag definition is missing\n' + raise MissingTagDefinition('\nERROR in VCF header structure, {0} tag definition is missing\n' .format(tag)) #end def @@ -191,7 +245,7 @@ def remove_tag_genotype(self, tag_to_remove, sep=':'): #end for # Error if tag_to_remove not found in FORMAT if idx_tag_to_remove == -1: - raise ValueError('\nERROR in variant FORMAT field, {0} tag is missing\n' + raise MissingTag('\nERROR in variant FORMAT field, {0} tag is missing\n' .format(tag_to_remove)) #end if # Updating FORMAT @@ -250,7 +304,7 @@ def add_values_genotype(self, ID_genotype, values, sep=':'): try: self.GENOTYPES[ID_genotype] += sep + values except Exception: - raise ValueError('\nERROR in GENOTYPES identifiers, {0} identifier is missing in VCF\n' + raise MissingIdentifier('\nERROR in GENOTYPES identifiers, {0} identifier is missing in VCF\n' .format(ID_genotype)) #end try #end def @@ -272,18 +326,20 @@ def get_tag_value(self, tag_to_get, sep=';'): try: return tag.split(tag_to_get + '=')[1] except Exception: # tag field is in a wrong format - raise ValueError('\nERROR in variant INFO field, {0} tag is in the wrong format\n' + raise TagFormatError('\nERROR in variant INFO field, {0} tag is in the wrong format\n' .format(tag_to_get)) #end try #end if #end for # tag_to_get not found - raise ValueError('\nERROR in variant INFO field, {0} tag is missing\n'.format(tag_to_get)) + raise MissingTag('\nERROR in variant INFO field, {0} tag is missing\n'.format(tag_to_get)) #end def - def get_genotype_value(self, ID_genotype, tag_to_get, sep=':'): - ''' get value from tag (tag_to_get) in genotype specified by corresponding ID ''' + def get_genotype_value(self, ID_genotype, tag_to_get, complete_genotype=False, sep=':'): + ''' get value from tag (tag_to_get) in genotype specified by corresponding ID + if complete_genotype, return '.' if tag is missing + if not complete_genotype, raise Exception for the missing tag ''' # Get index from FORMAT idx_tag_to_get = -1 for i, tag in enumerate(self.FORMAT.split(sep)): @@ -294,16 +350,24 @@ def get_genotype_value(self, ID_genotype, tag_to_get, sep=':'): #end for # Error if tag_to_get not found in FORMAT if idx_tag_to_get == -1: - raise ValueError('\nERROR in variant FORMAT field, {0} tag is missing\n' + raise MissingTag('\nERROR in variant FORMAT field, {0} tag is missing\n' .format(tag_to_get)) #end if # Get value from index in genotype by ID - try: - return self.GENOTYPES[ID_genotype].split(sep)[idx_tag_to_get] - except Exception: - raise ValueError('\nERROR in GENOTYPES identifiers, {0} identifier is missing in VCF\n' + if self.GENOTYPES.get(ID_genotype): + try: + return self.GENOTYPES[ID_genotype].split(sep)[idx_tag_to_get] + except Exception: + if complete_genotype: # expect dropped tags in genotype, return default '.' + return '.' + else: # expect full genotype, raise error if tag is missing + raise MissingTag('\nERROR in variant GENOTYPE field, {0} tag is missing for {1} identifier\n' + .format(tag_to_get, ID_genotype)) + #end try + else: # if genotype identifier is missing + raise MissingIdentifier('\nERROR in GENOTYPES identifiers, {0} identifier is missing in VCF\n' .format(ID_genotype)) - #end try + #end if #end def #end class Variant @@ -349,7 +413,7 @@ def parse_header(self): if definitions and columns: return self.Header(definitions, columns, IDs_genotypes) else: - raise ValueError('\nERROR in VCF header structure, missing essential lines\n') + raise VcfFormatError('\nERROR in VCF header structure, missing essential lines\n') #end if #end def @@ -362,7 +426,7 @@ def parse_variants(self): # generator try: yield self.Variant(line_strip, self.header.IDs_genotypes) except Exception: - raise ValueError('\nERROR in variant VCF structure, missing essential columns\n') + raise VcfFormatError('\nERROR in variant VCF structure, missing essential columns\n') #end try #end if #end if diff --git a/poetry.lock b/poetry.lock index 972e3de..edb3375 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,6 +1,6 @@ [[package]] name = "atomicwrites" -version = "1.4.0" +version = "1.4.1" description = "Atomic file writes." category = "dev" optional = false @@ -8,21 +8,21 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "attrs" -version = "21.4.0" +version = "22.1.0" description = "Classes Without Boilerplate" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.5" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"] [[package]] name = "bitarray" -version = "2.4.1" +version = "2.6.0" description = "efficient arrays of booleans -- C extension" category = "main" optional = false @@ -38,7 +38,7 @@ python-versions = "*" [[package]] name = "colorama" -version = "0.4.4" +version = "0.4.5" description = "Cross-platform colored terminal text." category = "dev" optional = false @@ -157,8 +157,8 @@ python-versions = ">=3.6" importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} [package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] +testing = ["pytest-benchmark", "pytest"] +dev = ["tox", "pre-commit"] [[package]] name = "py" @@ -181,7 +181,7 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pysam" -version = "0.19.0" +version = "0.20.0" description = "pysam" category = "main" optional = false @@ -271,271 +271,33 @@ content-hash = "b6e8b81ee1c0d5e9e28c359042778d40ae84b8d8d4906b3c362d71075722463e [metadata.files] atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, + {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, ] attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, -] -bitarray = [ - {file = "bitarray-2.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c986ed73054706a4520e0e40bfc0eab733d7ac888fa01b6f986ae675bd1ae01b"}, - {file = "bitarray-2.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5e5ea88b023d1d9850a76dca7ea33ddd10e1a4dc19344928c430dae37c2f13d9"}, - {file = "bitarray-2.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:39e47b8125244e48ee9dd01d1ee790775a887a0c803c6edf4026ed83ed8ce4b6"}, - {file = "bitarray-2.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70342e166fbae13071320257dac3899ad7a0a8e2a697404af30fa5f59609b03f"}, - {file = "bitarray-2.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e6abfc1969f41abd764c9cb421d59bcdd7b0761b81fc433532ad511a1730355"}, - {file = "bitarray-2.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce835deeba8c3341bed57f2aa02687d91cd013f90925bbb033ef6d29dfd5a301"}, - {file = "bitarray-2.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82f9eb3c7ccf15225cab14cb745e39814b5fe512788303270707f509a64850c5"}, - {file = "bitarray-2.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4186660099e7b7ddfb6278897d9d7d2cd223b460f1646ab3c30207d7e6412654"}, - {file = "bitarray-2.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:99c16c176bbe709d699981dd3a94778ee5179dfff34c77458a8d29da82529553"}, - {file = "bitarray-2.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d8e672472109425b03ddcd2ff7eaef6a3f2a3a4fd6113db185f3bcaa0db7c246"}, - {file = "bitarray-2.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e6b6980aa4efaf5e12d58f3728c6756b9a3895ddc3ab29c07a86cbc527b3ee91"}, - {file = "bitarray-2.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:10479f6c795302d014677eeb56ec5be90e64f04500c38fec6b9712b5e0bc8593"}, - {file = "bitarray-2.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:81e77a65b04114cd8f5665d0fc1a2f84f916c5cc65e9d112a21588f3b26d2180"}, - {file = "bitarray-2.4.1-cp310-cp310-win32.whl", hash = "sha256:a09c7acc6c59e39dc12cfbe43c5e84f1482e57831df97b5433951f867baca1d1"}, - {file = "bitarray-2.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9cfd809859e81a7fc11b7d7679b63d9f95e45289dc8ef7fecf573e0385c6b590"}, - {file = "bitarray-2.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ebda73921e4eb8fcd295209906a82917e17e6ded438bb3cb4255e29556393d34"}, - {file = "bitarray-2.4.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a517ce706fb1ea49c0fed083068ff9bd13c1101245952a3522213935b673deca"}, - {file = "bitarray-2.4.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cf70d802b71e9867337b1d66b058c20b25fc260d3226683231c314864f5fe14"}, - {file = "bitarray-2.4.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0266da3e2b69a0e83594518f2e8be0e3c710733be376460b04f4f32db9915553"}, - {file = "bitarray-2.4.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b233f07264b608dd39a7db52c08436206bc0cb9fffabe9d1bfe0fb344f66aa3e"}, - {file = "bitarray-2.4.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c727ece52069ec7181490027f777941db488627c53744e948646329175d55ae"}, - {file = "bitarray-2.4.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:056d1898bc0e4069e0e2ed019d33298e6fea5777cb51c76aaf666c61a940ff3c"}, - {file = "bitarray-2.4.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c99925e2e4e87da227297439aae2d879644d57c87141293a163c88a7a8d6c5b4"}, - {file = "bitarray-2.4.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:57e09bdaa3fe46a5db8f7ede58339df14bbbb04fcdc01958cdb03135c4debdfb"}, - {file = "bitarray-2.4.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:a579c5501a2587bc228e045b020854934da5ee0745afb35c7aa1045df0719073"}, - {file = "bitarray-2.4.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ac33b1f6647a28f05fff1996b9e0ecfeff01006afeff901515c77e75eb5d8beb"}, - {file = "bitarray-2.4.1-cp36-cp36m-win32.whl", hash = "sha256:4d88b09eb6a0760c41a99c34d92cf0af1b4dbda90b7ed7751137c0e42618cccf"}, - {file = "bitarray-2.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:1ff58f910aac14bcf64875a409a17d1dece3fe1d9a43b4f576d75db00d4e8560"}, - {file = "bitarray-2.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c88d0a14aa181066f65478401e8bcd1e631652fd5b2d02c2fc74b2e4d328ed5f"}, - {file = "bitarray-2.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3aebd4045dae28ba3ed7ace8ef8315c894de908cc86edfbcfcf9e8c1b6301f1"}, - {file = "bitarray-2.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05b873f2070abe4f3c44f1bb1b95549629f790184cabf2435c12b1637a45d790"}, - {file = "bitarray-2.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efabf024517c4024e64d825b4741c01d6c6a4d45eea22cb4ecd3cae28c41e6ea"}, - {file = "bitarray-2.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3148b4794bbc58db457c5852f99da7a4715ee77a67e1c7b4b38c860ef32af561"}, - {file = "bitarray-2.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:655ba9ccc5a8f4c80054d8ff089b2a87628b708c74826196899a66d68d340a3e"}, - {file = "bitarray-2.4.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e9057381af0cda0d90dc6396bf55298d0cd6af8d331a46cd71cb1bed791be5ca"}, - {file = "bitarray-2.4.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f34c74b09d61c82668cd3483f8da00ee271887de18e9c2db3d7f50d342bdb2c3"}, - {file = "bitarray-2.4.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:871da93c8db7cba2aed91cde9155cdac9e2b19820f1a125afa298f86c7796713"}, - {file = "bitarray-2.4.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:0ba2a7fca0c3a8bb8da374ccb8dc93c30cf43e7e49338844a3012cf164aa851d"}, - {file = "bitarray-2.4.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f80dae48a6644cd10548252363089bf631b5af2a2d3eb6fa7da6c19813e92966"}, - {file = "bitarray-2.4.1-cp37-cp37m-win32.whl", hash = "sha256:ea5b65469aca8ba5606372abac82111cbb80bfc3f7d65d1044383b3e3952e54b"}, - {file = "bitarray-2.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:728c44ab4c833b8cd9f219e7348776c0e45e8b9b6149a0beeae8fbb196c5a7d7"}, - {file = "bitarray-2.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6b5770d8afb3ca0b996888e97e926b497a3c00d44a89fddfcae62405c01ca48b"}, - {file = "bitarray-2.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:77c0a681c3d7945ec86c9cff39e2751b2fbd431c06f8be55b6024b023ebd8113"}, - {file = "bitarray-2.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:70edf29ee88301efe03fa4961a07a63a1e699c5a52bd28bee171265dcf5abca9"}, - {file = "bitarray-2.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e366e939d6664e9852b03ea4b9f047d9f37d6894ba5dd7db8ee56e1250d7a90"}, - {file = "bitarray-2.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c84c4dec5c3212b650403bafd6c67254ac31157485eb0dec4e83f42057b9f96d"}, - {file = "bitarray-2.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:68e8f6241a0ddacaac7a1e6cc4d086a03775e08bd6e8993d71095d5adc5cceb6"}, - {file = "bitarray-2.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a18aa5240b18de40613c27a847483b8cfda1c29fe1738049e6513cbef2f46fb"}, - {file = "bitarray-2.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:913b2290ace76e5d59fb26fc98dac6101b917324d3ad249932a0721d20b1c1a4"}, - {file = "bitarray-2.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:404ac056e6539cb2c9666b8792921c8a33b50032a0e36934be2e8692512bf930"}, - {file = "bitarray-2.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:f914aff9cfc5cde97ff5ad55acc127870a056ed9abdad0f3e301a7f59efd4be8"}, - {file = "bitarray-2.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:92e4ced145cfab3396069f87209e60dcd48e63b1168398e3544f63b3c8b83edd"}, - {file = "bitarray-2.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4f1b9ec29b1ace5efca695338ab66e5c1015be00360d186b83c7c855ba4686bd"}, - {file = "bitarray-2.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aee976dbec4a47fd8027530e71d9850757f11bce735859b9a4581f61ee54ccb9"}, - {file = "bitarray-2.4.1-cp38-cp38-win32.whl", hash = "sha256:878a8f4cb2413b28d745e4fc16d741021ad68dfabe03cb1f26a569eeafa3da3d"}, - {file = "bitarray-2.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5ed21d59bffd8ac192d01e935e05e3376ad85a6db0b3ae9ecd57cbe8d768a903"}, - {file = "bitarray-2.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ee347d039f10ef624845d087e66950e9d913a1f9b37e3d0c2d71dfdcd7822e16"}, - {file = "bitarray-2.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2364b6af6d5900732dbc56f4b623ccf0cd8534c393939620edd2689ead4c5365"}, - {file = "bitarray-2.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2d3331c2a37278f3f8c3669c1d99a6132d524490fb5c6415450af881d885510c"}, - {file = "bitarray-2.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:408f769ea8b28a523f86ac2ccebec2b3712e3084d020467bb7db865913fcba10"}, - {file = "bitarray-2.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ed8a77a7084bd6ff5da4a926ec6daa1968fbdf04a7fb970231d9bc219c11f8d"}, - {file = "bitarray-2.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b98b551d01a149a3756eeeb66769b5da5dd7fc6574dbf2ad1881efd2094b3a1"}, - {file = "bitarray-2.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72b86e634f13cd9014e3d17ea224834ef3a4bd8220e45239b11b7e0543545718"}, - {file = "bitarray-2.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02807aaf75b2a2c268f2959f40b9afd2f943dc615883616413f2d385cbf0454f"}, - {file = "bitarray-2.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b2ffcbe5cf97a118f36d5065043e7ecc16246e40545b31929d7582fce256064d"}, - {file = "bitarray-2.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:eb12494f5b8a9849f0c76c1e8b6e9287096ccb19b2a4b596f5fb1adcf709c8a2"}, - {file = "bitarray-2.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8673229b706638ca6b1ab7e2ccee6e20736ec0caa39b4e095749429bbb57675a"}, - {file = "bitarray-2.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e85ad843a7ebd526ab8dd3cf7bdf5f65013a42463a96946b7b30854a82f57d44"}, - {file = "bitarray-2.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5abe2f63f49431eff708086df50132cd8a19089f22ad9fc45e2e8922aa0b61fa"}, - {file = "bitarray-2.4.1-cp39-cp39-win32.whl", hash = "sha256:98fbb749fa4047fa2e1049aa0cde4f6020defd2b40ed8bf31dd1f2c1ef07e416"}, - {file = "bitarray-2.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:57f52f9f5fcd086961c6055337e22d4ea5ce442fd7b8a101e25cd4a6059069d5"}, - {file = "bitarray-2.4.1.tar.gz", hash = "sha256:faeca03f979e992cc76f7406af7eb9795cb111b8d8969c891a032bd7497c87da"}, -] -cached-property = [ - {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, - {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, + {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, + {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, ] +bitarray = [] +cached-property = [] colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, -] -cycler = [ - {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, - {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, -] -h5py = [ - {file = "h5py-3.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1cd367f89a5441236bdbb795e9fb9a9e3424929c00b4a54254ca760437f83d69"}, - {file = "h5py-3.1.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:fea05349f63625a8fb808e57e42bb4c76930cf5d50ac58b678c52f913a48a89b"}, - {file = "h5py-3.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2e37352ddfcf9d77a2a47f7c8f7e125c6d20cc06c2995edeb7be222d4e152636"}, - {file = "h5py-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e33f61d3eb862614c0f273a1f993a64dc2f093e1a3094932c50ada9d2db2170f"}, - {file = "h5py-3.1.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:236ac8d943be30b617ab615c3d4a4bf4a438add2be87e54af3687ab721a18fac"}, - {file = "h5py-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:02c391fdb980762a1cc03a4bcaecd03dc463994a9a63a02264830114a96e111f"}, - {file = "h5py-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f89a3dae38843ffa49d17a31a3509a8129e9b46ece602a0138e1ed79e685c361"}, - {file = "h5py-3.1.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ba71f6229d2013fbb606476ecc29c6223fc16b244d35fcd8566ad9dbaf910857"}, - {file = "h5py-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:dccb89358bc84abcd711363c3e138f9f4eccfdf866f2139a8e72308328765b2c"}, - {file = "h5py-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cb74df83709d6d03d11e60b9480812f58da34f194beafa8c8314dbbeeedfe0a6"}, - {file = "h5py-3.1.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:80c623be10479e81b64fa713b7ed4c0bbe9f02e8e7d2a2e5382336087b615ce4"}, - {file = "h5py-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:1cdfd1c5449ca1329d152f0b66830e93226ebce4f5e07dd8dc16bfc2b1a49d7b"}, - {file = "h5py-3.1.0.tar.gz", hash = "sha256:1e2516f190652beedcb8c7acfa1c6fa92d99b42331cbef5e5c7ec2d65b0fc3c2"}, -] -importlib-metadata = [ - {file = "importlib_metadata-4.8.3-py3-none-any.whl", hash = "sha256:65a9576a5b2d58ca44d133c42a241905cc45e34d2c06fd5ba2bafa221e5d7b5e"}, - {file = "importlib_metadata-4.8.3.tar.gz", hash = "sha256:766abffff765960fcc18003801f7044eb6755ffae4521c8e8ce8e83b9c9b0668"}, + {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, + {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, ] +cycler = [] +h5py = [] +importlib-metadata = [] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] -kiwisolver = [ - {file = "kiwisolver-1.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd34fbbfbc40628200730bc1febe30631347103fc8d3d4fa012c21ab9c11eca9"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:d3155d828dec1d43283bd24d3d3e0d9c7c350cdfcc0bd06c0ad1209c1bbc36d0"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5a7a7dbff17e66fac9142ae2ecafb719393aaee6a3768c9de2fd425c63b53e21"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f8d6f8db88049a699817fd9178782867bf22283e3813064302ac59f61d95be05"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:5f6ccd3dd0b9739edcf407514016108e2280769c73a85b9e59aa390046dbf08b"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-win32.whl", hash = "sha256:225e2e18f271e0ed8157d7f4518ffbf99b9450fca398d561eb5c4a87d0986dd9"}, - {file = "kiwisolver-1.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:cf8b574c7b9aa060c62116d4181f3a1a4e821b2ec5cbfe3775809474113748d4"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:232c9e11fd7ac3a470d65cd67e4359eee155ec57e822e5220322d7b2ac84fbf0"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:b38694dcdac990a743aa654037ff1188c7a9801ac3ccc548d3341014bc5ca278"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ca3820eb7f7faf7f0aa88de0e54681bddcb46e485beb844fcecbcd1c8bd01689"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:c8fd0f1ae9d92b42854b2979024d7597685ce4ada367172ed7c09edf2cef9cb8"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:1e1bc12fb773a7b2ffdeb8380609f4f8064777877b2225dec3da711b421fda31"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-win32.whl", hash = "sha256:72c99e39d005b793fb7d3d4e660aed6b6281b502e8c1eaf8ee8346023c8e03bc"}, - {file = "kiwisolver-1.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:8be8d84b7d4f2ba4ffff3665bcd0211318aa632395a1a41553250484a871d454"}, - {file = "kiwisolver-1.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:24cc411232d14c8abafbd0dddb83e1a4f54d77770b53db72edcfe1d611b3bf11"}, - {file = "kiwisolver-1.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:31dfd2ac56edc0ff9ac295193eeaea1c0c923c0355bf948fbd99ed6018010b72"}, - {file = "kiwisolver-1.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ef6eefcf3944e75508cdfa513c06cf80bafd7d179e14c1334ebdca9ebb8c2c66"}, - {file = "kiwisolver-1.3.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:563c649cfdef27d081c84e72a03b48ea9408c16657500c312575ae9d9f7bc1c3"}, - {file = "kiwisolver-1.3.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:78751b33595f7f9511952e7e60ce858c6d64db2e062afb325985ddbd34b5c131"}, - {file = "kiwisolver-1.3.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:a357fd4f15ee49b4a98b44ec23a34a95f1e00292a139d6015c11f55774ef10de"}, - {file = "kiwisolver-1.3.1-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:5989db3b3b34b76c09253deeaf7fbc2707616f130e166996606c284395da3f18"}, - {file = "kiwisolver-1.3.1-cp38-cp38-win32.whl", hash = "sha256:c08e95114951dc2090c4a630c2385bef681cacf12636fb0241accdc6b303fd81"}, - {file = "kiwisolver-1.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:44a62e24d9b01ba94ae7a4a6c3fb215dc4af1dde817e7498d901e229aaf50e4e"}, - {file = "kiwisolver-1.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6d9d8d9b31aa8c2d80a690693aebd8b5e2b7a45ab065bb78f1609995d2c79240"}, - {file = "kiwisolver-1.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:50af681a36b2a1dee1d3c169ade9fdc59207d3c31e522519181e12f1b3ba7000"}, - {file = "kiwisolver-1.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:792e69140828babe9649de583e1a03a0f2ff39918a71782c76b3c683a67c6dfd"}, - {file = "kiwisolver-1.3.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:a53d27d0c2a0ebd07e395e56a1fbdf75ffedc4a05943daf472af163413ce9598"}, - {file = "kiwisolver-1.3.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:834ee27348c4aefc20b479335fd422a2c69db55f7d9ab61721ac8cd83eb78882"}, - {file = "kiwisolver-1.3.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:5c3e6455341008a054cccee8c5d24481bcfe1acdbc9add30aa95798e95c65621"}, - {file = "kiwisolver-1.3.1-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:acef3d59d47dd85ecf909c359d0fd2c81ed33bdff70216d3956b463e12c38a54"}, - {file = "kiwisolver-1.3.1-cp39-cp39-win32.whl", hash = "sha256:c5518d51a0735b1e6cee1fdce66359f8d2b59c3ca85dc2b0813a8aa86818a030"}, - {file = "kiwisolver-1.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:b9edd0110a77fc321ab090aaa1cfcaba1d8499850a12848b81be2222eab648f6"}, - {file = "kiwisolver-1.3.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0cd53f403202159b44528498de18f9285b04482bab2a6fc3f5dd8dbb9352e30d"}, - {file = "kiwisolver-1.3.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:33449715e0101e4d34f64990352bce4095c8bf13bed1b390773fc0a7295967b3"}, - {file = "kiwisolver-1.3.1-pp36-pypy36_pp73-win32.whl", hash = "sha256:401a2e9afa8588589775fe34fc22d918ae839aaaf0c0e96441c0fdbce6d8ebe6"}, - {file = "kiwisolver-1.3.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d6563ccd46b645e966b400bb8a95d3457ca6cf3bba1e908f9e0927901dfebeb1"}, - {file = "kiwisolver-1.3.1.tar.gz", hash = "sha256:950a199911a8d94683a6b10321f9345d5a3a8433ec58b217ace979e18f16e248"}, -] -matplotlib = [ - {file = "matplotlib-3.3.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:672960dd114e342b7c610bf32fb99d14227f29919894388b41553217457ba7ef"}, - {file = "matplotlib-3.3.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:7c155437ae4fd366e2700e2716564d1787700687443de46bcb895fe0f84b761d"}, - {file = "matplotlib-3.3.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:a17f0a10604fac7627ec82820439e7db611722e80c408a726cd00d8c974c2fb3"}, - {file = "matplotlib-3.3.4-cp36-cp36m-win32.whl", hash = "sha256:215e2a30a2090221a9481db58b770ce56b8ef46f13224ae33afe221b14b24dc1"}, - {file = "matplotlib-3.3.4-cp36-cp36m-win_amd64.whl", hash = "sha256:348e6032f666ffd151b323342f9278b16b95d4a75dfacae84a11d2829a7816ae"}, - {file = "matplotlib-3.3.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:94bdd1d55c20e764d8aea9d471d2ae7a7b2c84445e0fa463f02e20f9730783e1"}, - {file = "matplotlib-3.3.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:a1acb72f095f1d58ecc2538ed1b8bca0b57df313b13db36ed34b8cdf1868e674"}, - {file = "matplotlib-3.3.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:46b1a60a04e6d884f0250d5cc8dc7bd21a9a96c584a7acdaab44698a44710bab"}, - {file = "matplotlib-3.3.4-cp37-cp37m-win32.whl", hash = "sha256:ed4a9e6dcacba56b17a0a9ac22ae2c72a35b7f0ef0693aa68574f0b2df607a89"}, - {file = "matplotlib-3.3.4-cp37-cp37m-win_amd64.whl", hash = "sha256:c24c05f645aef776e8b8931cb81e0f1632d229b42b6d216e30836e2e145a2b40"}, - {file = "matplotlib-3.3.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7310e353a4a35477c7f032409966920197d7df3e757c7624fd842f3eeb307d3d"}, - {file = "matplotlib-3.3.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:451cc89cb33d6652c509fc6b588dc51c41d7246afdcc29b8624e256b7663ed1f"}, - {file = "matplotlib-3.3.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:3d2eb9c1cc254d0ffa90bc96fde4b6005d09c2228f99dfd493a4219c1af99644"}, - {file = "matplotlib-3.3.4-cp38-cp38-win32.whl", hash = "sha256:e15fa23d844d54e7b3b7243afd53b7567ee71c721f592deb0727ee85e668f96a"}, - {file = "matplotlib-3.3.4-cp38-cp38-win_amd64.whl", hash = "sha256:1de0bb6cbfe460725f0e97b88daa8643bcf9571c18ba90bb8e41432aaeca91d6"}, - {file = "matplotlib-3.3.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f44149a0ef5b4991aaef12a93b8e8d66d6412e762745fea1faa61d98524e0ba9"}, - {file = "matplotlib-3.3.4-cp39-cp39-manylinux1_i686.whl", hash = "sha256:746a1df55749629e26af7f977ea426817ca9370ad1569436608dc48d1069b87c"}, - {file = "matplotlib-3.3.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:5f571b92a536206f7958f7cb2d367ff6c9a1fa8229dc35020006e4cdd1ca0acd"}, - {file = "matplotlib-3.3.4-cp39-cp39-win32.whl", hash = "sha256:9265ae0fb35e29f9b8cc86c2ab0a2e3dcddc4dd9de4b85bf26c0f63fe5c1c2ca"}, - {file = "matplotlib-3.3.4-cp39-cp39-win_amd64.whl", hash = "sha256:9a79e5dd7bb797aa611048f5b70588b23c5be05b63eefd8a0d152ac77c4243db"}, - {file = "matplotlib-3.3.4-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1e850163579a8936eede29fad41e202b25923a0a8d5ffd08ce50fc0a97dcdc93"}, - {file = "matplotlib-3.3.4-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:d738acfdfb65da34c91acbdb56abed46803db39af259b7f194dc96920360dbe4"}, - {file = "matplotlib-3.3.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:aa49571d8030ad0b9ac39708ee77bd2a22f87815e12bdee52ecaffece9313ed8"}, - {file = "matplotlib-3.3.4-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:cf3a7e54eff792f0815dbbe9b85df2f13d739289c93d346925554f71d484be78"}, - {file = "matplotlib-3.3.4.tar.gz", hash = "sha256:3e477db76c22929e4c6876c44f88d790aacdf3c3f8f3a90cb1975c0bf37825b0"}, -] -numpy = [ - {file = "numpy-1.19.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc6bd4fd593cb261332568485e20a0712883cf631f6f5e8e86a52caa8b2b50ff"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:aeb9ed923be74e659984e321f609b9ba54a48354bfd168d21a2b072ed1e833ea"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8b5e972b43c8fc27d56550b4120fe6257fdc15f9301914380b27f74856299fea"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:43d4c81d5ffdff6bae58d66a3cd7f54a7acd9a0e7b18d97abb255defc09e3140"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:a4646724fba402aa7504cd48b4b50e783296b5e10a524c7a6da62e4a8ac9698d"}, - {file = "numpy-1.19.5-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:2e55195bc1c6b705bfd8ad6f288b38b11b1af32f3c8289d6c50d47f950c12e76"}, - {file = "numpy-1.19.5-cp36-cp36m-win32.whl", hash = "sha256:39b70c19ec771805081578cc936bbe95336798b7edf4732ed102e7a43ec5c07a"}, - {file = "numpy-1.19.5-cp36-cp36m-win_amd64.whl", hash = "sha256:dbd18bcf4889b720ba13a27ec2f2aac1981bd41203b3a3b27ba7a33f88ae4827"}, - {file = "numpy-1.19.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:603aa0706be710eea8884af807b1b3bc9fb2e49b9f4da439e76000f3b3c6ff0f"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:cae865b1cae1ec2663d8ea56ef6ff185bad091a5e33ebbadd98de2cfa3fa668f"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:36674959eed6957e61f11c912f71e78857a8d0604171dfd9ce9ad5cbf41c511c"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:06fab248a088e439402141ea04f0fffb203723148f6ee791e9c75b3e9e82f080"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6149a185cece5ee78d1d196938b2a8f9d09f5a5ebfbba66969302a778d5ddd1d"}, - {file = "numpy-1.19.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:50a4a0ad0111cc1b71fa32dedd05fa239f7fb5a43a40663269bb5dc7877cfd28"}, - {file = "numpy-1.19.5-cp37-cp37m-win32.whl", hash = "sha256:d051ec1c64b85ecc69531e1137bb9751c6830772ee5c1c426dbcfe98ef5788d7"}, - {file = "numpy-1.19.5-cp37-cp37m-win_amd64.whl", hash = "sha256:a12ff4c8ddfee61f90a1633a4c4afd3f7bcb32b11c52026c92a12e1325922d0d"}, - {file = "numpy-1.19.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf2402002d3d9f91c8b01e66fbb436a4ed01c6498fffed0e4c7566da1d40ee1e"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1ded4fce9cfaaf24e7a0ab51b7a87be9038ea1ace7f34b841fe3b6894c721d1c"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:759e4095edc3c1b3ac031f34d9459fa781777a93ccc633a472a5468587a190ff"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a9d17f2be3b427fbb2bce61e596cf555d6f8a56c222bd2ca148baeeb5e5c783c"}, - {file = "numpy-1.19.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:99abf4f353c3d1a0c7a5f27699482c987cf663b1eac20db59b8c7b061eabd7fc"}, - {file = "numpy-1.19.5-cp38-cp38-win32.whl", hash = "sha256:384ec0463d1c2671170901994aeb6dce126de0a95ccc3976c43b0038a37329c2"}, - {file = "numpy-1.19.5-cp38-cp38-win_amd64.whl", hash = "sha256:811daee36a58dc79cf3d8bdd4a490e4277d0e4b7d103a001a4e73ddb48e7e6aa"}, - {file = "numpy-1.19.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c843b3f50d1ab7361ca4f0b3639bf691569493a56808a0b0c54a051d260b7dbd"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d6631f2e867676b13026e2846180e2c13c1e11289d67da08d71cacb2cd93d4aa"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7fb43004bce0ca31d8f13a6eb5e943fa73371381e53f7074ed21a4cb786c32f8"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2ea52bd92ab9f768cc64a4c3ef8f4b2580a17af0a5436f6126b08efbd1838371"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:400580cbd3cff6ffa6293df2278c75aef2d58d8d93d3c5614cd67981dae68ceb"}, - {file = "numpy-1.19.5-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:df609c82f18c5b9f6cb97271f03315ff0dbe481a2a02e56aeb1b1a985ce38e60"}, - {file = "numpy-1.19.5-cp39-cp39-win32.whl", hash = "sha256:ab83f24d5c52d60dbc8cd0528759532736b56db58adaa7b5f1f76ad551416a1e"}, - {file = "numpy-1.19.5-cp39-cp39-win_amd64.whl", hash = "sha256:0eef32ca3132a48e43f6a0f5a82cb508f22ce5a3d6f67a8329c81c8e226d3f6e"}, - {file = "numpy-1.19.5-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:a0d53e51a6cb6f0d9082decb7a4cb6dfb33055308c4c44f53103c073f649af73"}, - {file = "numpy-1.19.5.zip", hash = "sha256:a76f502430dd98d7546e1ea2250a7360c065a5fdea52b2dffe8ae7180909b6f4"}, -] +kiwisolver = [] +matplotlib = [] +numpy = [] packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] -pillow = [ - {file = "Pillow-8.4.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:81f8d5c81e483a9442d72d182e1fb6dcb9723f289a57e8030811bac9ea3fef8d"}, - {file = "Pillow-8.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3f97cfb1e5a392d75dd8b9fd274d205404729923840ca94ca45a0af57e13dbe6"}, - {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb9fc393f3c61f9054e1ed26e6fe912c7321af2f41ff49d3f83d05bacf22cc78"}, - {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d82cdb63100ef5eedb8391732375e6d05993b765f72cb34311fab92103314649"}, - {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc1afda735a8d109007164714e73771b499768b9bb5afcbbee9d0ff374b43f"}, - {file = "Pillow-8.4.0-cp310-cp310-win32.whl", hash = "sha256:e3dacecfbeec9a33e932f00c6cd7996e62f53ad46fbe677577394aaa90ee419a"}, - {file = "Pillow-8.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:620582db2a85b2df5f8a82ddeb52116560d7e5e6b055095f04ad828d1b0baa39"}, - {file = "Pillow-8.4.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:1bc723b434fbc4ab50bb68e11e93ce5fb69866ad621e3c2c9bdb0cd70e345f55"}, - {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72cbcfd54df6caf85cc35264c77ede902452d6df41166010262374155947460c"}, - {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70ad9e5c6cb9b8487280a02c0ad8a51581dcbbe8484ce058477692a27c151c0a"}, - {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25a49dc2e2f74e65efaa32b153527fc5ac98508d502fa46e74fa4fd678ed6645"}, - {file = "Pillow-8.4.0-cp36-cp36m-win32.whl", hash = "sha256:93ce9e955cc95959df98505e4608ad98281fff037350d8c2671c9aa86bcf10a9"}, - {file = "Pillow-8.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2e4440b8f00f504ee4b53fe30f4e381aae30b0568193be305256b1462216feff"}, - {file = "Pillow-8.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8c803ac3c28bbc53763e6825746f05cc407b20e4a69d0122e526a582e3b5e153"}, - {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8a17b5d948f4ceeceb66384727dde11b240736fddeda54ca740b9b8b1556b29"}, - {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1394a6ad5abc838c5cd8a92c5a07535648cdf6d09e8e2d6df916dfa9ea86ead8"}, - {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:792e5c12376594bfcb986ebf3855aa4b7c225754e9a9521298e460e92fb4a488"}, - {file = "Pillow-8.4.0-cp37-cp37m-win32.whl", hash = "sha256:d99ec152570e4196772e7a8e4ba5320d2d27bf22fdf11743dd882936ed64305b"}, - {file = "Pillow-8.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7b7017b61bbcdd7f6363aeceb881e23c46583739cb69a3ab39cb384f6ec82e5b"}, - {file = "Pillow-8.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:d89363f02658e253dbd171f7c3716a5d340a24ee82d38aab9183f7fdf0cdca49"}, - {file = "Pillow-8.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a0956fdc5defc34462bb1c765ee88d933239f9a94bc37d132004775241a7585"}, - {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b7bb9de00197fb4261825c15551adf7605cf14a80badf1761d61e59da347779"}, - {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72b9e656e340447f827885b8d7a15fc8c4e68d410dc2297ef6787eec0f0ea409"}, - {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5a4532a12314149d8b4e4ad8ff09dde7427731fcfa5917ff16d0291f13609df"}, - {file = "Pillow-8.4.0-cp38-cp38-win32.whl", hash = "sha256:82aafa8d5eb68c8463b6e9baeb4f19043bb31fefc03eb7b216b51e6a9981ae09"}, - {file = "Pillow-8.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:066f3999cb3b070a95c3652712cffa1a748cd02d60ad7b4e485c3748a04d9d76"}, - {file = "Pillow-8.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:5503c86916d27c2e101b7f71c2ae2cddba01a2cf55b8395b0255fd33fa4d1f1a"}, - {file = "Pillow-8.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4acc0985ddf39d1bc969a9220b51d94ed51695d455c228d8ac29fcdb25810e6e"}, - {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b052a619a8bfcf26bd8b3f48f45283f9e977890263e4571f2393ed8898d331b"}, - {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:493cb4e415f44cd601fcec11c99836f707bb714ab03f5ed46ac25713baf0ff20"}, - {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8831cb7332eda5dc89b21a7bce7ef6ad305548820595033a4b03cf3091235ed"}, - {file = "Pillow-8.4.0-cp39-cp39-win32.whl", hash = "sha256:5e9ac5f66616b87d4da618a20ab0a38324dbe88d8a39b55be8964eb520021e02"}, - {file = "Pillow-8.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:3eb1ce5f65908556c2d8685a8f0a6e989d887ec4057326f6c22b24e8a172c66b"}, - {file = "Pillow-8.4.0-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ddc4d832a0f0b4c52fff973a0d44b6c99839a9d016fe4e6a1cb8f3eea96479c2"}, - {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3e5ddc44c14042f0844b8cf7d2cd455f6cc80fd7f5eefbe657292cf601d9ad"}, - {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c70e94281588ef053ae8998039610dbd71bc509e4acbc77ab59d7d2937b10698"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:3862b7256046fcd950618ed22d1d60b842e3a40a48236a5498746f21189afbbc"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4901622493f88b1a29bd30ec1a2f683782e57c3c16a2dbc7f2595ba01f639df"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c471a734240653a0ec91dec0996696eea227eafe72a33bd06c92697728046b"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:244cf3b97802c34c41905d22810846802a3329ddcb93ccc432870243211c79fc"}, - {file = "Pillow-8.4.0.tar.gz", hash = "sha256:b8e2f83c56e141920c39464b852de3719dfbfb6e3c99a2d8da0edf4fb33176ed"}, -] +pillow = [] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, @@ -544,40 +306,10 @@ py = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] -pyparsing = [ - {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, - {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"}, -] -pysam = [ - {file = "pysam-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:44de1a3af7c7eb5f404d6337f0c9c4ee88c34c2d2fee1a7896ccd8e7d2aa475a"}, - {file = "pysam-0.19.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0ceb07c6253598ec70fef6ac0c0f7ab0d299562c1a91e737adb07239afba22d6"}, - {file = "pysam-0.19.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2057f3b8cc20562fd010e7971e83ab78978f17975563a711c94bca583ce8a2d3"}, - {file = "pysam-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a1a9ee6cd6dfa50973dcb51cd2245ea7d4d64d4e962d60e5e1a088f7b790e3e"}, - {file = "pysam-0.19.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b831170ff810bfd1242dbce4ddf8e693e95e39a4332d5903d416233d3d1be50a"}, - {file = "pysam-0.19.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fa4a5d334986d0696522246820f295cbf6c18dc1b78798f800a2d57d56207789"}, - {file = "pysam-0.19.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ab58d7d9b140e2e8a4918fc00661aa901ba461d9bccd4b499102b0828f2d897e"}, - {file = "pysam-0.19.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1d964c29fedf55d2a5d095227d19d915c2e0e5e42b1e0bdf7fab30cd1d2a850"}, - {file = "pysam-0.19.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8c78f9b84f7fe69530eaccf5b7f08636b3419f0017b5050aa7013f1c59d3d654"}, - {file = "pysam-0.19.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ada92b376717ac4c9c9924a096af9186035115d29a113eaa997d1c020ce421b9"}, - {file = "pysam-0.19.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:80b8f5b929c7f660b6e1497790a13c61f386b310a31ca54ad6ba110674d11c55"}, - {file = "pysam-0.19.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30017bed8d002d41f83fa7e10569525c811a8e3860d73a880ee653ef29fd4fbc"}, - {file = "pysam-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5e2e465522ba2c34cb96c013a28f9c9db303f8ab1350b4c11cca73677f1e9594"}, - {file = "pysam-0.19.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2103b4b6d9b0cc0b4aaccf64e87a92bfdabb7dc92810cf84be35ffe78fafa002"}, - {file = "pysam-0.19.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eaf342b9c71ed83a63237df2000e3bc1f0236165d48fd7240c4c78b66f28d63b"}, - {file = "pysam-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc0021b154206edfbaa13515cb67523c76c576b7a670e72a793f2da4f03139f4"}, - {file = "pysam-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3101e0fcd2f6accbfa72a554a71baf83f1c096bb0f9045059b3ead35901ce128"}, - {file = "pysam-0.19.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5118dcabac574638df43739941f0ee20cc4e9197aee4a8f10f195542a13f18e3"}, - {file = "pysam-0.19.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4fe1f1fae0e559d3412625dc7d4d08b477e80211b3fe5b267ba341a84f78b8be"}, - {file = "pysam-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2911e3760dd2b709c686f075146787b8bda35629093352c28a7e52ac00ddaffc"}, - {file = "pysam-0.19.0.tar.gz", hash = "sha256:dcc052566f9509fd93b2a2664f094a13f016fd60cdd189e05fb4eafa0c89505b"}, -] -pytabix = [ - {file = "pytabix-0.1.tar.gz", hash = "sha256:0774f1687ebd41811fb07a0e50951b6be72d7cc7e22ed2b18972eaf7482eb7d1"}, -] -pytest = [ - {file = "pytest-7.0.1-py3-none-any.whl", hash = "sha256:9ce3ff477af913ecf6321fe337b93a2c0dcf2a0a1439c43f5452112c1e4280db"}, - {file = "pytest-7.0.1.tar.gz", hash = "sha256:e30905a0c131d3d94b89624a1cc5afec3e0ba2fbdb151867d8e0ebd49850f171"}, -] +pyparsing = [] +pysam = [] +pytabix = [] +pytest = [] python-dateutil = [ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, @@ -586,15 +318,6 @@ six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] -tomli = [ - {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, - {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, -] -typing-extensions = [ - {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"}, - {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"}, -] -zipp = [ - {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, - {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, -] +tomli = [] +typing-extensions = [] +zipp = [] diff --git a/pyproject.toml b/pyproject.toml index b6b61b2..51943af 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "granite-suite" -version = "0.2.0" +version = "0.2.1" description = "granite is a collection of software to call, filter and work with genomic variants." authors = ["Michele Berselli ", "Phil Grayson"] readme = "README.md" diff --git a/tests/test_SVqcVCF.py b/tests/test_SVqcVCF.py index 94885c5..2daeeae 100644 --- a/tests/test_SVqcVCF.py +++ b/tests/test_SVqcVCF.py @@ -17,14 +17,14 @@ def test_fail_SVqcVCF_no_SVTYPE(): #Variables args = {'inputfile': 'tests/files/SVqcVCF_no_SVTYPE.vcf.gz','outputfile':'tests/files/main_test.out','samples':["TESTSAMPLE", "TESTSAMPLE2"], 'verbose': None} # Run and Tests - with pytest.raises(Exception, match = "ERROR in parsing vcf, variant at position 1:46000 does not contain SVTYPE in INFO"): + with pytest.raises(ValueError, match = "ERROR in parsing vcf, variant at position 1:46000 does not contain SVTYPE in INFO"): main_SVqcVCF(args) def test_fail_SVqcVCF_wrong_SVTYPE(): #Variables args = {'inputfile': 'tests/files/SVqcVCF_wrong_SVTYPE.vcf.gz','outputfile':'tests/files/main_test.out','samples':["TESTSAMPLE", "TESTSAMPLE2"], 'verbose': None} # Run and Tests - with pytest.raises(Exception, match = "ERROR in parsing vcf, variant at position 1:46000 contains unexpected SVTYPE \"SNV\" in INFO"): + with pytest.raises(ValueError, match = "ERROR in parsing vcf, variant at position 1:46000 contains unexpected SVTYPE \"SNV\" in INFO"): main_SVqcVCF(args) def test_success_SVqcVCF_twoSamples(): diff --git a/tests/test_novoCaller.py b/tests/test_novoCaller.py index be06b80..75c0083 100644 --- a/tests/test_novoCaller.py +++ b/tests/test_novoCaller.py @@ -41,7 +41,7 @@ def assert_(tfile, ofile, test=False): try: af_t = float(vnt_obj_t.get_tag_value('novoAF')) af_o = float(vnt_obj_o.get_tag_value('novoAF')) - except ValueError: + except vcf_parser.MissingTag: af_t = float(vnt_obj_t.get_tag_value('AlleleFreq')) af_o = float(vnt_obj_o.get_tag_value('AlleleFreq')) assert abs(af_t - af_o) < 0.0000000001 @@ -53,7 +53,7 @@ def assert_(tfile, ofile, test=False): pp_o = float(vnt_obj_o.get_tag_value('novoPP')) if pp_t > 0.1: assert abs(pp_t - pp_o) < 0.0000000001 else: assert abs(pp_t - pp_o) < 0.0001 - except ValueError as e: + except vcf_parser.MissingTag as e: assert str(e) == '\nERROR in variant INFO field, novoPP tag is missing\n' # genotypes for id in vnt_obj_t.IDs_genotypes: @@ -65,8 +65,8 @@ def assert_(tfile, ofile, test=False): assert GT_t == GT_o assert ref_t == ref_o assert alt_t == alt_o - except ValueError as e: - assert str(e) == '\nERROR in GENOTYPES identifiers, PSC-01-003 identifier is missing in VCF\n' + except vcf_parser.MissingTag as e: + assert str(e) == '\nERROR in variant GENOTYPE field, RSTR tag is missing for PSC-01-003 identifier\n' ################################################################# # Tests @@ -470,7 +470,7 @@ def test_run_novoCaller_bam_rerun_noUNR_NORSTR(): 'ppthr': None, 'afthr': '0.01', 'aftag': 'novoAF', 'bam': True, 'MQthr': None, 'BQthr': None, 'afthr_unrelated': 0.01, 'ADthr': 3, 'verbose': None} # Run and Tests - with pytest.raises(ValueError) as e: + with pytest.raises(vcf_parser.MissingTag) as e: assert main_novoCaller(args) assert '\nERROR in variant FORMAT field, RSTR tag is missing\n' == str(e.value) # Clean diff --git a/tests/test_toBig.py b/tests/test_toBig.py index 9b64098..b13fa3e 100644 --- a/tests/test_toBig.py +++ b/tests/test_toBig.py @@ -378,7 +378,7 @@ def test_run_toBig_rdthr_2_all_miss_pos(): 'regionfile': 'tests/files/input_toBig.regions', 'chromfile': 'tests/files/input_toBig.chrom.size'} # Run and Tests - with pytest.raises(Exception) as e: + with pytest.raises(IndexError) as e: assert main_toBig(args) assert str(e.value) == '\nERROR in file: position 13:11006 in file tests/files/input_toBig_miss_pos.rck.gz is not consistent with other files\n' #end def From a7e4dc590d770815d254b3ecdc50e15fd1ed6827 Mon Sep 17 00:00:00 2001 From: Michele Berselli Date: Wed, 4 Jan 2023 12:13:39 -0500 Subject: [PATCH 2/2] added BEDfile option to blacklist to filter out variants in BED file regions --- docs/filters.md | 1 + granite/blackList.py | 20 ++++++++++- granite/granite.py | 1 + tests/files/input_BED_blacklist.bed | 5 +++ tests/files/input_blackList_BED.out | 55 +++++++++++++++++++++++++++++ tests/test_blackList.py | 31 +++++++++++----- 6 files changed, 103 insertions(+), 10 deletions(-) create mode 100644 tests/files/input_BED_blacklist.bed create mode 100644 tests/files/input_blackList_BED.out diff --git a/docs/filters.md b/docs/filters.md index 8b82ed0..430a32f 100644 --- a/docs/filters.md +++ b/docs/filters.md @@ -103,6 +103,7 @@ blackList allows to filter-out variants from input VCF file based on positions s population allele frequency --afthr AFTHR threshold to filter by population allele frequency (<=) [1] + --BEDfile BEDFILE BED format file with positions to blacklist ``` #### Examples diff --git a/granite/blackList.py b/granite/blackList.py index d8217ba..08207e7 100644 --- a/granite/blackList.py +++ b/granite/blackList.py @@ -35,8 +35,10 @@ def main(args): # Variables afthr, aftag = 0., '' big_dict = {} + BED_bitarrays = {} is_afthr = True if args['afthr'] else False is_bigfile = True if args['bigfile'] else False + is_BEDfile = True if args['BEDfile'] else False is_verbose = True if args['verbose'] else False # Creating Vcf object @@ -50,9 +52,11 @@ def main(args): else: sys.exit('\nERROR in parsing arguments: to filter by population allele frequency please specify the TAG to use\n') #end if + elif is_BEDfile: + pass else: if not is_bigfile: - sys.exit('\nERROR in parsing arguments: to blacklist specify a BIG file and/or a threshold for population allele frequency and the TAG to use\n') + sys.exit('\nERROR in parsing arguments: to blacklist specify at least a BIG file, a BED file, and/or a threshold for population allele frequency and the TAG to use\n') #end if #end if @@ -63,6 +67,11 @@ def main(args): if is_bigfile: big_dict = load_big(args['bigfile']) #end if + # BED + if is_BEDfile: + BED_bitarrays = bed_to_bitarray(args['BEDfile']) + #end if + # Writing header vcf_obj.write_header(fo) @@ -102,6 +111,15 @@ def main(args): #end if #end if + if is_BEDfile: + try: # CHROM and POS can miss in the BED file, if that just pass + if BED_bitarrays[vnt_obj.CHROM][vnt_obj.POS]: + continue + #end if + except Exception: pass + #end try + #end if + # All good, pass and write variant vcf_obj.write_variant(fo, vnt_obj) #end for diff --git a/granite/granite.py b/granite/granite.py index 4d24c3d..6c6dbee 100644 --- a/granite/granite.py +++ b/granite/granite.py @@ -103,6 +103,7 @@ def main(): blackList_parser.add_argument('-b', '--bigfile', help='BIG format file with positions set for blacklist', type=str, required=False) blackList_parser.add_argument('--aftag', help='TAG (TAG=) or TAG field to be used to filter by population allele frequency', type=str, required=False) blackList_parser.add_argument('--afthr', help='threshold to filter by population allele frequency (<=) [1]', type=float, required=False) + blackList_parser.add_argument('--BEDfile', help='BED format file with positions to blacklist', type=str, required=False) blackList_parser.add_argument('--verbose', help='show progress status in terminal', action='store_true', required=False) # Add whiteList to subparsers diff --git a/tests/files/input_BED_blacklist.bed b/tests/files/input_BED_blacklist.bed new file mode 100644 index 0000000..6ea2e13 --- /dev/null +++ b/tests/files/input_BED_blacklist.bed @@ -0,0 +1,5 @@ +track name=pairedReads description="Clone Paired Reads" useScore=1 +1 24152100 24152321 +1 35849464 35849466 +1 20951585 20953585 +3 258099 259199 diff --git a/tests/files/input_blackList_BED.out b/tests/files/input_blackList_BED.out new file mode 100644 index 0000000..0b96528 --- /dev/null +++ b/tests/files/input_blackList_BED.out @@ -0,0 +1,55 @@ +##fileformat=VCFv4.2 +##ALT= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##GATKCommandLine= +##GATKCommandLine= +##GATKCommandLine= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##source=CombineGVCFs +##source=GenotypeGVCFs +##source=HaplotypeCaller +##MUTANNO= +##MUTANNO= +##INFO= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HG002 HG003 HG004 PSC-01-003 PSC-01-011 PSC-01-017 +1 14699 . C G 5732.43 VQSRTrancheSNP99.90to100.00 AC=35;AF=0.350;AN=100;BaseQRankSum=3.04;DP=2321;ExcessHet=46.3686;FS=43.430;InbreedingCoeff=-0.5579;MLEAC=36;MLEAF=0.360;MQ=36.30;MQRankSum=-1.515e+00;QD=3.75;ReadPosRankSum=0.097;SOR=3.624;novoAF=3.41347e-01 GT:AD:DP:GQ:PL 0/1:26,12:38:99:259,0,809 0/0:43,4:47:21:0,21,1381 0/0:26,2:28:43:0,43,902 0/1:97,11:108:16:16,0,2531 0/1:28,4:32:18:18,0,729 0/1:28,15:43:99:338,0,716 +1 66434150 . T C 1279.64 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=2.51;DP=1812;ExcessHet=3.0103;FS=3.005;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=70.00;MQRankSum=0.00;QD=16.20;ReadPosRankSum=-7.950e-01;SOR=1.009;novoAF=0.0 GT:AD:DP:GQ:PL 0/1:41,38:79:99:1297,0,1309 0/0:63,0:63:99:0,120,1800 0/0:78,0:78:99:0,120,1800 0/0:41,0:41:99:0,106,1456 0/0:34,0:34:90:0,90,1114 0/0:29,0:29:76:0,76,897 +1 168455916 . C T 927.64 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=0.219;DP=1871;ExcessHet=3.0103;FS=0.000;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=70.00;MQRankSum=0.00;QD=12.71;ReadPosRankSum=0.738;SOR=0.788;novoAF=0.0 GT:AD:DP:GQ:PL 0/1:45,28:73:99:945,0,1606 0/0:63,0:63:99:0,120,1800 0/0:66,0:66:99:0,120,1800 0/0:35,0:35:99:0,99,1485 0/0:34,0:34:99:0,99,1485 0/0:42,0:42:99:0,108,1294 +2 27100779 . T C 1582.64 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-6.330e-01;DP=1871;ExcessHet=3.0103;FS=17.093;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=70.00;MQRankSum=0.00;QD=17.58;ReadPosRankSum=1.56;SOR=1.383;novoAF=3.18451e-05 GT:AD:DP:GQ:PL 0/1:43,47:90:99:1600,0,1448 0/0:50,0:50:99:0,120,1800 0/0:67,0:67:99:0,120,1800 0/0:36,0:36:99:0,99,1238 0/0:38,0:38:99:0,111,1665 0/0:37,0:37:99:0,99,1235 +1 26860231 . A T 1082.64 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=1.09;DP=1588;ExcessHet=3.0103;FS=0.985;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=70.00;MQRankSum=0.00;QD=18.35;ReadPosRankSum=-1.378e+00;SOR=0.853;novoAF=0.324 GT:AD:DP:GQ:PL 0/1:27,32:59:99:1100,0,844 0/0:49,0:49:99:0,120,1800 0/0:49,0:49:99:0,120,1800 0/0:34,0:34:90:0,90,1350 0/0:33,0:33:99:0,99,1080 0/0:37,0:37:99:0,105,1575 +1 23535069 . G GA 606.70 VQSRTrancheINDEL99.00to99.90 AC=1;AF=0.010;AN=100;BaseQRankSum=-1.318e+00;DP=1775;ExcessHet=3.8753;FS=14.866;InbreedingCoeff=-0.0466;MLEAC=1;MLEAF=0.010;MQ=68.30;MQRankSum=0.00;QD=9.95;ReadPosRankSum=1.29;SOR=0.723;novoAF=3.46380e-04 GT:AD:DP:GQ:PL 0/1:33,28:61:99:608,0,735 0/0:42,0:42:99:0,104,1458 0/0:66,0:66:99:0,120,1800 0/0:49,0:49:39:0,39,1214 0/0:36,0:36:87:0,87,1082 0/0:36,0:36:99:0,99,1091 +1 15752321 . TCTGA T 857.64 VQSRTrancheINDEL99.00to99.90 AC=1;AF=0.010;AN=100;BaseQRankSum=-2.065e+00;DP=1550;ExcessHet=3.0103;FS=13.462;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=70.00;MQRankSum=0.00;QD=17.87;ReadPosRankSum=1.64;SOR=1.981;novoAF=9.56206e-05 GT:AD:DP:GQ:PL 0/1:25,23:48:99:875,0,1423 0/0:36,0:36:99:0,99,1384 0/0:50,0:50:99:0,120,1800 0/0:34,0:34:99:0,99,1141 0/0:29,0:29:75:0,75,1125 0/0:29,0:29:76:0,76,896 +1 6268385 . A AT 493.68 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.840e-01;DP=1501;ExcessHet=3.0103;FS=2.415;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=70.00;MQRankSum=0.00;QD=10.29;ReadPosRankSum=-7.640e-01;SOR=0.416;novoAF=3.02251e-03 GT:AD:DP:GQ:PL 0/1:23,25:48:99:511,0,460 0/0:36,0:36:99:0,102,1530 0/0:44,0:44:99:0,105,1686 0/0:27,0:27:75:0,75,1125 0/0:28,0:28:73:0,73,868 0/0:29,0:29:72:0,72,1080 +1 16942782 . G GTATA,GTATATATA,GTATATATATATA,GTATATATATA,GTATATA,GTGTATATATATATATATA 7607.93 PASS AC=3,6,8,9,4,1;AF=0.030,0.060,0.080,0.090,0.040,0.010;AN=100;BaseQRankSum=-1.003e+00;DP=4977;ExcessHet=34.0376;FS=0.648;InbreedingCoeff=-0.4215;MLEAC=3,6,8,9,3,1;MLEAF=0.030,0.060,0.080,0.090,0.030,0.010;MQ=61.24;MQRankSum=0.00;QD=3.18;ReadPosRankSum=0.539;SOR=0.777;novoAF=0.312 GT:AD:DP:GQ:PL 0/1:120,32,0,0,0,0,18:170:99:784,0,7504,1311,7582,8924,1311,7582,8924,8924,1311,7582,8924,8924,8924,1311,7582,8924,8924,8924,8924,512,6153,7505,7505,7505,7505,7646 0/6:157,32,0,0,0,0,26:217:99:1402,452,7812,1794,7966,9586,1794,7966,9586,9586,1794,7966,9586,9586,9586,1794,7966,9586,9586,9586,9586,0,6185,7806,7806,7806,7806,7669 0/0:212,0,0,0,0,0,0:212:99:0,120,1800,120,1800,1800,120,1800,1800,1800,120,1800,1800,1800,1800,120,1800,1800,1800,1800,1800,120,1800,1800,1800,1800,1800,1800 0/2:69,0,8,0,0,0,0:116:65:65,325,3395,0,3070,3117,325,3395,3070,3395,325,3395,3070,3395,3395,325,3395,3070,3395,3395,3395,325,3395,3070,3395,3395,3395,3395 0/2:43,0,12,7,4,0,0:66:99:525,440,2702,0,2199,2155,128,2401,1895,2408,163,2389,1996,2192,2319,440,2702,2199,2401,2389,2702,440,2702,2199,2401,2389,2702,2702 0/0:39,0,0,0,0,0,0:48:99:0,126,2352,126,2352,2352,126,2352,2352,2352,126,2352,2352,2352,2352,126,2352,2352,2352,2352,2352,126,2352,2352,2352,2352,2352,2352 +1 6268385 . A AT 493.68 PASS AC=1;AF=0.010;AN=100;BaseQRankSum=-3.840e-01;DP=1501;ExcessHet=3.0103;FS=2.415;InbreedingCoeff=-0.0102;MLEAC=1;MLEAF=0.010;MQ=70.00;MQRankSum=0.00;QD=10.29;ReadPosRankSum=-7.640e-01;SOR=0.416;novoAF=3.02251e-03 GT:AD:DP:GQ:PL 0/1:23,25:48:99:511,0,460 0/0:36,0:36:99:0,102,1530 0/0:44,0:44:99:0,105,1686 0/0:27,0:27:75:0,75,1125 0/0:28,0:28:73:0,73,868 0/0:29,0:29:72:0,72,1080 +1 15752321 . TCTGA T 857.64 VQSRTrancheINDEL99.00to99.90 AC=1;AF=0.010;AN=100;BaseQRankSum=-2.065e+00;DP=1550;ExcessHet=3.0103;FS=13.462;InbreedingCoeff=-0.0101;MLEAC=1;MLEAF=0.010;MQ=70.00;MQRankSum=0.00;QD=17.87;ReadPosRankSum=1.64;SOR=1.981;novoAF=9.56206e-05 GT:AD:DP:GQ:PL 0/1:25,23:48:99:875,0,1423 0/0:36,0:36:99:0,99,1384 0/0:50,0:50:99:0,120,1800 0/0:34,0:34:99:0,99,1141 0/0:29,0:29:75:0,75,1125 0/0:29,0:29:76:0,76,896 +2 1432699 . C G 5732.43 VQSRTrancheSNP99.90to100.00 AC=35;AF=0.350;AN=100;BaseQRankSum=3.04;DP=2321;ExcessHet=46.3686;FS=43.430;InbreedingCoeff=-0.5579;MLEAC=36;MLEAF=0.360;MQ=36.30;MQRankSum=-1.515e+00;QD=3.75;ReadPosRankSum=0.097;SOR=3.624;novoAF=3.41347e-01 GT:AD:DP:GQ:PL 0/1:26,12:38:99:259,0,809 0/0:43,4:47:21:0,21,1381 0/0:26,2:28:43:0,43,902 0/1:97,11:108:16:16,0,2531 0/1:28,4:32:18:18,0,729 0/1:28,15:43:99:338,0,716 diff --git a/tests/test_blackList.py b/tests/test_blackList.py index a411ba3..1f97763 100644 --- a/tests/test_blackList.py +++ b/tests/test_blackList.py @@ -15,7 +15,7 @@ def test_run_blackList_big(): ''' ''' # Variables args = {'inputfile': 'tests/files/input_blackList.vcf', 'outputfile': 'tests/files/main_test.out', - 'aftag': None, 'afthr': None, 'bigfile': 'tests/files/input_blackList.big', 'verbose': None} + 'aftag': None, 'afthr': None, 'bigfile': 'tests/files/input_blackList.big', 'BEDfile': None, 'verbose': None} # Run main_blackList(args) # Tests @@ -28,7 +28,7 @@ def test_run_blackList_032_big(): ''' ''' # Variables args = {'inputfile': 'tests/files/input_blackList.vcf', 'outputfile': 'tests/files/main_test.out', - 'aftag': 'novoAF', 'afthr': '0.32', 'bigfile': 'tests/files/input_blackList.big', 'verbose': None} + 'aftag': 'novoAF', 'afthr': '0.32', 'bigfile': 'tests/files/input_blackList.big', 'BEDfile': None, 'verbose': None} # Run main_blackList(args) # Tests @@ -41,7 +41,7 @@ def test_run_blackList_032(): ''' ''' # Variables args = {'inputfile': 'tests/files/input_blackList.vcf', 'outputfile': 'tests/files/main_test.out', - 'aftag': 'novoAF', 'afthr': '0.32', 'bigfile': None, 'verbose': None} + 'aftag': 'novoAF', 'afthr': '0.32', 'bigfile': None, 'BEDfile': None, 'verbose': None} # Run main_blackList(args) # Tests @@ -54,7 +54,7 @@ def test_run_blackList_01(): ''' ''' # Variables args = {'inputfile': 'tests/files/input_blackList.vcf', 'outputfile': 'tests/files/main_test.out', - 'aftag': 'novoAF', 'afthr': '0.1', 'bigfile': None, 'verbose': None} + 'aftag': 'novoAF', 'afthr': '0.1', 'bigfile': None, 'BEDfile': None, 'verbose': None} # Run main_blackList(args) # Tests @@ -67,7 +67,7 @@ def test_run_blackList_001(): ''' ''' # Variables args = {'inputfile': 'tests/files/input_blackList.vcf', 'outputfile': 'tests/files/main_test.out', - 'aftag': 'novoAF', 'afthr': '0.01', 'bigfile': None, 'verbose': None} + 'aftag': 'novoAF', 'afthr': '0.01', 'bigfile': None, 'BEDfile': None, 'verbose': None} # Run main_blackList(args) # Tests @@ -76,6 +76,19 @@ def test_run_blackList_001(): os.remove('tests/files/main_test.out') #end def +def test_run_blackList_BED(): + ''' ''' + # Variables + args = {'inputfile': 'tests/files/input_blackList.vcf', 'outputfile': 'tests/files/main_test.out', + 'aftag': None, 'afthr': None, 'bigfile': None, 'BEDfile': 'tests/files/input_BED_blacklist.bed', 'verbose': None} + # Run + main_blackList(args) + # Tests + assert [row for row in open('tests/files/main_test.out')] == [row for row in open('tests/files/input_blackList_BED.out')] + # Clean + os.remove('tests/files/main_test.out') +#end def + ################################################################# # Errors @@ -84,18 +97,18 @@ def test_args_afthr_bigfile_missing(): ''' ''' # Variables args = {'inputfile': 'tests/files/input_blackList.vcf', 'outputfile': 'tests/files/main_test.out', - 'aftag': None, 'afthr': None, 'bigfile': None, 'verbose': None} + 'aftag': None, 'afthr': None, 'bigfile': None, 'BEDfile': None, 'verbose': None} # Run and Tests with pytest.raises(SystemExit) as e: assert main_blackList(args) - assert str(e.value) == '\nERROR in parsing arguments: to blacklist specify a BIG file and/or a threshold for population allele frequency and the TAG to use\n' + assert str(e.value) == '\nERROR in parsing arguments: to blacklist specify at least a BIG file, a BED file, and/or a threshold for population allele frequency and the TAG to use\n' #end def def test_args_afthr_conflict(): ''' ''' # Variables args = {'inputfile': 'tests/files/input_blackList.vcf', 'outputfile': 'tests/files/main_test.out', - 'aftag': None, 'afthr': '0.2', 'bigfile': None, 'verbose': None} + 'aftag': None, 'afthr': '0.2', 'bigfile': None, 'BEDfile': None, 'verbose': None} # Run and Tests with pytest.raises(SystemExit) as e: assert main_blackList(args) @@ -106,7 +119,7 @@ def test_args_afthr_conflict(): # ''' ''' # # Variables # args = {'inputfile': 'tests/files/input_blackList_novoAF_missing.vcf', 'outputfile': 'tests/files/main_test.out', -# 'aftag': 'novoAF', 'afthr': '0.2', 'bigfile': None} +# 'aftag': 'novoAF', 'afthr': '0.2', 'bigfile': None, 'BEDfile': None,} # # Run and Tests # with pytest.raises(SystemExit) as e: # assert main_blackList(args)