From e9a70b9b06de2ac986aa6b28e972f396d073282a Mon Sep 17 00:00:00 2001 From: WardDeb Date: Mon, 22 Jun 2026 20:59:18 +0200 Subject: [PATCH 01/10] version overhaul rust dependencies, init pixi --- .gitignore | 5 +- Cargo.toml | 14 +- pixi.lock | 4074 ++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 19 +- src/alignmentsieve.rs | 151 +- src/bamcompare.rs | 295 ++- src/bamcoverage.rs | 155 +- src/computematrix.rs | 139 +- src/lib.rs | 4 +- src/multibamsummary.rs | 152 +- 10 files changed, 4663 insertions(+), 345 deletions(-) create mode 100644 pixi.lock diff --git a/.gitignore b/.gitignore index f6d59b9041..461ed4db1b 100755 --- a/.gitignore +++ b/.gitignore @@ -69,4 +69,7 @@ target* # jupyter notebooks .ipynb_checkpoints *.ipynb_checkpoints -*.ipynb \ No newline at end of file +*.ipynb + +# pixi +.pixi* diff --git a/Cargo.toml b/Cargo.toml index 3ceb5991e6..80c33a3d36 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,13 +10,13 @@ crate-type = ["cdylib"] [dependencies] openssl-sys = { version = "*", features = ["vendored"] } -pyo3 = { version = "0.23.4", features = ["extension-module"] } -rust-htslib = "0.49.0" -rayon = "1.10.0" -itertools = "0.14.0" -bigtools = "0.5.3" +pyo3 = { version = "*", features = ["extension-module"] } +rust-htslib = "*" +rayon = "*" +itertools = "*" +bigtools = "*" tokio = "*" flate2 = "*" tempfile = "*" -ndarray = "0.16.1" -ndarray-npy = "*" \ No newline at end of file +ndarray = "*" +ndarray-npy = "*" diff --git a/pixi.lock b/pixi.lock new file mode 100644 index 0000000000..4147b0b826 --- /dev/null +++ b/pixi.lock @@ -0,0 +1,4074 @@ +version: 7 +platforms: +- name: linux-64 +- name: osx-64 +- name: osx-arm64 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + - url: https://conda.anaconda.org/bioconda/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.19-h81da01d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-bootstrap_h59bd682_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-18-18.1.7-default_h9bb3924_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-18.1.7-default_h90ac42e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-18-18.1.7-default_h9bb3924_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-18.1.7-default_h9bb3924_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-tools-18.1.7-default_h9bb3924_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clangdev-18.1.7-default_h9bb3924_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clangxx-18.1.7-default_h127d8a8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-bootstrap_ha15bf96_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-18.1.7-default_h9bb3924_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp-18.1.7-default_h9bb3924_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp18.1-18.1.7-default_h9bb3924_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-18.1.7-default_h087397f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.8.0-hca28451_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm18-18.1.7-hb77312f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-devel-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.0-hde9e2c9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.7-hc051c1a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-h4ab18f5_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-tools-18.1.7-hb77312f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvmdev-18.1.7-hb77312f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.3-hab00c5b_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.8.3-ha02ee65_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-gpl-tools-5.8.3-ha02ee65_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-tools-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-h4ab18f5_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_119.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_119.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - pypi: . + - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/bd/9c0d5d6983905ce2c9edaa073a7e89355a9cf7f396988e05d32f1c37785d/maturin-1.14.1-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/0f/e7f1ff3a1cabc6c4486a7ee1b0506aedf2f5f8329760ac1f4e8032feef2b/pysam-0.24.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6b/67/6ea73b2173bcb1abe3a947fbd090cf96ee1b0a75f3f690e8902dc8ffdbfa/py2bit-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6c/c2/63fdda36c56437eeb44aaf9493c8bcd62ce230ab1598924fc626ffbfa943/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/c7/2342da9830e3e9d4870305ca5d2091d2a83284f2953079b7bdd3b5e029d8/fonttools-4.63.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7a/f6/51d8a97116de23c9280c1fa3b813bc088f8571ce5936ba84af1ecf13ed45/pybigwig-0.3.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/95/7f522393c88313336b20d70fc849555757b2e5febc22b83b3a3f0fd4bce9/matplotlib-3.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ac/1f/d10d6ad23c86c62d90d867d0506881a392ec6ef06885b858eaab868dd356/deeptoolsintervals-0.1.9.tar.gz + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bb/6b/f4a3d0637692c49da8ef99d72d52526f92e0a8d6ac4f0ca9f31441b9d9ea/numpy-2.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/dd/aa/1b939f6c67ed68635bb538e6752d3dacc02f66535182e939a89581a44e9c/scipy-1.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + osx-64: + - conda: https://conda.anaconda.org/bioconda/osx-64/htslib-1.10-h9f635df_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-18-18.1.7-default_h4c8afb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-18.1.7-default_ha3b9224_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-format-18-18.1.7-default_h4c8afb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-format-18.1.7-default_h4c8afb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clang-tools-18.1.7-default_h4c8afb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clangdev-18.1.7-default_h4c8afb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx-18.1.7-default_ha3b9224_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h3ddfcb2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libclang-18.1.7-default_h4c8afb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libclang-cpp-18.1.7-default_h4c8afb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libclang-cpp18.1-18.1.7-default_h4c8afb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libclang13-18.1.7-default_h0449792_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.20.0-h8f0b9e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.8-h19cb2f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.25-h517ebb2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.1-hcc62823_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libllvm18-18.1.7-hd5e122f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-devel-5.8.3-hbb4bfdb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.68.1-h70048d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.0-h1b8f9f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.13.9-he1bc88e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-18.1.7-hd5e122f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvmdev-18.1.7-hd5e122f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.3-hc881268_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.3-h1411813_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.8.3-h6a5a847_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-gpl-tools-5.8.3-h6a5a847_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-tools-5.8.3-hbb4bfdb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.2-hbb4bfdb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda + - pypi: . + - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/27/cc422d11961a00bd04aa9a8d9a63683a1083fe2e6a491c285a94998d6751/pysam-0.24.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/a0/c815bea63117fa63e4e1c01f8a1110d2112fa003f838e6467094ec2432ce/fonttools-4.63.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/46/3b/9dedd2e35cebcd4eb3539514b5ac674fd45654404839e6f9eff6e25d67c7/py2bit-1.0.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/58/be/7482c8a5ebebbc6470b3eb791812fff7d5e0216c2be3827b30b8bb6603ed/pillow-12.2.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/19/ca10ead60b0acc80b2b833c2c4a4f2ff753d0f58b811f70d911c7e94a25c/scipy-1.18.0-cp312-cp312-macosx_10_15_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ac/1f/d10d6ad23c86c62d90d867d0506881a392ec6ef06885b858eaab868dd356/deeptoolsintervals-0.1.9.tar.gz + - pypi: https://files.pythonhosted.org/packages/ac/20/75f915ff375d6249e6550ac740fdbbd66159a068fd3af1400ff62036b07a/scikit_learn-1.9.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bf/d9/405320f8077e8e1c5c4bd6adc45e1e6edf6d727b6da7f2e2533cf58bff71/kiwisolver-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/f4/672930ad51bbc135f51cac89577155f1d0c2d120375fc77978d3aa071bb7/pybigwig-0.3.25.tar.gz + - pypi: https://files.pythonhosted.org/packages/da/17/f5276b496c61477a6c4fc5e7401f4bfe1c2e5ef7c6cd67896f2ade3809cb/matplotlib-3.11.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/0a/11486d02add7b1384dff7374d124b1cfbb0ee864dcc9f6a2c0380638cf84/numpy-2.5.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fe/83/294bca639b0e052f1e2f65199b3db258780c7d4e31408b934c9c974a1379/maturin-1.14.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl + osx-arm64: + - conda: https://conda.anaconda.org/bioconda/osx-arm64/htslib-1.10-hfcd771d_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-19.1.7-he32a8d3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libcxx-headers-19.1.7-h707e725_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-1030.6.3-llvm19_1_hd01ab73_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_impl_osx-arm64-1030.6.3-llvm19_1_he8a363d_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19-19.1.7-default_hf3020a7_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19.1.7-default_hf9bcbb7_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-format-19-19.1.7-default_hf3020a7_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-format-19.1.7-default_hf3020a7_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-tools-19.1.7-default_h1589341_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-19.1.7-default_hc11f16d_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangdev-19.1.7-default_hf3020a7_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-19.1.7-default_hc995acf_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-19.1.7-default_hc11f16d_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-19.1.7-h855ad52_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-hfd3d5f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64-956.6-llvm19_1_he86490a_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-956.6-llvm19_1_ha2625f7_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-19.1.7-default_hf3020a7_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp-19.1.7-default_hf3020a7_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp19.1-19.1.7-default_hf3020a7_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang13-19.1.7-default_h13b06bd_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.20.0-hd5a2499_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.8-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-devel-19.1.7-h6dc3340_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.22-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm19-19.1.7-h8e0c9ce_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsigtool-0.1.3-h98dc951_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.3-h5ef1a60_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.3-h5654f7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.8-hc7d1edf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19-19.1.7-h91fd4e7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19.1.7-h855ad52_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmdev-19.1.7-h91fd4e7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.3-hd24854e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.6-h156bc91_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-codesign-0.1.3-h98dc951_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1600.0.11.8-h997e182_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - pypi: . + - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/d2/23d25e3f247b328be58d04a4c9f894178a0d1eda7d42867cfb388adaf416/fonttools-4.63.0-cp314-cp314-macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/a7/552a7821597c632b907f7bfe8f36f9f572777af8ef8a48353041cf8e091a/scikit_learn-1.9.0-cp314-cp314-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/46/3b/9dedd2e35cebcd4eb3539514b5ac674fd45654404839e6f9eff6e25d67c7/py2bit-1.0.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/b2/97980f3ad4fae37dd7fe31626e2bf75fbf8bdf5d303950ec1fab39a12da8/kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/39/b72e168daf9c00fb20c9fc996d00437ccecdef3102387775d29d7a62576d/numpy-2.5.0-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/72/65/a4559d4ff4a210d2a26d7ca0712e4e738cbfc963135f86e8ae807ca420eb/pysam-0.24.0-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7c/03/b8cdb625a21f710dfa11bbca1f48fb4057d2c0286975f8b415bf80942c99/matplotlib-3.11.0-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ac/1f/d10d6ad23c86c62d90d867d0506881a392ec6ef06885b858eaab868dd356/deeptoolsintervals-0.1.9.tar.gz + - pypi: https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/f4/672930ad51bbc135f51cac89577155f1d0c2d120375fc77978d3aa071bb7/pybigwig-0.3.25.tar.gz + - pypi: https://files.pythonhosted.org/packages/d7/88/b72def7262e150d16be13fca37a96481138d624e700340bc3362a7588929/scipy-1.18.0-cp314-cp314-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/fe/83/294bca639b0e052f1e2f65199b3db258780c7d4e31408b934c9c974a1379/maturin-1.14.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl +packages: +- conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.19-h81da01d_0.tar.bz2 + sha256: 70a43fdc3e81fde05e8cee0b1880d9929c00b2581e162e7c21926deb379b31b3 + md5: 70a467e903079d86316ed9ecff262582 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.5.0,<9.0a0 + - libdeflate >=1.18,<1.26.0a0 + - libgcc-ng >=12 + - libzlib >=1.2.13,<1.3.0a0 + - openssl >=3.2.0,<4.0a0 + - xz >=5.2.6,<6.0a0 + license: MIT + size: 3008383 + timestamp: 1702415814448 +- conda: https://conda.anaconda.org/bioconda/osx-64/htslib-1.10-h9f635df_2.tar.bz2 + sha256: 4291d3afc950832676b1281391d99fcce0cb3f9cab24bc7e3ffc8eba903bdcdf + md5: d9ed52c8cc2dbb9de7425bbedb8e8be6 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.14.1,<9.0a0 + - libdeflate >=1.22,<1.26.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + purls: [] + size: 1544219 + timestamp: 1750325113614 +- conda: https://conda.anaconda.org/bioconda/osx-arm64/htslib-1.10-hfcd771d_2.tar.bz2 + sha256: 3c275175a8c6d16eb25a20123cec349490b1a01df26b1a6ac0c7d9fb11f0b523 + md5: 597f543aab548d638c9e6f1cc01514fd + depends: + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.14.1,<9.0a0 + - libdeflate >=1.22,<1.23.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + purls: [] + size: 1411277 + timestamp: 1750324139516 +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + build_number: 20 + sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 + md5: a9f577daf3de00bca7c3c76c0ecbd1de + depends: + - __glibc >=2.17,<3.0.a0 + - libgomp >=7.5.0 + constrains: + - openmp_impl <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + strong: + - _openmp_mutex >=4.5 + size: 28948 + timestamp: 1770939786096 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-bootstrap_h59bd682_2.conda + sha256: a439e3c858547c9ee5b3b53a93e1aa4ddbbf7e918f51e2b0747e1f1f83a799c3 + md5: 89572c6f5e6c24375ffd022c5d790628 + depends: + - ld_impl_linux-64 2.45.1 bootstrap_ha15bf96_2 + - sysroot_linux-64 + license: GPL-3.0-only + license_family: GPL + purls: [] + run_exports: {} + size: 3717952 + timestamp: 1774197461353 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 + md5: d2ffd7602c02f2b316fd921d39876885 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + run_exports: + weak: + - bzip2 >=1.0.8,<2.0a0 + size: 260182 + timestamp: 1771350215188 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + sha256: cc9accf72fa028d31c2a038460787751127317dcfa991f8d1f1babf216bb454e + md5: 920bb03579f15389b9e512095ad995b7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - c-ares >=1.34.6,<2.0a0 + size: 207882 + timestamp: 1765214722852 +- conda: https://conda.anaconda.org/conda-forge/linux-64/clang-18-18.1.7-default_h9bb3924_0.conda + sha256: 894cf911d8a05319a1ebc89f239d1d4a7b4c239390d6f1060d496a31f5967c7f + md5: 9ca51acbe9841139edeff1a0e09d08b5 + depends: + - libclang-cpp18.1 18.1.7 default_h9bb3924_0 + - libgcc-ng >=12 + - libllvm18 >=18.1.7,<18.2.0a0 + - libstdcxx-ng >=12 + constrains: + - clangdev 18.1.7 + - clangxx 18.1.7 + - llvm-tools 18.1.7 + - clang-tools 18.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 773872 + timestamp: 1717818924402 +- conda: https://conda.anaconda.org/conda-forge/linux-64/clang-18.1.7-default_h90ac42e_0.conda + sha256: 5b1116c7ebcb54c3b52078def1b7794fdd0148d36ab4820e334a348f96f23f60 + md5: 787439d32fd248f2deb7fabb0138d063 + depends: + - binutils_impl_linux-64 + - clang-18 18.1.7 default_h9bb3924_0 + - libgcc-devel_linux-64 + - sysroot_linux-64 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 22601 + timestamp: 1717819018422 +- conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-18-18.1.7-default_h9bb3924_0.conda + sha256: 47aa360b6a1f488cf3de4e032f30136e27e11029d4e6c583d0af43fbcdf9b9db + md5: 11870f57d7d3ae9415d7df325595b3fa + depends: + - libclang-cpp18.1 >=18.1.7,<18.2.0a0 + - libgcc-ng >=12 + - libllvm18 >=18.1.7,<18.2.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 65851 + timestamp: 1717819189499 +- conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-18.1.7-default_h9bb3924_0.conda + sha256: 59c3f0e8e60a14c908bd39d7c3f41d8ae0592299b06346f3cf2b9da01f1df31b + md5: 13a578aae81d919f4fba0278b1040946 + depends: + - clang-format-18 18.1.7 default_h9bb3924_0 + - libclang-cpp18.1 >=18.1.7,<18.2.0a0 + - libgcc-ng >=12 + - libllvm18 >=18.1.7,<18.2.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 22637 + timestamp: 1717819242710 +- conda: https://conda.anaconda.org/conda-forge/linux-64/clang-tools-18.1.7-default_h9bb3924_0.conda + sha256: 4a7bcf3f7ea0f69091ca7d359b1557e5a507f2b9e7a3a41956b2680fb7c551c5 + md5: 540b026c132b76312e0186c94c45b514 + depends: + - clang-format 18.1.7 default_h9bb3924_0 + - libclang-cpp18.1 >=18.1.7,<18.2.0a0 + - libclang13 >=18.1.7 + - libgcc-ng >=12 + - libllvm18 >=18.1.7,<18.2.0a0 + - libstdcxx-ng >=12 + - libxml2 >=2.12.7,<2.14.0a0 + constrains: + - clangdev 18.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 28986750 + timestamp: 1717819296860 +- conda: https://conda.anaconda.org/conda-forge/linux-64/clangdev-18.1.7-default_h9bb3924_0.conda + sha256: 23c4bc99a91042b3ad79189599365adee612df089f05b2c070011c72a06151ad + md5: 9b9f7b0e0edd09239794090ffa75fff4 + depends: + - clang 18.1.7 default_h90ac42e_0 + - clang-tools 18.1.7 default_h9bb3924_0 + - clangxx 18.1.7 default_h127d8a8_0 + - libclang 18.1.7 default_h9bb3924_0 + - libclang-cpp 18.1.7 default_h9bb3924_0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - llvmdev 18.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 49786226 + timestamp: 1717819415233 +- conda: https://conda.anaconda.org/conda-forge/linux-64/clangxx-18.1.7-default_h127d8a8_0.conda + sha256: ff611c7d5a52b21df93d4ef4f6de7bf0804b1ddbef3ba48aee7e64a9176476b3 + md5: b4befb65199865d55bcbd378c13bc317 + depends: + - clang 18.1.7 default_h90ac42e_0 + - libstdcxx-devel_linux-64 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 22673 + timestamp: 1717819030224 +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda + sha256: e12fd90ef6601da2875ebc432452590bc82a893041473bc1c13ef29001a73ea8 + md5: cc47e1facc155f91abd89b11e48e72ff + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - icu >=73.2,<74.0a0 + size: 12089150 + timestamp: 1692900650789 +- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + sha256: 0960d06048a7185d3542d850986d807c6e37ca2e644342dd0c72feefcf26c2a4 + md5: b38117a3c920364aff79f870c984b4a3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-or-later + purls: [] + run_exports: + weak: + - keyutils >=1.6.3,<2.0a0 + size: 134088 + timestamp: 1754905959823 +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 + md5: 3f43953b7d3fb3aaa1d0d0723d91e368 + depends: + - keyutils >=1.6.1,<2.0a0 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - krb5 >=1.21.3,<1.22.0a0 + size: 1370023 + timestamp: 1719463201255 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-bootstrap_ha15bf96_2.conda + sha256: ffc8fb61b32f421687a35b1b6bdd7e73278da0ea1a0d616b624eb3760ed21742 + md5: bafc61899c34054d1f5e7cd85a2f81e9 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.45.1 + license: GPL-3.0-only + license_family: GPL + purls: [] + run_exports: {} + size: 730756 + timestamp: 1774197447552 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-18.1.7-default_h9bb3924_0.conda + sha256: fd7116df16ba9c04e81fb45b24c2e3be5740435f0ddc2385bf7a51af47d41227 + md5: c587de8d5140487d7c021daa6bb69a6c + depends: + - libclang13 18.1.7 default_h087397f_0 + - libgcc-ng >=12 + - libllvm18 >=18.1.7,<18.2.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: + weak: + - libclang13 >=18.1.7 + size: 22600 + timestamp: 1717819141085 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp-18.1.7-default_h9bb3924_0.conda + sha256: 2bedab94a3fc45e67ad8c35c74899369030bd3ccb34ed1336ddc7896324ea574 + md5: 16ce01ff0eee850924312043482b39ae + depends: + - libclang-cpp18.1 18.1.7 default_h9bb3924_0 + - libgcc-ng >=12 + - libllvm18 >=18.1.7,<18.2.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: + weak: + - libclang-cpp18.1 >=18.1.7,<18.2.0a0 + size: 22599 + timestamp: 1717818973121 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp18.1-18.1.7-default_h9bb3924_0.conda + sha256: 710556634edf342cbfcb01d454e8644d4a0ac674eed0a9aebfc1fe86ea8c0bf6 + md5: bff3d36fbd1b1a2f1e6d34aa3eb6b58c + depends: + - libgcc-ng >=12 + - libllvm18 >=18.1.7,<18.2.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: + weak: + - libclang-cpp18.1 >=18.1.7,<18.2.0a0 + size: 19272701 + timestamp: 1717818801492 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-18.1.7-default_h087397f_0.conda + sha256: d981a2734c3af6217dd42c1bccc13b99fc3ca5a64c379739612d6cf67f992a1d + md5: 536526073c2e7f9056fdce8584da779e + depends: + - libgcc-ng >=12 + - libllvm18 >=18.1.7,<18.2.0a0 + - libstdcxx-ng >=12 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: + weak: + - libclang13 >=18.1.7 + size: 11057579 + timestamp: 1717819075043 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.8.0-hca28451_1.conda + sha256: 6b5b64cdcdb643368ebe236de07eedee99b025bb95129bbe317c46e5bdc693f3 + md5: b8afb3e3cb3423cc445cf611ab95fdb0 + depends: + - krb5 >=1.21.3,<1.22.0a0 + - libgcc-ng >=12 + - libnghttp2 >=1.58.0,<2.0a0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.2.13,<2.0a0 + - openssl >=3.3.1,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + run_exports: + weak: + - libcurl >=8.8.0,<9.0a0 + size: 410158 + timestamp: 1719602718702 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680 + md5: 6c77a605a7a689d17d4819c0f8ac9a00 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libdeflate >=1.25,<1.26.0a0 + size: 73490 + timestamp: 1761979956660 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 + md5: c277e0a4d549b03ac1e9d6cbbe3d017b + depends: + - ncurses + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libedit >=3.1.20250104,<3.2.0a0 + size: 134676 + timestamp: 1738479519902 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 + md5: 172bf1cd1ff8629f2b1179945ed45055 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libev >=4.33,<4.34.0a0 + size: 112766 + timestamp: 1702146165126 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + sha256: 16feffd9ddbbe5b718515d38ee376c685ba95491cd901244e24671d20b952a77 + md5: b24d3c612f71e7aa74158d92106318b2 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - expat 2.8.1.* + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 77856 + timestamp: 1781203599810 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 + md5: a360c33a5abe61c07959e449fa1453eb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libffi >=3.5.2,<3.6.0a0 + size: 58592 + timestamp: 1769456073053 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + sha256: 8e0a3b5e41272e5678499b5dfc4cddb673f9e935de01eb0767ce857001229f46 + md5: 57736f29cc2b0ec0b6c2952d3f101b6a + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==15.2.0=*_19 + - libgomp 15.2.0 he0feb66_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 1041084 + timestamp: 1778269013026 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + sha256: 9dcf54adfaa5e861123c2da4f2f0451a685464ea7e5a41ad91cf67b31d658d98 + md5: 331ee9b72b9dff570d56b1302c5ab37d + depends: + - libgcc 15.2.0 he0feb66_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: + strong: + - libgcc + size: 27694 + timestamp: 1778269016987 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + sha256: 5abe4ab9d93f6c9757d654f1969ae2267d4505315c1f2f8fe705fd60af084f1b + md5: faac990cb7aedc7f3a2224f2c9b0c26c + depends: + - __glibc >=2.17,<3.0.a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: + strong: + - _openmp_mutex >=4.5 + size: 603817 + timestamp: 1778268942614 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f + md5: 915f5995e94f60e9a4826e0b0920ee88 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-only + purls: [] + run_exports: + weak: + - libiconv >=1.18,<2.0a0 + size: 790176 + timestamp: 1754908768807 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm18-18.1.7-hb77312f_0.conda + sha256: 9a9167b3e8e05abc517671fe45e5d40ae866d3e8195865ddad3c68131d059e25 + md5: bc0ea7e1f75a9b1c8467597fbbd9f86b + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libxml2 >=2.12.7,<2.14.0a0 + - libzlib >=1.2.13,<2.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: + weak: + - libllvm18 >=18.1.7,<18.2.0a0 + size: 38423980 + timestamp: 1717781615068 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d + md5: b88d90cad08e6bc8ad540cb310a761fb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - xz 5.8.3.* + license: 0BSD + purls: [] + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 113478 + timestamp: 1775825492909 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-devel-5.8.3-hb03c661_0.conda + sha256: 7858f6a173206bc8a5bdc8e75690483bb66c0dcc3809ac1cb43c561a4723623a + md5: 55c20edec8e90c4703787acaade60808 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - liblzma 5.8.3 hb03c661_0 + license: 0BSD + purls: [] + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 491429 + timestamp: 1775825511214 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda + sha256: 1910c5306c6aa5bcbd623c3c930c440e9c77a5a019008e1487810e3c1d3716cb + md5: 700ac6ea6d53d5510591c4344d5c989a + depends: + - c-ares >=1.23.0,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.2.0,<4.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libnghttp2 >=1.58.0,<2.0a0 + size: 631936 + timestamp: 1702130036271 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5 + md5: d864d34357c3b65a4b731f78c0801dc4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-only + license_family: GPL + purls: [] + run_exports: + weak: + - libnsl >=2.0.1,<2.1.0a0 + size: 33731 + timestamp: 1750274110928 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.0-hde9e2c9_0.conda + sha256: daee3f68786231dad457d0dfde3f7f1f9a7f2018adabdbb864226775101341a8 + md5: 18aa975d2094c34aef978060ae7da7d8 + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0a0 + license: Unlicense + purls: [] + run_exports: + weak: + - libsqlite >=3.46.0,<4.0a0 + size: 865346 + timestamp: 1718050628718 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda + sha256: 50e47fd9c4f7bf841a11647ae7486f65220cfc988ec422a4475fe8d5a823824d + md5: 1f5a58e686b13bcfde88b93f547d23fe + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libssh2 >=1.11.0,<2.0a0 + size: 271133 + timestamp: 1685837707056 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + sha256: dff1058c76ec6b8759e41cefa2508162d00e4a5e6721aa68ec3fd10094e702dc + md5: 5794b3bdc38177caf969dabd3af08549 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 15.2.0 he0feb66_19 + constrains: + - libstdcxx-ng ==15.2.0=*_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 5852044 + timestamp: 1778269036376 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + sha256: 0672b6b6e1791c92e8eccad58081a99d614fcf82bca5841f9dfa3c3e658f83b9 + md5: e5ce228e579726c07255dbf90dc62101 + depends: + - libstdcxx 15.2.0 h934c35e_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: + strong: + - libstdcxx + size: 27776 + timestamp: 1778269074600 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + sha256: 9b1bdce27a7e31f7d241aeecff67a1f3101d52a2b1e33ccc2cdf2613072bf81f + md5: 01bb81d12c957de066ea7362007df642 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libuuid >=2.42.2,<3.0a0 + size: 40017 + timestamp: 1781625522462 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + run_exports: + weak: + - libxcrypt >=4.4.36 + size: 100393 + timestamp: 1702724383534 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.7-hc051c1a_1.conda + sha256: 576ea9134176636283ff052897bf7a91ffd8ac35b2c505dfde2890ec52849698 + md5: 340278ded8b0dc3a73f3660bbb0adbc6 + depends: + - icu >=73.2,<74.0a0 + - libgcc-ng >=12 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.2.13,<2.0a0 + - xz >=5.2.6,<6.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libxml2 >=2.12.7,<3.0a0 + size: 704984 + timestamp: 1717546454837 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-h4ab18f5_6.conda + sha256: 8ced4afed6322172182af503f21725d072a589a6eb918f8a58135c1e00d35980 + md5: 27329162c0dc732bcf67a4e0cd488125 + depends: + - libgcc-ng >=12 + constrains: + - zlib 1.2.13 *_6 + license: Zlib + license_family: Other + purls: [] + run_exports: + weak: + - libzlib >=1.2.13,<2.0a0 + size: 61571 + timestamp: 1716874066944 +- conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-tools-18.1.7-hb77312f_0.conda + sha256: bd402e4792a6c5604a7364fbc81098fd7751f87ef98c816dd217c1396913129e + md5: 691d40e402c76d003125d382abd6e7bf + depends: + - libgcc-ng >=12 + - libllvm18 18.1.7 hb77312f_0 + - libstdcxx-ng >=12 + - libxml2 >=2.12.7,<2.14.0a0 + - libzlib >=1.2.13,<2.0a0 + - zstd >=1.5.6,<1.6.0a0 + constrains: + - llvmdev 18.1.7 + - clang 18.1.7 + - clang-tools 18.1.7 + - llvm 18.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 32657444 + timestamp: 1717781906587 +- conda: https://conda.anaconda.org/conda-forge/linux-64/llvmdev-18.1.7-hb77312f_0.conda + sha256: 18ac173d4525486923248be2eb1075d80624c7ac9cf80d2d5e3ce4d318a59d6e + md5: 6ac11f45bdcd0d5c8d596b8d3a266dab + depends: + - libgcc-ng >=12 + - libllvm18 18.1.7 hb77312f_0 + - libstdcxx-ng >=12 + - libxml2 >=2.12.7,<2.14.0a0 + - libzlib >=1.2.13,<2.0a0 + - llvm-tools 18.1.7 hb77312f_0 + - zstd >=1.5.6,<1.6.0a0 + constrains: + - llvm-tools 18.1.7 + - clang 18.1.7 + - clang-tools 18.1.7 + - llvm 18.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 58236201 + timestamp: 1717782018749 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + sha256: fc89f74bbe362fb29fa3c037697a89bec140b346a2469a90f7936d1d7ea4d8a3 + md5: fc21868a1a5aacc937e7a18747acb8a5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: X11 AND BSD-3-Clause + purls: [] + run_exports: + weak: + - ncurses >=6.6,<7.0a0 + size: 918956 + timestamp: 1777422145199 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + sha256: d48f5c22b9897c01e4dff3680f1f57ceb02711ab9c62f74339b080419dfad34b + md5: 79dd2074b5cd5c5c6b2930514a11e22d + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + run_exports: + weak: + - openssl >=3.6.3,<4.0a0 + size: 3159683 + timestamp: 1781069855778 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.3-hab00c5b_0_cpython.conda + sha256: f9865bcbff69f15fd89a33a2da12ad616e98d65ce7c83c644b92e66e5016b227 + md5: 2540b74d304f71d3e89c81209db4db84 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.2,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc-ng >=12 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.45.2,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.2.13,<2.0.0a0 + - ncurses >=6.4.20240210,<7.0a0 + - openssl >=3.2.1,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + run_exports: + weak: + - python_abi 3.12.* *_cp312 + noarch: + - python + size: 31991381 + timestamp: 1713208036041 +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 + md5: d7d95fc8287ea7bf33e0e7116d2b95ec + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + run_exports: + weak: + - readline >=8.3,<9.0a0 + size: 345073 + timestamp: 1765813471974 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + run_exports: + weak: + - tk >=8.6.13,<8.7.0a0 + size: 3318875 + timestamp: 1699202167581 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.8.3-ha02ee65_0.conda + sha256: 2553fd3ec0a1020b2ca05ca10b0036a596cb0d4bf3645922fcf69dacce0e6679 + md5: 6a1b6af49a334e4e06b9f103367762bf + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - liblzma 5.8.3 hb03c661_0 + - liblzma-devel 5.8.3 hb03c661_0 + - xz-gpl-tools 5.8.3 ha02ee65_0 + - xz-tools 5.8.3 hb03c661_0 + license: 0BSD AND LGPL-2.1-or-later AND GPL-2.0-or-later + purls: [] + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 24360 + timestamp: 1775825568523 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xz-gpl-tools-5.8.3-ha02ee65_0.conda + sha256: 8f139666ea18dc8340a44a54056627dd4e89e242e8cd136ab2467d6dc2c192ba + md5: 8f5e2c6726c1339287a3c76a2c138ac7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - liblzma 5.8.3 hb03c661_0 + constrains: + - xz 5.8.3.* + license: 0BSD AND LGPL-2.1-or-later AND GPL-2.0-or-later + purls: [] + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 34213 + timestamp: 1775825548743 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xz-tools-5.8.3-hb03c661_0.conda + sha256: 162ebd76803464b8c8ebc7d45df32edf0ec717b3bf369a437ae3b0254f22dc2e + md5: b62b615caa60812640f24db3a8d0fc87 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - liblzma 5.8.3 hb03c661_0 + constrains: + - xz 5.8.3.* + license: 0BSD AND LGPL-2.1-or-later + purls: [] + run_exports: {} + size: 95955 + timestamp: 1775825530484 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-h4ab18f5_6.conda + sha256: 534824ea44939f3e59ca8ebb95e3ece6f50f9d2a0e69999fbc692311252ed6ac + md5: 559d338a4234c2ad6e676f460a093e67 + depends: + - libgcc-ng >=12 + - libzlib 1.2.13 h4ab18f5_6 + license: Zlib + license_family: Other + purls: [] + run_exports: + weak: + - libzlib >=1.2.13,<2.0a0 + size: 92883 + timestamp: 1716874088980 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - zstd >=1.5.6,<1.6.0a0 + size: 554846 + timestamp: 1714722996770 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + sha256: f8e3c730fa14ee3f170493779f06522c4acf89169f43db4f039727709b6419cf + md5: a9965dd99f683c5f444428f896635716 + depends: + - __unix + license: ISC + purls: [] + run_exports: {} + size: 128866 + timestamp: 1781708962055 +- conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-19.1.7-he32a8d3_1.conda + sha256: 8c32a3db8adf18ed58197e8895ce4f24a83ed63c817512b9a26724753b116f2a + md5: 8d99c82e0f5fed6cc36fcf66a11e03f0 + depends: + - clang 19.1.7.* + constrains: + - compiler-rt 19.1.7 + - clangxx 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + run_exports: {} + size: 10490535 + timestamp: 1757411851093 +- conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda + sha256: 41557eeadf641de6aeae49486cef30d02a6912d8da98585d687894afd65b356a + md5: 86d9cba083cd041bfbf242a01a7a1999 + constrains: + - sysroot_linux-64 ==2.28 + license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later + license_family: GPL + purls: [] + run_exports: {} + size: 1278712 + timestamp: 1765578681495 +- conda: https://conda.anaconda.org/conda-forge/noarch/libcxx-headers-19.1.7-h707e725_2.conda + sha256: 36485e6807e03a4f15a8018ec982457a9de0a1318b4b49a44c5da75849dbe24f + md5: de91b5ce46dc7968b6e311f9add055a2 + depends: + - __unix + constrains: + - libcxx-devel 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 830747 + timestamp: 1764647922410 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_119.conda + sha256: e1815bb11d5abe886979e95889d84310d83d078d36a3567ca67cbf57a3876d88 + md5: 7d517e32d656a8880d98c0e4fc8ddc2c + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 3091520 + timestamp: 1778268364856 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_119.conda + sha256: 1b4263aa5d8c8c659e8e38b66868f42867347e0c8941513ee77269afc00a5186 + md5: d1a866495b9654ccfef5392b8541dc58 + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 20199810 + timestamp: 1778268389428 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + build_number: 8 + sha256: ad6d2e9ac39751cc0529dd1566a26751a0bf2542adb0c232533d32e176e21db5 + md5: 0539938c55b6b1a59b560e843ad864a4 + constrains: + - python 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: {} + size: 6989 + timestamp: 1752805904792 +- conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda + sha256: c47299fe37aebb0fcf674b3be588e67e4afb86225be4b0d452c7eb75c086b851 + md5: 13dc3adbc692664cd3beabd216434749 + depends: + - __glibc >=2.28 + - kernel-headers_linux-64 4.18.0 he073ed8_9 + - tzdata + license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later + license_family: GPL + purls: [] + run_exports: + strong: + - __glibc >=2.28,<3.0.a0 + size: 24008591 + timestamp: 1765578833462 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c + md5: ad659d0a2b3e47e38d829aa8cad2d610 + license: LicenseRef-Public-Domain + purls: [] + run_exports: {} + size: 119135 + timestamp: 1767016325805 +- conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda + sha256: 9f242f13537ef1ce195f93f0cc162965d6cc79da578568d6d8e50f70dd025c42 + md5: 4173ac3b19ec0a4f400b4f782910368b + depends: + - __osx >=10.13 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + run_exports: + weak: + - bzip2 >=1.0.8,<2.0a0 + size: 133427 + timestamp: 1771350680709 +- conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda + sha256: 2f5bc0292d595399df0d168355b4e9820affc8036792d6984bd751fdda2bcaea + md5: fc9a153c57c9f070bebaa7eef30a8f17 + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - c-ares >=1.34.6,<2.0a0 + size: 186122 + timestamp: 1765215100384 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clang-18-18.1.7-default_h4c8afb6_0.conda + sha256: 9e92d1c1234390ae2a47c34805f25d4bd7b58d9c8c60d72cae86d218b7196e00 + md5: afece857d99d5729372ad7fac3a95d2e + depends: + - __osx >=10.13 + - libclang-cpp18.1 18.1.7 default_h4c8afb6_0 + - libcxx >=16.0.6 + - libllvm18 >=18.1.7,<18.2.0a0 + constrains: + - clang-tools 18.1.7 + - clangxx 18.1.7 + - llvm-tools 18.1.7 + - clangdev 18.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 759958 + timestamp: 1717813819070 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clang-18.1.7-default_ha3b9224_0.conda + sha256: 507ea10018ff607b7b3ba6f6efca4c5b897bb6a262464d83222c650b0f467b16 + md5: f3d140dbce64634d0c77665d9a4e7ccb + depends: + - clang-18 18.1.7 default_h4c8afb6_0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 22588 + timestamp: 1717813901304 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clang-format-18-18.1.7-default_h4c8afb6_0.conda + sha256: 185dc3bdd67a438c7760ef446681d46a10ea73c7e8eef7f59c3770d387f73de3 + md5: 8b32920be1534ae49ea54d20bfed0c12 + depends: + - __osx >=10.13 + - libclang-cpp18.1 >=18.1.7,<18.2.0a0 + - libcxx >=16.0.6 + - libllvm18 >=18.1.7,<18.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 62212 + timestamp: 1717814131492 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clang-format-18.1.7-default_h4c8afb6_0.conda + sha256: 105457f602193cbea41ee3c23d3e0ef76dca0c9fa3fbe3dd24a4c4039802c755 + md5: 28e497580c0c89a619dab901cf3a550a + depends: + - __osx >=10.13 + - clang-format-18 18.1.7 default_h4c8afb6_0 + - libclang-cpp18.1 >=18.1.7,<18.2.0a0 + - libcxx >=16.0.6 + - libllvm18 >=18.1.7,<18.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 22876 + timestamp: 1717814196419 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clang-tools-18.1.7-default_h4c8afb6_0.conda + sha256: c78f1cb0472ff7a8221726d8b7c661ebac20b7e289846b8bfcaa088fb64402e2 + md5: c7be23fca3da1d8080946b1e5b84404a + depends: + - __osx >=10.13 + - clang-format 18.1.7 default_h4c8afb6_0 + - libclang-cpp18.1 >=18.1.7,<18.2.0a0 + - libclang13 >=18.1.7 + - libcxx >=16.0.6 + - libllvm18 >=18.1.7,<18.2.0a0 + - libxml2 >=2.12.7,<2.14.0a0 + constrains: + - clangdev 18.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 19771872 + timestamp: 1717814713981 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clangdev-18.1.7-default_h4c8afb6_0.conda + sha256: 2d6964bcc42c8f19593a2aca90e41d437cafc6c15d96035b62907505f07a7e6c + md5: 39ffb42d6df2957d55c2d62413a45ec8 + depends: + - __osx >=10.13 + - clang 18.1.7 default_ha3b9224_0 + - clang-tools 18.1.7 default_h4c8afb6_0 + - clangxx 18.1.7 default_ha3b9224_0 + - libclang 18.1.7 default_h4c8afb6_0 + - libclang-cpp 18.1.7 default_h4c8afb6_0 + - libcxx >=16.0.6 + - llvmdev 18.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 26136783 + timestamp: 1717814816532 +- conda: https://conda.anaconda.org/conda-forge/osx-64/clangxx-18.1.7-default_ha3b9224_0.conda + sha256: 1a8c83972531299dba368eae5a0dc01a9ce877c98554a40d24cd2d48579a336e + md5: a0432972cebd01c75aba04f1983e9919 + depends: + - clang 18.1.7 default_ha3b9224_0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 22662 + timestamp: 1717813914190 +- conda: https://conda.anaconda.org/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda + sha256: 2e64307532f482a0929412976c8450c719d558ba20c0962832132fd0d07ba7a7 + md5: d68d48a3060eb5abdc1cdc8e2a3a5966 + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - icu >=75.1,<76.0a0 + size: 11761697 + timestamp: 1720853679409 +- conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h3ddfcb2_1.conda + sha256: c6342c340b18651d14b6134e223904da6f6099665e45449efb683d4c68b28432 + md5: e070b249c4f9c6bddb7984a1a794e8df + depends: + - __osx >=11.0 + - libcxx >=19 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - openssl >=3.5.7,<4.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - krb5 >=1.22.2,<1.23.0a0 + size: 1195956 + timestamp: 1781860554632 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libclang-18.1.7-default_h4c8afb6_0.conda + sha256: bb06a36b790b58643525d37ad4da9e116197fe261f6bcf82e2920f8e351a08de + md5: 44aaa57742042772d253d057a34883a6 + depends: + - __osx >=10.13 + - libclang13 18.1.7 default_h0449792_0 + - libcxx >=16.0.6 + - libllvm18 >=18.1.7,<18.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: + weak: + - libclang13 >=18.1.7 + size: 22898 + timestamp: 1717814062566 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libclang-cpp-18.1.7-default_h4c8afb6_0.conda + sha256: ea2ab4d652b21bd454e0d3412d142635a2d5bae5887f4abd82ab972cc1bfa2c0 + md5: 24760f4e0135a795d4dff139184d69b4 + depends: + - __osx >=10.13 + - libclang-cpp18.1 18.1.7 default_h4c8afb6_0 + - libcxx >=16.0.6 + - libllvm18 >=18.1.7,<18.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: + weak: + - libclang-cpp18.1 >=18.1.7,<18.2.0a0 + size: 22921 + timestamp: 1717813887590 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libclang-cpp18.1-18.1.7-default_h4c8afb6_0.conda + sha256: 22b64ad7f04ccee346c043ee6bf44c56c1e489b88788693a82f9ca9f3d39c3ab + md5: 41f0f6a496dfda7a7731005f9120fc08 + depends: + - __osx >=10.13 + - libcxx >=16.0.6 + - libllvm18 >=18.1.7,<18.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: + weak: + - libclang-cpp18.1 >=18.1.7,<18.2.0a0 + size: 13773485 + timestamp: 1717813542661 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libclang13-18.1.7-default_h0449792_0.conda + sha256: 9bfec881038994d1a71fe587c226f6971f7bc5220e8024312ea8acb6ebb6c47d + md5: be4f24df1938154adcb08673fbce71be + depends: + - __osx >=10.13 + - libcxx >=16.0.6 + - libllvm18 >=18.1.7,<18.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: + weak: + - libclang13 >=18.1.7 + size: 8119469 + timestamp: 1717813984475 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.20.0-h8f0b9e4_0.conda + sha256: 5d3d8a82ca43347e96f1d79048921f3a7c25e32514bc7feb53ed2a040dcca54d + md5: 4a0085ccf90dc514f0fc0909a874045e + depends: + - __osx >=11.0 + - krb5 >=1.22.2,<1.23.0a0 + - libnghttp2 >=1.68.1,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + run_exports: + weak: + - libcurl >=8.20.0,<9.0a0 + size: 419676 + timestamp: 1777462238769 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-22.1.8-h19cb2f5_0.conda + sha256: 57ee997f1f800cf38abc743c0f0a9ddfe6a101c697c35510452ce6f4ddf96361 + md5: 0f600157f28fc7bc9549ecafdfa5bc12 + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 566717 + timestamp: 1781672189697 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.25-h517ebb2_0.conda + sha256: 025f8b1e85dd8254e0ca65f011919fb1753070eb507f03bca317871a884d24de + md5: 31aa65919a729dc48180893f62c25221 + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libdeflate >=1.25,<1.26.0a0 + size: 70840 + timestamp: 1761980008502 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda + sha256: 6cc49785940a99e6a6b8c6edbb15f44c2dd6c789d9c283e5ee7bdfedd50b4cd6 + md5: 1f4ed31220402fcddc083b4bff406868 + depends: + - ncurses + - __osx >=10.13 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libedit >=3.1.20250104,<3.2.0a0 + size: 115563 + timestamp: 1738479554273 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda + sha256: 0d238488564a7992942aa165ff994eca540f687753b4f0998b29b4e4d030ff43 + md5: 899db79329439820b7e8f8de41bca902 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libev >=4.33,<4.34.0a0 + size: 106663 + timestamp: 1702146352558 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.8.1-hcc62823_1.conda + sha256: 9c96cc05e056e1bba5b545cbbd57b6e01db622dc2c82934caaaa25cfb22fe666 + md5: dcfdea7b7013beef0a4d744d776ea38f + depends: + - __osx >=11.0 + constrains: + - expat 2.8.1.* + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 76020 + timestamp: 1781204303305 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda + sha256: 951958d1792238006fdc6fce7f71f1b559534743b26cc1333497d46e5903a2d6 + md5: 66a0dc7464927d0853b590b6f53ba3ea + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libffi >=3.5.2,<3.6.0a0 + size: 53583 + timestamp: 1769456300951 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda + sha256: a1c8cecdf9966921e13f0ae921309a1f415dfbd2b791f2117cf7e8f5e61a48b6 + md5: 210a85a1119f97ea7887188d176db135 + depends: + - __osx >=10.13 + license: LGPL-2.1-only + purls: [] + run_exports: + weak: + - libiconv >=1.18,<2.0a0 + size: 737846 + timestamp: 1754908900138 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libllvm18-18.1.7-hd5e122f_0.conda + sha256: dc9397be88e0b5d0e14765b98ea7bbea79b9110447e43b28a0f1e994514f6350 + md5: bc138883a1fbb4d446b8a5565b1c1bc0 + depends: + - __osx >=10.13 + - libcxx >=16 + - libxml2 >=2.12.7,<2.14.0a0 + - libzlib >=1.2.13,<2.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: + weak: + - libllvm18 >=18.1.7,<18.2.0a0 + size: 27583991 + timestamp: 1717771655947 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_0.conda + sha256: d9e2006051529aec5578c6efeb13bb6a7200a014b2d5a77a579e83a8049d5f3c + md5: becdfbfe7049fa248e52aa37a9df09e2 + depends: + - __osx >=11.0 + constrains: + - xz 5.8.3.* + license: 0BSD + purls: [] + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 105724 + timestamp: 1775826029494 +- conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-devel-5.8.3-hbb4bfdb_0.conda + sha256: 05f845d7f29691f8410665297a4fd168261aaa2710993e9e21effd66365c080d + md5: a59a33afff299f2d95fdabbd1214f4f1 + depends: + - __osx >=11.0 + - liblzma 5.8.3 hbb4bfdb_0 + license: 0BSD + purls: [] + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 118185 + timestamp: 1775826064340 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.68.1-h70048d4_0.conda + sha256: 899551e16aac9dfb85bfc2fd98b655f4d1b7fea45720ec04ccb93d95b4d24798 + md5: dba4c95e2fe24adcae4b77ebf33559ae + depends: + - __osx >=11.0 + - c-ares >=1.34.6,<2.0a0 + - libcxx >=19 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libnghttp2 >=1.68.1,<2.0a0 + size: 606749 + timestamp: 1773854765508 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.0-h1b8f9f3_0.conda + sha256: 63af1a9e3284c7e4952364bafe7267e41e2d9d8bcc0e85a4ea4b0ec02d3693f6 + md5: 5dadfbc1a567fe6e475df4ce3148be09 + depends: + - __osx >=10.13 + - libzlib >=1.2.13,<2.0a0 + license: Unlicense + purls: [] + run_exports: + weak: + - libsqlite >=3.46.0,<4.0a0 + size: 908643 + timestamp: 1718050720117 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda + sha256: 00654ba9e5f73aa1f75c1f69db34a19029e970a4aeb0fa8615934d8e9c369c3c + md5: a6cb15db1c2dc4d3a5f6cf3772e09e81 + depends: + - __osx >=10.13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.0,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libssh2 >=1.11.1,<2.0a0 + size: 284216 + timestamp: 1745608575796 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.13.9-he1bc88e_0.conda + sha256: 151e653e72b9de48bdeb54ae0664b490d679d724e618649997530a582a67a5fb + md5: af41ebf4621373c4eeeda69cc703f19c + depends: + - __osx >=10.13 + - icu >=75.1,<76.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libxml2 >=2.13.9,<2.14.0a0 + size: 609937 + timestamp: 1761766325697 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.2-hbb4bfdb_2.conda + sha256: 4c6da089952b2d70150c74234679d6f7ac04f4a98f9432dec724968f912691e7 + md5: 30439ff30578e504ee5e0b390afc8c65 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.2 *_2 + license: Zlib + license_family: Other + purls: [] + run_exports: + weak: + - libzlib >=1.3.2,<2.0a0 + size: 59000 + timestamp: 1774073052242 +- conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-tools-18.1.7-hd5e122f_0.conda + sha256: 000a66921285d993aa748b0c9f39aa207331c9e5b7e2f86a57c42e79f92da9ed + md5: c8f3c58497f799f4d617282903d1cab0 + depends: + - __osx >=10.13 + - libllvm18 18.1.7 hd5e122f_0 + - libxml2 >=2.12.7,<2.14.0a0 + - libzlib >=1.2.13,<2.0a0 + - zstd >=1.5.6,<1.6.0a0 + constrains: + - clang 18.1.7 + - llvmdev 18.1.7 + - clang-tools 18.1.7 + - llvm 18.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 24448916 + timestamp: 1717772227513 +- conda: https://conda.anaconda.org/conda-forge/osx-64/llvmdev-18.1.7-hd5e122f_0.conda + sha256: b9320209088189641ed50f02d6abc55418b73523a1817507ef0ed21fb5d767c2 + md5: 43a0f9e29406cc07593d95e8d5d6a416 + depends: + - __osx >=10.13 + - libcxx >=16 + - libllvm18 18.1.7 hd5e122f_0 + - libxml2 >=2.12.7,<2.14.0a0 + - libzlib >=1.2.13,<2.0a0 + - llvm-tools 18.1.7 hd5e122f_0 + - zstd >=1.5.6,<1.6.0a0 + constrains: + - clang 18.1.7 + - clang-tools 18.1.7 + - llvm-tools 18.1.7 + - llvm 18.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 44033239 + timestamp: 1717772482811 +- conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_0.conda + sha256: f5f7e006ff4271305ab4cc08eedd855c67a571793c3d18aff73f645f088a8cae + md5: 31b8740cf1b2588d4e61c81191004061 + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + run_exports: + weak: + - ncurses >=6.6,<7.0a0 + size: 831711 + timestamp: 1777423052277 +- conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.3-hc881268_0.conda + sha256: 819d4368d6b5b298fa40d4bc836c1250842489002cacf3fb918a13ee2033b7c6 + md5: 46be42ab403712fd349d007d763bf767 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + run_exports: + weak: + - openssl >=3.6.3,<4.0a0 + size: 2775300 + timestamp: 1781071391999 +- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.3-h1411813_0_cpython.conda + sha256: 3b327ffc152a245011011d1d730781577a8274fde1cf6243f073749ead8f1c2a + md5: df1448ec6cbf8eceb03d29003cf72ae6 + depends: + - __osx >=10.9 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.2,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.45.2,<4.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ncurses >=6.4.20240210,<7.0a0 + - openssl >=3.2.1,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + run_exports: + weak: + - python_abi 3.12.* *_cp312 + noarch: + - python + size: 14557341 + timestamp: 1713208068012 +- conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda + sha256: 4614af680aa0920e82b953fece85a03007e0719c3399f13d7de64176874b80d5 + md5: eefd65452dfe7cce476a519bece46704 + depends: + - __osx >=10.13 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + run_exports: + weak: + - readline >=8.3,<9.0a0 + size: 317819 + timestamp: 1765813692798 +- conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda + sha256: 30412b2e9de4ff82d8c2a7e5d06a15f4f4fef1809a72138b6ccb53a33b26faf5 + md5: bf830ba5afc507c6232d4ef0fb1a882d + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + run_exports: + weak: + - tk >=8.6.13,<8.7.0a0 + size: 3270220 + timestamp: 1699202389792 +- conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.8.3-h6a5a847_0.conda + sha256: ba5ad03c1c99c0bc62b92fb4630a33839e07b41f1b64c2d224f63a36b6ac1c00 + md5: 65aa14eb080715ecf13b15e5d85acde2 + depends: + - __osx >=11.0 + - liblzma 5.8.3 hbb4bfdb_0 + - liblzma-devel 5.8.3 hbb4bfdb_0 + - xz-gpl-tools 5.8.3 h6a5a847_0 + - xz-tools 5.8.3 hbb4bfdb_0 + license: 0BSD AND LGPL-2.1-or-later AND GPL-2.0-or-later + purls: [] + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 24261 + timestamp: 1775826189380 +- conda: https://conda.anaconda.org/conda-forge/osx-64/xz-gpl-tools-5.8.3-h6a5a847_0.conda + sha256: e9bbba55933e2d962f65b689796561e9b687c36fb388b42eba5c0c561c6fe574 + md5: f2d1a60e16eb0da1cac4f9d0129957da + depends: + - __osx >=11.0 + - liblzma 5.8.3 hbb4bfdb_0 + constrains: + - xz 5.8.3.* + license: 0BSD AND LGPL-2.1-or-later AND GPL-2.0-or-later + purls: [] + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 34168 + timestamp: 1775826151739 +- conda: https://conda.anaconda.org/conda-forge/osx-64/xz-tools-5.8.3-hbb4bfdb_0.conda + sha256: 57fc818b986bf86c5dec503047d5ba2f97bf76f2de225a3e6fea0c87c6e973dd + md5: 0a8d7aa810e8bef50429295f485fb14c + depends: + - __osx >=11.0 + - liblzma 5.8.3 hbb4bfdb_0 + constrains: + - xz 5.8.3.* + license: 0BSD AND LGPL-2.1-or-later + purls: [] + run_exports: {} + size: 86264 + timestamp: 1775826113228 +- conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.2-hbb4bfdb_2.conda + sha256: 5dd728cebca2e96fa48d41661f1a35ed0ee3cb722669eee4e2d854c6745655eb + md5: 6276aa61ffc361cbf130d78cfb88a237 + depends: + - __osx >=11.0 + - libzlib 1.3.2 hbb4bfdb_2 + license: Zlib + license_family: Other + purls: [] + run_exports: + weak: + - libzlib >=1.3.2,<2.0a0 + size: 92411 + timestamp: 1774073075482 +- conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda + sha256: 47101a4055a70a4876ffc87b750ab2287b67eca793f21c8224be5e1ee6394d3f + md5: 727109b184d680772e3122f40136d5ca + depends: + - __osx >=10.13 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - zstd >=1.5.7,<1.6.0a0 + size: 528148 + timestamp: 1764777156963 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + sha256: 540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df + md5: 620b85a3f45526a8bc4d23fd78fc22f0 + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + run_exports: + weak: + - bzip2 >=1.0.8,<2.0a0 + size: 124834 + timestamp: 1771350416561 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + sha256: 2995f2aed4e53725e5efbc28199b46bf311c3cab2648fc4f10c2227d6d5fa196 + md5: bcb3cba70cf1eec964a03b4ba7775f01 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - c-ares >=1.34.6,<2.0a0 + size: 180327 + timestamp: 1765215064054 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-1030.6.3-llvm19_1_hd01ab73_4.conda + sha256: 4f408036b5175be0d2c7940250d00dae5ea7a71d194a1ffb35881fb9df6211fc + md5: caf7c8e48827c2ad0c402716159fe0a2 + depends: + - cctools_impl_osx-arm64 1030.6.3 llvm19_1_he8a363d_4 + - ld64 956.6 llvm19_1_he86490a_4 + - libllvm19 >=19.1.7,<19.2.0a0 + license: APSL-2.0 + license_family: Other + purls: [] + run_exports: {} + size: 24313 + timestamp: 1768852906882 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_impl_osx-arm64-1030.6.3-llvm19_1_he8a363d_4.conda + sha256: c444442e0c01de92a75b58718a100f2e272649658d4f3dd915bbfc2316b25638 + md5: 76c651b923e048f3f3e0ecb22c966f70 + depends: + - __osx >=11.0 + - ld64_osx-arm64 >=956.6,<956.7.0a0 + - libcxx + - libllvm19 >=19.1.7,<19.2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-tools 19.1.* + - sigtool-codesign + constrains: + - ld64 956.6.* + - cctools 1030.6.3.* + - clang 19.1.* + license: APSL-2.0 + license_family: Other + purls: [] + run_exports: {} + size: 749918 + timestamp: 1768852866532 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19-19.1.7-default_hf3020a7_9.conda + sha256: a1449c64f455d43153036f54c68cb075a52c1d9f3350a91f4a8936ecf1675c6b + md5: 5a77d772c22448f6ab340fbfff55db48 + depends: + - __osx >=11.0 + - libclang-cpp19.1 19.1.7 default_hf3020a7_9 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 763361 + timestamp: 1776988759708 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19.1.7-default_hf9bcbb7_9.conda + sha256: 8268c23a000cfeee1b83e19c59eb018ec07583905f69bfee01beac8aedd8c4df + md5: 20056c993a8c9df01e04a0e165579ec1 + depends: + - cctools + - clang-19 19.1.7.* default_* + - clang_impl_osx-arm64 19.1.7 default_hc11f16d_9 + - ld64 + - ld64_osx-arm64 * llvm19_1_* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 24962 + timestamp: 1776989044302 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-format-19-19.1.7-default_hf3020a7_9.conda + sha256: ecb87f79f8377445fcd901060fb2a9af187ac91c098c1a444d833d4ae41cf2ea + md5: 03fc00f8bce94befe6b8e9ce56ccec56 + depends: + - __osx >=11.0 + - libclang-cpp19.1 >=19.1.7,<19.2.0a0 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 62553 + timestamp: 1776988899878 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-format-19.1.7-default_hf3020a7_9.conda + sha256: a6dac903ec7d02e0c38a6e0a6bb4a6bad2811892bf339ac2e6cb4b4a78f249b3 + md5: 8a9e72cc9f23409110fd882ae3a805df + depends: + - __osx >=11.0 + - clang-format-19 19.1.7 default_hf3020a7_9 + - libclang-cpp19.1 >=19.1.7,<19.2.0a0 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 25270 + timestamp: 1776989009705 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-tools-19.1.7-default_h1589341_9.conda + sha256: 0b3cdea6573996c35e80ca9d743349e71108703be79a6329c3dbb22be1f5d491 + md5: 1d58e84155ff0993fd7d58357c77b320 + depends: + - __osx >=11.0 + - clang-format 19.1.7 default_hf3020a7_9 + - libclang-cpp19.1 >=19.1.7,<19.2.0a0 + - libclang13 >=19.1.7 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + constrains: + - clangdev 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 15026501 + timestamp: 1776989117787 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-19.1.7-default_hc11f16d_9.conda + sha256: 56db3a98eda7032a0aefe38f146a4b29df9d75d08c71bf7f7d6412effe775dd1 + md5: 2aec2e39be3b4999bda2a3e5bd4cd2e6 + depends: + - cctools_impl_osx-arm64 + - clang-19 19.1.7.* default_* + - compiler-rt 19.1.7.* + - compiler-rt_osx-arm64 + - ld64_osx-arm64 * llvm19_1_* + - llvm-openmp >=19.1.7 + - llvm-tools 19.1.7.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 24905 + timestamp: 1776989025990 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangdev-19.1.7-default_hf3020a7_9.conda + sha256: 72d0f6d07c8b5324bc95ac3849346340337f889711993a0bd7a08d59cd5a6d14 + md5: 2d790dd1a13dd2e03b785bdbaab9d0f7 + depends: + - __osx >=11.0 + - clang 19.1.7 default_hf9bcbb7_9 + - clang-tools 19.1.7 default_h1589341_9 + - clangxx 19.1.7 default_hc995acf_9 + - libclang 19.1.7 default_hf3020a7_9 + - libclang-cpp 19.1.7 default_hf3020a7_9 + - libcxx >=19.1.7 + - llvmdev 19.1.7.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 29034862 + timestamp: 1776989261367 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-19.1.7-default_hc995acf_9.conda + sha256: 88697ecd1e5689e15c12d334bae2bb3900dffd91efd4686cd9eea9e1095ee986 + md5: 9a1ac8e5124fcc201adb20a103d51cc6 + depends: + - clang 19.1.7 default_hf9bcbb7_9 + - clangxx_impl_osx-arm64 19.1.7.* default_* + - libcxx-devel 19.1.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 24924 + timestamp: 1776989215095 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx_impl_osx-arm64-19.1.7-default_hc11f16d_9.conda + sha256: 6b5ebc5f369ad5373091edc3d4c4d2e1f39169b7adb080395965646eb8aee7c9 + md5: 8b7425e84f940861653c919142435bde + depends: + - clang-19 19.1.7.* default_* + - clang_impl_osx-arm64 19.1.7 default_hc11f16d_9 + - libcxx-devel 19.1.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 24861 + timestamp: 1776989199328 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-19.1.7-h855ad52_1.conda + sha256: b58a481828aee699db7f28bfcbbe72fb133277ac60831dfe70ee2465541bcb93 + md5: 39451684370ae65667fa5c11222e43f7 + depends: + - __osx >=11.0 + - clang 19.1.7.* + - compiler-rt_osx-arm64 19.1.7.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + run_exports: {} + size: 97085 + timestamp: 1757411887557 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + sha256: 3a7907a17e9937d3a46dfd41cffaf815abad59a569440d1e25177c15fd0684e5 + md5: f1182c91c0de31a7abd40cedf6a5ebef + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - icu >=78.3,<79.0a0 + size: 12361647 + timestamp: 1773822915649 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-hfd3d5f3_1.conda + sha256: c740e4a2e7247776a9883158fdab50ae0732c8f67f96d8f1db8ad9da5e0b5222 + md5: 8780f41b013d19219faef9c82260744b + depends: + - __osx >=11.0 + - libcxx >=19 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - openssl >=3.5.7,<4.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - krb5 >=1.22.2,<1.23.0a0 + size: 1159780 + timestamp: 1781859501654 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64-956.6-llvm19_1_he86490a_4.conda + sha256: d6197b4825ece12ab63097bd677294126439a1a6222c7098885aa23464ef280c + md5: 22eb76f8d98f4d3b8319d40bda9174de + depends: + - ld64_osx-arm64 956.6 llvm19_1_ha2625f7_4 + - libllvm19 >=19.1.7,<19.2.0a0 + constrains: + - cctools_osx-arm64 1030.6.3.* + - cctools 1030.6.3.* + license: APSL-2.0 + license_family: Other + purls: [] + run_exports: {} + size: 21592 + timestamp: 1768852886875 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-956.6-llvm19_1_ha2625f7_4.conda + sha256: 4161eec579cea07903ee2fafdde6f8f9991dabd54f3ca6609a1bf75bed3dc788 + md5: eaf3d06e3a8a10dee7565e8d76ae618d + depends: + - __osx >=11.0 + - libcxx + - libllvm19 >=19.1.7,<19.2.0a0 + - sigtool-codesign + - tapi >=1600.0.11.8,<1601.0a0 + constrains: + - cctools_impl_osx-arm64 1030.6.3.* + - ld64 956.6.* + - cctools 1030.6.3.* + - clang 19.1.* + license: APSL-2.0 + license_family: Other + purls: [] + run_exports: {} + size: 1040464 + timestamp: 1768852821767 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-19.1.7-default_hf3020a7_9.conda + sha256: dc65ecec056b11b1606ca1d0bcd84310c23f644fd2fc579ad164eca4493af899 + md5: 2d27183e11c25e3d91138e11d2580b91 + depends: + - __osx >=11.0 + - libclang13 19.1.7 default_h13b06bd_9 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: + weak: + - libclang13 >=19.1.7 + size: 25224 + timestamp: 1776988937989 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp-19.1.7-default_hf3020a7_9.conda + sha256: 0d69dababfbddbe5dca1e90be56f42cc5e34a11bba8087b782cadf612b0de882 + md5: 37feb902c281c7c50c49254ffe757cdc + depends: + - __osx >=11.0 + - libclang-cpp19.1 19.1.7 default_hf3020a7_9 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: + weak: + - libclang-cpp19.1 >=19.1.7,<19.2.0a0 + size: 25253 + timestamp: 1776988972648 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp19.1-19.1.7-default_hf3020a7_9.conda + sha256: e05c4830a117492996bac1ad55cd7ee3e57f63b46da8a324862efbee9279ab44 + md5: ddb70ebdcbf3a44bddc2657a51faf490 + depends: + - __osx >=11.0 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: + weak: + - libclang-cpp19.1 >=19.1.7,<19.2.0a0 + size: 14064699 + timestamp: 1776988581784 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang13-19.1.7-default_h13b06bd_9.conda + sha256: 03bba9893f94d7cbf7e2d11dbb1736f70ce0af044be63e180895401a2dc9d65d + md5: 0bfbfaee8a27ada3ebc2977c5e00acd0 + depends: + - __osx >=11.0 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: + weak: + - libclang13 >=19.1.7 + size: 8439763 + timestamp: 1776988685803 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.20.0-hd5a2499_0.conda + sha256: 38c0bc634b61e542776e97cfd15d5d41edd304d4e47c333004d2d622439b2381 + md5: 2f57b7d0c6adda88957586b7afd78438 + depends: + - __osx >=11.0 + - krb5 >=1.22.2,<1.23.0a0 + - libnghttp2 >=1.68.1,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + run_exports: + weak: + - libcurl >=8.20.0,<9.0a0 + size: 400568 + timestamp: 1777462251987 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.8-h55c6f16_0.conda + sha256: a2e7abab5add9750fab064c024394de48e49f97631c605ad5db5c8ac3fc769ef + md5: 89f76a2a21a3ec3ec983b5eb237c4113 + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 569349 + timestamp: 1781670209146 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-devel-19.1.7-h6dc3340_2.conda + sha256: ec07ebaa226792f4e2bf0f5dba50325632a7474d5f04b951d8291be70af215da + md5: 9f7810b7c0a731dbc84d46d6005890ef + depends: + - libcxx >=19.1.7 + - libcxx-headers >=19.1.7,<19.1.8.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 23000 + timestamp: 1764648270121 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.22-hd74edd7_0.conda + sha256: 3552894ca62bebc33d05982937cda25a4fa19e56a82af2ff20944ff4c2532fda + md5: 2d3e3f3d8ab315748420ef58d5a3ae0f + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libdeflate >=1.22,<1.23.0a0 + size: 54089 + timestamp: 1728177149927 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + sha256: 66aa216a403de0bb0c1340a88d1a06adaff66bae2cfd196731aa24db9859d631 + md5: 44083d2d2c2025afca315c7a172eab2b + depends: + - ncurses + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libedit >=3.1.20250104,<3.2.0a0 + size: 107691 + timestamp: 1738479560845 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f + md5: 36d33e440c31857372a72137f78bacf5 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libev >=4.33,<4.34.0a0 + size: 107458 + timestamp: 1702146414478 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.1-hf6b4638_1.conda + sha256: 5af74261101e3c777399c6294b2b5d290e508153268eb2e9ff99c4d69834612f + md5: a915151d5d3c5bf039f5ccc8402a436f + depends: + - __osx >=11.0 + constrains: + - expat 2.8.1.* + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 69362 + timestamp: 1781203631990 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + sha256: 6686a26466a527585e6a75cc2a242bf4a3d97d6d6c86424a441677917f28bec7 + md5: 43c04d9cb46ef176bb2a4c77e324d599 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libffi >=3.5.2,<3.6.0a0 + size: 40979 + timestamp: 1769456747661 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + sha256: de0336e800b2af9a40bdd694b03870ac4a848161b35c8a2325704f123f185f03 + md5: 4d5a7445f0b25b6a3ddbb56e790f5251 + depends: + - __osx >=11.0 + license: LGPL-2.1-only + purls: [] + run_exports: + weak: + - libiconv >=1.18,<2.0a0 + size: 750379 + timestamp: 1754909073836 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm19-19.1.7-h8e0c9ce_2.conda + sha256: 46f8ff3d86438c0af1bebe0c18261ce5de9878d58b4fe399a3a125670e4f0af5 + md5: d1d9b233830f6631800acc1e081a9444 + depends: + - __osx >=11.0 + - libcxx >=19 + - libxml2 + - libxml2-16 >=2.14.5 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: + weak: + - libllvm19 >=19.1.7,<19.2.0a0 + size: 26914852 + timestamp: 1757353228286 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + sha256: 34878d87275c298f1a732c6806349125cebbf340d24c6c23727268184bba051e + md5: b1fd823b5ae54fbec272cea0811bd8a9 + depends: + - __osx >=11.0 + constrains: + - xz 5.8.3.* + license: 0BSD + purls: [] + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 92472 + timestamp: 1775825802659 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + sha256: 1089c7f15d5b62c622625ec6700732ece83be8b705da8c6607f4dabb0c4bd6d2 + md5: 57c4be259f5e0b99a5983799a228ae55 + depends: + - __osx >=11.0 + license: BSD-2-Clause + license_family: BSD + purls: [] + run_exports: {} + size: 73690 + timestamp: 1769482560514 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + sha256: 2bc7bc3978066f2c274ebcbf711850cc9ab92e023e433b9631958a098d11e10a + md5: 6ea18834adbc3b33df9bd9fb45eaf95b + depends: + - __osx >=11.0 + - c-ares >=1.34.6,<2.0a0 + - libcxx >=19 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libnghttp2 >=1.68.1,<2.0a0 + size: 576526 + timestamp: 1773854624224 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsigtool-0.1.3-h98dc951_0.conda + sha256: 421f7bd7caaa945d9cd5d374cc3f01e75637ca7372a32d5e7695c825a48a30d1 + md5: c08557d00807785decafb932b5be7ef5 + depends: + - __osx >=11.0 + - openssl >=3.5.4,<4.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 36416 + timestamp: 1767045062496 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_0.conda + sha256: 862463917e8ef5ac3ebdaf8f19914634b457609cc27ba678b7197124cefeb1f7 + md5: 1ebde5c677f00765233a17e278571177 + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libzlib >=1.3.2,<2.0a0 + license: blessing + purls: [] + run_exports: + weak: + - libsqlite >=3.53.2,<4.0a0 + size: 927724 + timestamp: 1780575223548 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + sha256: 8bfe837221390ffc6f111ecca24fa12d4a6325da0c8d131333d63d6c37f27e0a + md5: b68e8f66b94b44aaa8de4583d3d4cc40 + depends: + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.0,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libssh2 >=1.11.1,<2.0a0 + size: 279193 + timestamp: 1745608793272 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.3-h5ef1a60_0.conda + sha256: ff75b84cdb9e8d123db2fa694a8ac2c2059516b6cbc98ac21fb68e235d0fd354 + md5: 19edaa53885fc8205614b03da2482282 + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - libxml2 2.15.3 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 466360 + timestamp: 1776377102261 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.3-h5654f7c_0.conda + sha256: 2fe1d8de0854342ae9cabe408b476935f82f5636e153b3b497456264dc8ff3a1 + md5: 8e037d73747d6fe34e12d7bcac10cf21 + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.3 h5ef1a60_0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - libxml2 + - libxml2-16 >=2.15.3 + size: 41102 + timestamp: 1776377119495 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + sha256: 361415a698514b19a852f5d1123c5da746d4642139904156ddfca7c922d23a05 + md5: bc5a5721b6439f2f62a84f2548136082 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.2 *_2 + license: Zlib + license_family: Other + purls: [] + run_exports: + weak: + - libzlib >=1.3.2,<2.0a0 + size: 47759 + timestamp: 1774072956767 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.8-hc7d1edf_0.conda + sha256: ccbaad6bbc88f135ab849bc36af5fa6eda36a9ed18ce6f58e3dde3d11784c156 + md5: a9c118f6343fb6301b6f3b4e94c4c562 + depends: + - __osx >=11.0 + constrains: + - intel-openmp <0.0a0 + - openmp 22.1.8|22.1.8.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + run_exports: + strong: + - llvm-openmp >=22.1.8 + size: 286313 + timestamp: 1781736516782 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19-19.1.7-h91fd4e7_2.conda + sha256: 73f9506f7c32a448071340e73a0e8461e349082d63ecc4849e3eb2d1efc357dd + md5: 8237b150fcd7baf65258eef9a0fc76ef + depends: + - __osx >=11.0 + - libcxx >=19 + - libllvm19 19.1.7 h8e0c9ce_2 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 16376095 + timestamp: 1757353442671 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19.1.7-h855ad52_2.conda + sha256: 09750c33b5d694c494cad9eafda56c61a62622264173d760341b49fb001afe82 + md5: 3e3ac06efc5fdc1aa675ca30bf7d53df + depends: + - __osx >=11.0 + - libllvm19 19.1.7 h8e0c9ce_2 + - llvm-tools-19 19.1.7 h91fd4e7_2 + constrains: + - llvm 19.1.7 + - llvmdev 19.1.7 + - clang-tools 19.1.7 + - clang 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 88390 + timestamp: 1757353535760 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvmdev-19.1.7-h91fd4e7_2.conda + sha256: 321c651f0ba81ed0df3a6d7bbdf1de02ba13679ce1c880382fb73fbd245b4ae1 + md5: 46d3c0cdc4e2361ace6d6014d6e94d64 + depends: + - __osx >=11.0 + - libcxx >=19 + - libllvm19 19.1.7 h8e0c9ce_2 + - libzlib >=1.3.1,<2.0a0 + - llvm-tools 19.1.7 h855ad52_2 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - llvm 19.1.7 + - llvm-tools 19.1.7 + - clang-tools 19.1.7 + - clang 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: {} + size: 45637337 + timestamp: 1757353673840 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda + sha256: 4ea6c620b87bd1d42bb2ccc2c87cd2483fa2d7f9e905b14c223f11ff3f4c455d + md5: 343d10ed5b44030a2f67193905aea159 + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + run_exports: + weak: + - ncurses >=6.6,<7.0a0 + size: 805509 + timestamp: 1777423252320 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.3-hd24854e_0.conda + sha256: b3e3ca895c336d4eb91c5d2f244a312bdb59a0de8cfa0cc4c179225ab2f6bbfb + md5: 8187a86242741725bfa74785fe812979 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + run_exports: + weak: + - openssl >=3.6.3,<4.0a0 + size: 3102584 + timestamp: 1781069820667 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.6-h156bc91_100_cp314.conda + build_number: 100 + sha256: 984081c9fae3a3944c6f2707bbbbc70e8b961f02cdb7c640d9745e2636235632 + md5: 4841be3d0cf616a860efc6e60af66f8b + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.8.1,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - liblzma >=5.8.3,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.53.2,<4.0a0 + - libzlib >=1.3.2,<2.0a0 + - ncurses >=6.6,<7.0a0 + - openssl >=3.5.7,<4.0a0 + - python_abi 3.14.* *_cp314 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - zstd >=1.5.7,<1.6.0a0 + license: Python-2.0 + purls: [] + run_exports: + weak: + - python_abi 3.14.* *_cp314 + noarch: + - python + size: 14059371 + timestamp: 1781254578985 + python_site_packages_path: lib/python3.14/site-packages +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + sha256: a77010528efb4b548ac2a4484eaf7e1c3907f2aec86123ed9c5212ae44502477 + md5: f8381319127120ce51e081dce4865cf4 + depends: + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + run_exports: + weak: + - readline >=8.3,<9.0a0 + size: 313930 + timestamp: 1765813902568 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-codesign-0.1.3-h98dc951_0.conda + sha256: f3d006e2441f110160a684744d90921bbedbffa247d7599d7e76b5cd048116dc + md5: ade77ad7513177297b1d75e351e136ce + depends: + - __osx >=11.0 + - libsigtool 0.1.3 h98dc951_0 + - openssl >=3.5.4,<4.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 114331 + timestamp: 1767045086274 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1600.0.11.8-h997e182_2.conda + sha256: de6893e53664e769c1b1c4103a666d436e3d307c0eb6a09a164e749d116e80f7 + md5: 555070ad1e18b72de36e9ee7ed3236b3 + depends: + - libcxx >=19.0.0.a0 + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: NCSA + purls: [] + run_exports: {} + size: 200192 + timestamp: 1775657222120 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + sha256: 799cab4b6cde62f91f750149995d149bc9db525ec12595e8a1d91b9317f038b3 + md5: a9d86bc62f39b94c4661716624eb21b0 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: TCL + license_family: BSD + purls: [] + run_exports: + weak: + - tk >=8.6.13,<8.7.0a0 + size: 3127137 + timestamp: 1769460817696 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.2-h8088a28_2.conda + sha256: 8dd2ac25f0ba714263aac5832d46985648f4bfb9b305b5021d702079badc08d2 + md5: f1c0bce276210bed45a04949cfe8dc20 + depends: + - __osx >=11.0 + - libzlib 1.3.2 h8088a28_2 + license: Zlib + license_family: Other + purls: [] + run_exports: + weak: + - libzlib >=1.3.2,<2.0a0 + size: 81123 + timestamp: 1774072974535 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + sha256: 9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9 + md5: ab136e4c34e97f34fb621d2592a393d8 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - zstd >=1.5.7,<1.6.0a0 + size: 433413 + timestamp: 1764777166076 +- pypi: . + name: deeptools + requires_dist: + - numpy>=2.0 + - scipy>=1.13 + - matplotlib>=3.9 + - pysam>=0.23 + - numpydoc>=1.8 + - pybigwig>=0.3 + - py2bit>=0.3 + - pandas>=2.2 + - scikit-learn>=1.6 + - deeptoolsintervals>=0.1 + - maturin + - flake8 ; extra == 'actions' + - pytest ; extra == 'actions' + - twine ; extra == 'actions' + - build ; extra == 'actions' + - planemo ; extra == 'actions' + requires_python: '>3.9' +- pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl + name: docutils + version: 0.22.4 + sha256: d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl + name: roman-numerals + version: 4.1.0 + sha256: 647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + name: sphinxcontrib-htmlhelp + version: 2.1.0 + sha256: 166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8 + requires_dist: + - ruff==0.5.5 ; extra == 'lint' + - mypy ; extra == 'lint' + - types-docutils ; extra == 'lint' + - sphinx>=5 ; extra == 'standalone' + - pytest ; extra == 'test' + - html5lib ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl + name: charset-normalizer + version: 3.4.7 + sha256: eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl + name: pyparsing + version: 3.3.2 + sha256: 850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d + requires_dist: + - railroad-diagrams ; extra == 'diagrams' + - jinja2 ; extra == 'diagrams' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/14/27/cc422d11961a00bd04aa9a8d9a63683a1083fe2e6a491c285a94998d6751/pysam-0.24.0-cp312-cp312-macosx_10_13_x86_64.whl + name: pysam + version: 0.24.0 + sha256: 38d5cc5dff4bdaceabbb58c0700c41b132aacf783432b1d16060b46ac7d866e2 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/1a/bd/9c0d5d6983905ce2c9edaa073a7e89355a9cf7f396988e05d32f1c37785d/maturin-1.14.1-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl + name: maturin + version: 1.14.1 + sha256: dfc54ae32e6fcb18302193ab9a30b0b25eefffba994ae13238974805533ef75e + requires_dist: + - tomli>=1.1.0 ; python_full_version < '3.11' + - patchelf ; extra == 'patchelf' + - ziglang>=0.10.0 ; extra == 'zig' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl + name: idna + version: '3.18' + sha256: 7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2 + requires_dist: + - ruff>=0.6.2 ; extra == 'all' + - mypy>=1.11.2 ; extra == 'all' + - pytest>=8.3.2 ; extra == 'all' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl + name: pandas + version: 3.0.3 + sha256: fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09 + requires_dist: + - numpy>=1.26.0 ; python_full_version < '3.14' + - numpy>=2.3.3 ; python_full_version >= '3.14' + - python-dateutil>=2.8.2 + - tzdata ; sys_platform == 'win32' + - tzdata ; sys_platform == 'emscripten' + - hypothesis>=6.116.0 ; extra == 'test' + - pytest>=8.3.4 ; extra == 'test' + - pytest-xdist>=3.6.1 ; extra == 'test' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - bottleneck>=1.4.2 ; extra == 'performance' + - numba>=0.60.0 ; extra == 'performance' + - numexpr>=2.10.2 ; extra == 'performance' + - scipy>=1.14.1 ; extra == 'computation' + - xarray>=2024.10.0 ; extra == 'computation' + - fsspec>=2024.10.0 ; extra == 'fss' + - s3fs>=2024.10.0 ; extra == 'aws' + - gcsfs>=2024.10.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.5 ; extra == 'excel' + - python-calamine>=0.3.0 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.2.0 ; extra == 'excel' + - pyarrow>=13.0.0 ; extra == 'parquet' + - pyarrow>=13.0.0 ; extra == 'feather' + - pyiceberg>=0.8.1 ; extra == 'iceberg' + - tables>=3.10.1 ; extra == 'hdf5' + - pyreadstat>=1.2.8 ; extra == 'spss' + - sqlalchemy>=2.0.36 ; extra == 'postgresql' + - psycopg2>=2.9.10 ; extra == 'postgresql' + - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.36 ; extra == 'mysql' + - pymysql>=1.1.1 ; extra == 'mysql' + - sqlalchemy>=2.0.36 ; extra == 'sql-other' + - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' + - beautifulsoup4>=4.12.3 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'xml' + - matplotlib>=3.9.3 ; extra == 'plot' + - jinja2>=3.1.5 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.4.2 ; extra == 'clipboard' + - zstandard>=0.23.0 ; extra == 'compression' + - pytz>=2020.1 ; extra == 'timezone' + - adbc-driver-postgresql>=1.2.0 ; extra == 'all' + - adbc-driver-sqlite>=1.2.0 ; extra == 'all' + - beautifulsoup4>=4.12.3 ; extra == 'all' + - bottleneck>=1.4.2 ; extra == 'all' + - fastparquet>=2024.11.0 ; extra == 'all' + - fsspec>=2024.10.0 ; extra == 'all' + - gcsfs>=2024.10.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.116.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - lxml>=5.3.0 ; extra == 'all' + - matplotlib>=3.9.3 ; extra == 'all' + - numba>=0.60.0 ; extra == 'all' + - numexpr>=2.10.2 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.5 ; extra == 'all' + - psycopg2>=2.9.10 ; extra == 'all' + - pyarrow>=13.0.0 ; extra == 'all' + - pyiceberg>=0.8.1 ; extra == 'all' + - pymysql>=1.1.1 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.8 ; extra == 'all' + - pytest>=8.3.4 ; extra == 'all' + - pytest-xdist>=3.6.1 ; extra == 'all' + - python-calamine>=0.3.0 ; extra == 'all' + - pytz>=2020.1 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.4.2 ; extra == 'all' + - scipy>=1.14.1 ; extra == 'all' + - s3fs>=2024.10.0 ; extra == 'all' + - sqlalchemy>=2.0.36 ; extra == 'all' + - tables>=3.10.1 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2024.10.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.2.0 ; extra == 'all' + - zstandard>=0.23.0 ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + name: sphinxcontrib-qthelp + version: 2.0.0 + sha256: b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb + requires_dist: + - ruff==0.5.5 ; extra == 'lint' + - mypy ; extra == 'lint' + - types-docutils ; extra == 'lint' + - sphinx>=5 ; extra == 'standalone' + - pytest ; extra == 'test' + - defusedxml>=0.7.1 ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/27/d2/23d25e3f247b328be58d04a4c9f894178a0d1eda7d42867cfb388adaf416/fonttools-4.63.0-cp314-cp314-macosx_10_15_universal2.whl + name: fonttools + version: 4.63.0 + sha256: fd1e3094f42d806d3d7c79162fc59e5910fcbe3a7360c385b8da969bc4493745 + requires_dist: + - lxml>=4.0 ; extra == 'lxml' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' + - zopfli>=0.1.4 ; extra == 'woff' + - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'unicode' + - lz4>=1.7.4.2 ; extra == 'graphite' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' + - pycairo ; extra == 'interpolatable' + - matplotlib ; extra == 'plot' + - sympy ; extra == 'symfont' + - xattr ; sys_platform == 'darwin' and extra == 'type1' + - skia-pathops>=0.5.0 ; extra == 'pathops' + - uharfbuzz>=0.45.0 ; extra == 'repacker' + - lxml>=4.0 ; extra == 'all' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' + - zopfli>=0.1.4 ; extra == 'all' + - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'all' + - lz4>=1.7.4.2 ; extra == 'all' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' + - pycairo ; extra == 'all' + - matplotlib ; extra == 'all' + - sympy ; extra == 'all' + - xattr ; sys_platform == 'darwin' and extra == 'all' + - skia-pathops>=0.5.0 ; extra == 'all' + - uharfbuzz>=0.45.0 ; extra == 'all' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl + name: threadpoolctl + version: 3.6.0 + sha256: 43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + name: sphinxcontrib-devhelp + version: 2.0.0 + sha256: aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2 + requires_dist: + - ruff==0.5.5 ; extra == 'lint' + - mypy ; extra == 'lint' + - types-docutils ; extra == 'lint' + - sphinx>=5 ; extra == 'standalone' + - pytest ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: markupsafe + version: 3.0.3 + sha256: d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/3c/a7/552a7821597c632b907f7bfe8f36f9f572777af8ef8a48353041cf8e091a/scikit_learn-1.9.0-cp314-cp314-macosx_12_0_arm64.whl + name: scikit-learn + version: 1.9.0 + sha256: 24360002ae845e7866522b0a5bbf690802e7bc388cac8663502e78aa98598aa2 + requires_dist: + - numpy>=1.24.1 + - scipy>=1.10.0 + - joblib>=1.4.0 + - narwhals>=2.0.1 + - threadpoolctl>=3.5.0 + - numpy>=1.24.1 ; extra == 'build' + - scipy>=1.10.0 ; extra == 'build' + - cython>=3.1.2 ; extra == 'build' + - meson-python>=0.17.1 ; extra == 'build' + - numpy>=1.24.1 ; extra == 'install' + - scipy>=1.10.0 ; extra == 'install' + - joblib>=1.4.0 ; extra == 'install' + - narwhals>=2.0.1 ; extra == 'install' + - threadpoolctl>=3.5.0 ; extra == 'install' + - matplotlib>=3.6.1 ; extra == 'benchmark' + - pandas>=1.5.0 ; extra == 'benchmark' + - memory-profiler>=0.57.0 ; extra == 'benchmark' + - matplotlib>=3.6.1 ; extra == 'docs' + - scikit-image>=0.22.0 ; extra == 'docs' + - pandas>=1.5.0 ; extra == 'docs' + - rich>=14.1.0 ; extra == 'docs' + - seaborn>=0.13.0 ; extra == 'docs' + - memory-profiler>=0.57.0 ; extra == 'docs' + - sphinx>=7.3.7 ; extra == 'docs' + - sphinx-copybutton>=0.5.2 ; extra == 'docs' + - sphinx-gallery>=0.17.1 ; extra == 'docs' + - numpydoc>=1.2.0 ; extra == 'docs' + - pillow>=12.1.1 ; extra == 'docs' + - pooch>=1.8.0 ; extra == 'docs' + - sphinx-prompt>=1.4.0 ; extra == 'docs' + - sphinxext-opengraph>=0.9.1 ; extra == 'docs' + - plotly>=5.22.0 ; extra == 'docs' + - polars>=0.20.30 ; extra == 'docs' + - sphinx-design>=0.6.0 ; extra == 'docs' + - sphinxcontrib-sass>=0.3.4 ; extra == 'docs' + - pydata-sphinx-theme>=0.15.3 ; extra == 'docs' + - sphinx-remove-toctrees>=1.0.0.post1 ; extra == 'docs' + - towncrier>=24.8.0 ; extra == 'docs' + - matplotlib>=3.6.1 ; extra == 'examples' + - scikit-image>=0.22.0 ; extra == 'examples' + - pandas>=1.5.0 ; extra == 'examples' + - rich>=14.1.0 ; extra == 'examples' + - seaborn>=0.13.0 ; extra == 'examples' + - pooch>=1.8.0 ; extra == 'examples' + - plotly>=5.22.0 ; extra == 'examples' + - matplotlib>=3.6.1 ; extra == 'tests' + - pandas>=1.5.0 ; extra == 'tests' + - rich>=14.1.0 ; extra == 'tests' + - pytest>=7.1.2 ; extra == 'tests' + - pytest-cov>=2.9.0 ; extra == 'tests' + - ruff>=0.12.2 ; extra == 'tests' + - mypy>=1.15 ; extra == 'tests' + - pyamg>=5.0.0 ; extra == 'tests' + - polars>=0.20.30 ; extra == 'tests' + - pyarrow>=13.0.0 ; extra == 'tests' + - numpydoc>=1.2.0 ; extra == 'tests' + - pooch>=1.8.0 ; extra == 'tests' + - conda-lock==3.0.1 ; extra == 'maintenance' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: pillow + version: 12.2.0 + sha256: 62f5409336adb0663b7caa0da5c7d9e7bdbaae9ce761d34669420c2a801b2780 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - check-manifest ; extra == 'tests' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma>=5 ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/44/a0/c815bea63117fa63e4e1c01f8a1110d2112fa003f838e6467094ec2432ce/fonttools-4.63.0-cp312-cp312-macosx_10_13_x86_64.whl + name: fonttools + version: 4.63.0 + sha256: a9faff9e0c1f76f9fd55899d2ce785832efebab37eb8ae13995853aef178bef0 + requires_dist: + - lxml>=4.0 ; extra == 'lxml' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' + - zopfli>=0.1.4 ; extra == 'woff' + - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'unicode' + - lz4>=1.7.4.2 ; extra == 'graphite' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' + - pycairo ; extra == 'interpolatable' + - matplotlib ; extra == 'plot' + - sympy ; extra == 'symfont' + - xattr ; sys_platform == 'darwin' and extra == 'type1' + - skia-pathops>=0.5.0 ; extra == 'pathops' + - uharfbuzz>=0.45.0 ; extra == 'repacker' + - lxml>=4.0 ; extra == 'all' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' + - zopfli>=0.1.4 ; extra == 'all' + - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'all' + - lz4>=1.7.4.2 ; extra == 'all' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' + - pycairo ; extra == 'all' + - matplotlib ; extra == 'all' + - sympy ; extra == 'all' + - xattr ; sys_platform == 'darwin' and extra == 'all' + - skia-pathops>=0.5.0 ; extra == 'all' + - uharfbuzz>=0.45.0 ; extra == 'all' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/46/3b/9dedd2e35cebcd4eb3539514b5ac674fd45654404839e6f9eff6e25d67c7/py2bit-1.0.1.tar.gz + name: py2bit + version: 1.0.1 + sha256: 4972f85eb3844cdfba43eb54ab3c8349a0536e03dfd7db07ca8d3447285ad20c +- pypi: https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl + name: narwhals + version: 2.22.1 + sha256: 60567d774edf77db53906f89d9fbd164e66e56d66d388e1e6990f17ac33cfb53 + requires_dist: + - cudf-cu12>=24.10.0 ; sys_platform == 'linux' and extra == 'cudf' + - dask[dataframe]>=2024.8 ; extra == 'dask' + - duckdb>=1.1 ; extra == 'duckdb' + - ibis-framework>=6.0.0 ; extra == 'ibis' + - rich>=12.4.4 ; extra == 'ibis' + - packaging>=21.3 ; extra == 'ibis' + - pyarrow-hotfix>=0.7 ; extra == 'ibis' + - modin>=0.22.0 ; extra == 'modin' + - pandas>=1.3.4 ; extra == 'pandas' + - polars>=0.20.4 ; extra == 'polars' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - pyspark>=3.5.0 ; extra == 'pyspark' + - pyspark[connect]>=3.5.0 ; extra == 'pyspark-connect' + - narwhals[duckdb] ; extra == 'sql' + - sqlparse>=0.5.5 ; extra == 'sql' + - sqlframe>=3.22.0,!=3.39.3 ; extra == 'sqlframe' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/49/b2/97980f3ad4fae37dd7fe31626e2bf75fbf8bdf5d303950ec1fab39a12da8/kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl + name: kiwisolver + version: 1.5.0 + sha256: 0cbe94b69b819209a62cb27bdfa5dc2a8977d8de2f89dfd97ba4f53ed3af754e + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: charset-normalizer + version: 3.4.7 + sha256: 5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl + name: snowballstemmer + version: 3.1.1 + sha256: 7e207fa178741da09cdee59d3ecec3827ad5f92b1fc5c9ff3755b639f71f5752 + requires_python: '>=3.3' +- pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + name: sphinxcontrib-serializinghtml + version: 2.0.0 + sha256: 6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331 + requires_dist: + - ruff==0.5.5 ; extra == 'lint' + - mypy ; extra == 'lint' + - types-docutils ; extra == 'lint' + - sphinx>=5 ; extra == 'standalone' + - pytest ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/55/0f/e7f1ff3a1cabc6c4486a7ee1b0506aedf2f5f8329760ac1f4e8032feef2b/pysam-0.24.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: pysam + version: 0.24.0 + sha256: 4a642f18649e59817de272173e9c27c031dceaca199809e4f8b338ebfc5d6698 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/58/be/7482c8a5ebebbc6470b3eb791812fff7d5e0216c2be3827b30b8bb6603ed/pillow-12.2.0-cp312-cp312-macosx_10_13_x86_64.whl + name: pillow + version: 12.2.0 + sha256: 2d192a155bbcec180f8564f693e6fd9bccff5a7af9b32e2e4bf8c9c69dbad6b5 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - check-manifest ; extra == 'tests' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma>=5 ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl + name: markupsafe + version: 3.0.3 + sha256: d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/5d/39/b72e168daf9c00fb20c9fc996d00437ccecdef3102387775d29d7a62576d/numpy-2.5.0-cp314-cp314-macosx_11_0_arm64.whl + name: numpy + version: 2.5.0 + sha256: 28e7137057d551e4a83c4ae414e3451f50568409db7569aacc7f9811ee06a446 + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + name: sphinxcontrib-applehelp + version: 2.0.0 + sha256: 4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5 + requires_dist: + - ruff==0.5.5 ; extra == 'lint' + - mypy ; extra == 'lint' + - types-docutils ; extra == 'lint' + - sphinx>=5 ; extra == 'standalone' + - pytest ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + name: imagesize + version: 2.0.0 + sha256: 5667c5bbb57ab3f1fa4bc366f4fbc971db3d5ed011fd2715fd8001f782718d96 + requires_python: '>=3.10,<3.15' +- pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl + name: numpydoc + version: 1.10.0 + sha256: 3149da9874af890bcc2a82ef7aae5484e5aa81cb2778f08e3c307ba6d963721b + requires_dist: + - sphinx>=6 + - tomli>=1.1.0 ; python_full_version < '3.11' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + name: jinja2 + version: 3.1.6 + sha256: 85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 + requires_dist: + - markupsafe>=2.0 + - babel>=2.7 ; extra == 'i18n' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: pandas + version: 3.0.3 + sha256: 6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9 + requires_dist: + - numpy>=1.26.0 ; python_full_version < '3.14' + - numpy>=2.3.3 ; python_full_version >= '3.14' + - python-dateutil>=2.8.2 + - tzdata ; sys_platform == 'win32' + - tzdata ; sys_platform == 'emscripten' + - hypothesis>=6.116.0 ; extra == 'test' + - pytest>=8.3.4 ; extra == 'test' + - pytest-xdist>=3.6.1 ; extra == 'test' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - bottleneck>=1.4.2 ; extra == 'performance' + - numba>=0.60.0 ; extra == 'performance' + - numexpr>=2.10.2 ; extra == 'performance' + - scipy>=1.14.1 ; extra == 'computation' + - xarray>=2024.10.0 ; extra == 'computation' + - fsspec>=2024.10.0 ; extra == 'fss' + - s3fs>=2024.10.0 ; extra == 'aws' + - gcsfs>=2024.10.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.5 ; extra == 'excel' + - python-calamine>=0.3.0 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.2.0 ; extra == 'excel' + - pyarrow>=13.0.0 ; extra == 'parquet' + - pyarrow>=13.0.0 ; extra == 'feather' + - pyiceberg>=0.8.1 ; extra == 'iceberg' + - tables>=3.10.1 ; extra == 'hdf5' + - pyreadstat>=1.2.8 ; extra == 'spss' + - sqlalchemy>=2.0.36 ; extra == 'postgresql' + - psycopg2>=2.9.10 ; extra == 'postgresql' + - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.36 ; extra == 'mysql' + - pymysql>=1.1.1 ; extra == 'mysql' + - sqlalchemy>=2.0.36 ; extra == 'sql-other' + - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' + - beautifulsoup4>=4.12.3 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'xml' + - matplotlib>=3.9.3 ; extra == 'plot' + - jinja2>=3.1.5 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.4.2 ; extra == 'clipboard' + - zstandard>=0.23.0 ; extra == 'compression' + - pytz>=2020.1 ; extra == 'timezone' + - adbc-driver-postgresql>=1.2.0 ; extra == 'all' + - adbc-driver-sqlite>=1.2.0 ; extra == 'all' + - beautifulsoup4>=4.12.3 ; extra == 'all' + - bottleneck>=1.4.2 ; extra == 'all' + - fastparquet>=2024.11.0 ; extra == 'all' + - fsspec>=2024.10.0 ; extra == 'all' + - gcsfs>=2024.10.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.116.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - lxml>=5.3.0 ; extra == 'all' + - matplotlib>=3.9.3 ; extra == 'all' + - numba>=0.60.0 ; extra == 'all' + - numexpr>=2.10.2 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.5 ; extra == 'all' + - psycopg2>=2.9.10 ; extra == 'all' + - pyarrow>=13.0.0 ; extra == 'all' + - pyiceberg>=0.8.1 ; extra == 'all' + - pymysql>=1.1.1 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.8 ; extra == 'all' + - pytest>=8.3.4 ; extra == 'all' + - pytest-xdist>=3.6.1 ; extra == 'all' + - python-calamine>=0.3.0 ; extra == 'all' + - pytz>=2020.1 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.4.2 ; extra == 'all' + - scipy>=1.14.1 ; extra == 'all' + - s3fs>=2024.10.0 ; extra == 'all' + - sqlalchemy>=2.0.36 ; extra == 'all' + - tables>=3.10.1 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2024.10.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.2.0 ; extra == 'all' + - zstandard>=0.23.0 ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl + name: pandas + version: 3.0.3 + sha256: bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f + requires_dist: + - numpy>=1.26.0 ; python_full_version < '3.14' + - numpy>=2.3.3 ; python_full_version >= '3.14' + - python-dateutil>=2.8.2 + - tzdata ; sys_platform == 'win32' + - tzdata ; sys_platform == 'emscripten' + - hypothesis>=6.116.0 ; extra == 'test' + - pytest>=8.3.4 ; extra == 'test' + - pytest-xdist>=3.6.1 ; extra == 'test' + - pyarrow>=13.0.0 ; extra == 'pyarrow' + - bottleneck>=1.4.2 ; extra == 'performance' + - numba>=0.60.0 ; extra == 'performance' + - numexpr>=2.10.2 ; extra == 'performance' + - scipy>=1.14.1 ; extra == 'computation' + - xarray>=2024.10.0 ; extra == 'computation' + - fsspec>=2024.10.0 ; extra == 'fss' + - s3fs>=2024.10.0 ; extra == 'aws' + - gcsfs>=2024.10.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.5 ; extra == 'excel' + - python-calamine>=0.3.0 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.2.0 ; extra == 'excel' + - pyarrow>=13.0.0 ; extra == 'parquet' + - pyarrow>=13.0.0 ; extra == 'feather' + - pyiceberg>=0.8.1 ; extra == 'iceberg' + - tables>=3.10.1 ; extra == 'hdf5' + - pyreadstat>=1.2.8 ; extra == 'spss' + - sqlalchemy>=2.0.36 ; extra == 'postgresql' + - psycopg2>=2.9.10 ; extra == 'postgresql' + - adbc-driver-postgresql>=1.2.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.36 ; extra == 'mysql' + - pymysql>=1.1.1 ; extra == 'mysql' + - sqlalchemy>=2.0.36 ; extra == 'sql-other' + - adbc-driver-postgresql>=1.2.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=1.2.0 ; extra == 'sql-other' + - beautifulsoup4>=4.12.3 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'html' + - lxml>=5.3.0 ; extra == 'xml' + - matplotlib>=3.9.3 ; extra == 'plot' + - jinja2>=3.1.5 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.4.2 ; extra == 'clipboard' + - zstandard>=0.23.0 ; extra == 'compression' + - pytz>=2020.1 ; extra == 'timezone' + - adbc-driver-postgresql>=1.2.0 ; extra == 'all' + - adbc-driver-sqlite>=1.2.0 ; extra == 'all' + - beautifulsoup4>=4.12.3 ; extra == 'all' + - bottleneck>=1.4.2 ; extra == 'all' + - fastparquet>=2024.11.0 ; extra == 'all' + - fsspec>=2024.10.0 ; extra == 'all' + - gcsfs>=2024.10.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.116.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - lxml>=5.3.0 ; extra == 'all' + - matplotlib>=3.9.3 ; extra == 'all' + - numba>=0.60.0 ; extra == 'all' + - numexpr>=2.10.2 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.5 ; extra == 'all' + - psycopg2>=2.9.10 ; extra == 'all' + - pyarrow>=13.0.0 ; extra == 'all' + - pyiceberg>=0.8.1 ; extra == 'all' + - pymysql>=1.1.1 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.8 ; extra == 'all' + - pytest>=8.3.4 ; extra == 'all' + - pytest-xdist>=3.6.1 ; extra == 'all' + - python-calamine>=0.3.0 ; extra == 'all' + - pytz>=2020.1 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.4.2 ; extra == 'all' + - scipy>=1.14.1 ; extra == 'all' + - s3fs>=2024.10.0 ; extra == 'all' + - sqlalchemy>=2.0.36 ; extra == 'all' + - tables>=3.10.1 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2024.10.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.2.0 ; extra == 'all' + - zstandard>=0.23.0 ; extra == 'all' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/6a/19/ca10ead60b0acc80b2b833c2c4a4f2ff753d0f58b811f70d911c7e94a25c/scipy-1.18.0-cp312-cp312-macosx_10_15_x86_64.whl + name: scipy + version: 1.18.0 + sha256: 7bd21faaf5a1a3b2eff922d02db5f191b99a6518db9078a8fb23169f6d22259a + requires_dist: + - numpy>=2.0.0,<2.8 + - pytest>=8.0.0 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-xdist ; extra == 'test' + - asv ; extra == 'test' + - mpmath ; extra == 'test' + - gmpy2 ; extra == 'test' + - threadpoolctl ; extra == 'test' + - scikit-umfpack ; extra == 'test' + - pooch ; extra == 'test' + - hypothesis>=6.30 ; extra == 'test' + - array-api-strict>=2.3.1 ; extra == 'test' + - cython ; extra == 'test' + - meson ; extra == 'test' + - ninja ; sys_platform != 'emscripten' and extra == 'test' + - scipy-doctest>=2.0.0 ; extra == 'test' + - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design>=0.4.0 ; extra == 'doc' + - matplotlib>=3.5 ; extra == 'doc' + - numpydoc ; extra == 'doc' + - jupytext ; extra == 'doc' + - myst-nb>=1.2.0 ; extra == 'doc' + - pooch ; extra == 'doc' + - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' + - jupyterlite-pyodide-kernel ; extra == 'doc' + - linkify-it-py ; extra == 'doc' + - tabulate ; extra == 'doc' + - click<8.3.0 ; extra == 'dev' + - spin ; extra == 'dev' + - mypy==1.19.1 ; extra == 'dev' + - pyrefly==0.63.0 ; extra == 'dev' + - typing-extensions ; extra == 'dev' + - types-psutil ; extra == 'dev' + - pycodestyle ; extra == 'dev' + - ruff>=0.12.0 ; extra == 'dev' + - cython-lint>=0.12.2 ; extra == 'dev' + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/6b/67/6ea73b2173bcb1abe3a947fbd090cf96ee1b0a75f3f690e8902dc8ffdbfa/py2bit-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: py2bit + version: 1.0.1 + sha256: 0cbd9754342dc9595f46b18e655af01d89e78d9762b0b541fcd4e96076523275 +- pypi: https://files.pythonhosted.org/packages/6c/c2/63fdda36c56437eeb44aaf9493c8bcd62ce230ab1598924fc626ffbfa943/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: scikit-learn + version: 1.9.0 + sha256: 056c92bb67ad4c28463c2f2653d9701449201e7e7a9e94e321be0f71c4fef2b8 + requires_dist: + - numpy>=1.24.1 + - scipy>=1.10.0 + - joblib>=1.4.0 + - narwhals>=2.0.1 + - threadpoolctl>=3.5.0 + - numpy>=1.24.1 ; extra == 'build' + - scipy>=1.10.0 ; extra == 'build' + - cython>=3.1.2 ; extra == 'build' + - meson-python>=0.17.1 ; extra == 'build' + - numpy>=1.24.1 ; extra == 'install' + - scipy>=1.10.0 ; extra == 'install' + - joblib>=1.4.0 ; extra == 'install' + - narwhals>=2.0.1 ; extra == 'install' + - threadpoolctl>=3.5.0 ; extra == 'install' + - matplotlib>=3.6.1 ; extra == 'benchmark' + - pandas>=1.5.0 ; extra == 'benchmark' + - memory-profiler>=0.57.0 ; extra == 'benchmark' + - matplotlib>=3.6.1 ; extra == 'docs' + - scikit-image>=0.22.0 ; extra == 'docs' + - pandas>=1.5.0 ; extra == 'docs' + - rich>=14.1.0 ; extra == 'docs' + - seaborn>=0.13.0 ; extra == 'docs' + - memory-profiler>=0.57.0 ; extra == 'docs' + - sphinx>=7.3.7 ; extra == 'docs' + - sphinx-copybutton>=0.5.2 ; extra == 'docs' + - sphinx-gallery>=0.17.1 ; extra == 'docs' + - numpydoc>=1.2.0 ; extra == 'docs' + - pillow>=12.1.1 ; extra == 'docs' + - pooch>=1.8.0 ; extra == 'docs' + - sphinx-prompt>=1.4.0 ; extra == 'docs' + - sphinxext-opengraph>=0.9.1 ; extra == 'docs' + - plotly>=5.22.0 ; extra == 'docs' + - polars>=0.20.30 ; extra == 'docs' + - sphinx-design>=0.6.0 ; extra == 'docs' + - sphinxcontrib-sass>=0.3.4 ; extra == 'docs' + - pydata-sphinx-theme>=0.15.3 ; extra == 'docs' + - sphinx-remove-toctrees>=1.0.0.post1 ; extra == 'docs' + - towncrier>=24.8.0 ; extra == 'docs' + - matplotlib>=3.6.1 ; extra == 'examples' + - scikit-image>=0.22.0 ; extra == 'examples' + - pandas>=1.5.0 ; extra == 'examples' + - rich>=14.1.0 ; extra == 'examples' + - seaborn>=0.13.0 ; extra == 'examples' + - pooch>=1.8.0 ; extra == 'examples' + - plotly>=5.22.0 ; extra == 'examples' + - matplotlib>=3.6.1 ; extra == 'tests' + - pandas>=1.5.0 ; extra == 'tests' + - rich>=14.1.0 ; extra == 'tests' + - pytest>=7.1.2 ; extra == 'tests' + - pytest-cov>=2.9.0 ; extra == 'tests' + - ruff>=0.12.2 ; extra == 'tests' + - mypy>=1.15 ; extra == 'tests' + - pyamg>=5.0.0 ; extra == 'tests' + - polars>=0.20.30 ; extra == 'tests' + - pyarrow>=13.0.0 ; extra == 'tests' + - numpydoc>=1.2.0 ; extra == 'tests' + - pooch>=1.8.0 ; extra == 'tests' + - conda-lock==3.0.1 ; extra == 'maintenance' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/72/65/a4559d4ff4a210d2a26d7ca0712e4e738cbfc963135f86e8ae807ca420eb/pysam-0.24.0-cp314-cp314-macosx_11_0_arm64.whl + name: pysam + version: 0.24.0 + sha256: f6f95d44efb4ee1dcfd18fcd11b26ba00bc1afaba9128a1b56c4c8887208fb07 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl + name: sphinx + version: 9.1.0 + sha256: c84fdd4e782504495fe4f2c0b3413d6c2bf388589bb352d439b2a3bb99991978 + requires_dist: + - sphinxcontrib-applehelp>=1.0.7 + - sphinxcontrib-devhelp>=1.0.6 + - sphinxcontrib-htmlhelp>=2.0.6 + - sphinxcontrib-jsmath>=1.0.1 + - sphinxcontrib-qthelp>=1.0.6 + - sphinxcontrib-serializinghtml>=1.1.9 + - jinja2>=3.1 + - pygments>=2.17 + - docutils>=0.21,<0.23 + - snowballstemmer>=2.2 + - babel>=2.13 + - alabaster>=0.7.14 + - imagesize>=1.3 + - requests>=2.30.0 + - roman-numerals>=1.0.0 + - packaging>=23.0 + - colorama>=0.4.6 ; sys_platform == 'win32' + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/77/c7/2342da9830e3e9d4870305ca5d2091d2a83284f2953079b7bdd3b5e029d8/fonttools-4.63.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: fonttools + version: 4.63.0 + sha256: 58dc6bb86a78d782f00f9190ca02c119cf5bbe2807536e361e18d42019f877d8 + requires_dist: + - lxml>=4.0 ; extra == 'lxml' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' + - zopfli>=0.1.4 ; extra == 'woff' + - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'unicode' + - lz4>=1.7.4.2 ; extra == 'graphite' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' + - pycairo ; extra == 'interpolatable' + - matplotlib ; extra == 'plot' + - sympy ; extra == 'symfont' + - xattr ; sys_platform == 'darwin' and extra == 'type1' + - skia-pathops>=0.5.0 ; extra == 'pathops' + - uharfbuzz>=0.45.0 ; extra == 'repacker' + - lxml>=4.0 ; extra == 'all' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' + - zopfli>=0.1.4 ; extra == 'all' + - unicodedata2>=17.0.0 ; python_full_version < '3.15' and extra == 'all' + - lz4>=1.7.4.2 ; extra == 'all' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' + - pycairo ; extra == 'all' + - matplotlib ; extra == 'all' + - sympy ; extra == 'all' + - xattr ; sys_platform == 'darwin' and extra == 'all' + - skia-pathops>=0.5.0 ; extra == 'all' + - uharfbuzz>=0.45.0 ; extra == 'all' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl + name: babel + version: 2.18.0 + sha256: e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35 + requires_dist: + - pytz>=2015.7 ; python_full_version < '3.9' + - tzdata ; sys_platform == 'win32' and extra == 'dev' + - backports-zoneinfo ; python_full_version < '3.9' and extra == 'dev' + - freezegun~=1.0 ; extra == 'dev' + - jinja2>=3.0 ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest>=6.0 ; extra == 'dev' + - pytz ; extra == 'dev' + - setuptools ; extra == 'dev' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/7a/f6/51d8a97116de23c9280c1fa3b813bc088f8571ce5936ba84af1ecf13ed45/pybigwig-0.3.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pybigwig + version: 0.3.25 + sha256: 852c41f00afc610322eb3c5aba74068d05b340d09db4573db2deca330ad48f30 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl + name: joblib + version: 1.5.3 + sha256: 5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/7c/03/b8cdb625a21f710dfa11bbca1f48fb4057d2c0286975f8b415bf80942c99/matplotlib-3.11.0-cp314-cp314-macosx_11_0_arm64.whl + name: matplotlib + version: 3.11.0 + sha256: 25c2e5455efd8d99f41fb79871a31feb7d301569642e332ec58d72cfe9282bc3 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.25 + - packaging>=20.0 + - pillow>=9 + - pyparsing>=3 + - python-dateutil>=2.7 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + name: alabaster + version: 1.0.0 + sha256: fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl + name: urllib3 + version: 2.7.0 + sha256: 9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897 + requires_dist: + - brotli>=1.2.0 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=1.2.0.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2>=4,<5 ; extra == 'h2' + - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' + - backports-zstd>=1.0.0 ; python_full_version < '3.14' and extra == 'zstd' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/94/95/7f522393c88313336b20d70fc849555757b2e5febc22b83b3a3f0fd4bce9/matplotlib-3.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: matplotlib + version: 3.11.0 + sha256: be5f93a1d21981bfb802ded0d77a0caa92d4342a47d45754fac77e314a506344 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.25 + - packaging>=20.0 + - pillow>=9 + - pyparsing>=3 + - python-dateutil>=2.7 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl + name: charset-normalizer + version: 3.4.7 + sha256: c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl + name: requests + version: 2.34.2 + sha256: 2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 + requires_dist: + - charset-normalizer>=2,<4 + - idna>=2.5,<4 + - urllib3>=1.26,<3 + - certifi>=2023.5.7 + - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' + - chardet>=3.0.2,<8 ; extra == 'use-chardet-on-py3' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ac/1f/d10d6ad23c86c62d90d867d0506881a392ec6ef06885b858eaab868dd356/deeptoolsintervals-0.1.9.tar.gz + name: deeptoolsintervals + version: 0.1.9 + sha256: 7d94c36fd2b6f10d8b99e536d2672e8228971f1fc810497d33527bba2c40d4f6 +- pypi: https://files.pythonhosted.org/packages/ac/20/75f915ff375d6249e6550ac740fdbbd66159a068fd3af1400ff62036b07a/scikit_learn-1.9.0-cp312-cp312-macosx_10_13_x86_64.whl + name: scikit-learn + version: 1.9.0 + sha256: 2bd41b0d201bc81575531b96b713d3eb5e5f50fb0b82101ff0f92294fdc236ac + requires_dist: + - numpy>=1.24.1 + - scipy>=1.10.0 + - joblib>=1.4.0 + - narwhals>=2.0.1 + - threadpoolctl>=3.5.0 + - numpy>=1.24.1 ; extra == 'build' + - scipy>=1.10.0 ; extra == 'build' + - cython>=3.1.2 ; extra == 'build' + - meson-python>=0.17.1 ; extra == 'build' + - numpy>=1.24.1 ; extra == 'install' + - scipy>=1.10.0 ; extra == 'install' + - joblib>=1.4.0 ; extra == 'install' + - narwhals>=2.0.1 ; extra == 'install' + - threadpoolctl>=3.5.0 ; extra == 'install' + - matplotlib>=3.6.1 ; extra == 'benchmark' + - pandas>=1.5.0 ; extra == 'benchmark' + - memory-profiler>=0.57.0 ; extra == 'benchmark' + - matplotlib>=3.6.1 ; extra == 'docs' + - scikit-image>=0.22.0 ; extra == 'docs' + - pandas>=1.5.0 ; extra == 'docs' + - rich>=14.1.0 ; extra == 'docs' + - seaborn>=0.13.0 ; extra == 'docs' + - memory-profiler>=0.57.0 ; extra == 'docs' + - sphinx>=7.3.7 ; extra == 'docs' + - sphinx-copybutton>=0.5.2 ; extra == 'docs' + - sphinx-gallery>=0.17.1 ; extra == 'docs' + - numpydoc>=1.2.0 ; extra == 'docs' + - pillow>=12.1.1 ; extra == 'docs' + - pooch>=1.8.0 ; extra == 'docs' + - sphinx-prompt>=1.4.0 ; extra == 'docs' + - sphinxext-opengraph>=0.9.1 ; extra == 'docs' + - plotly>=5.22.0 ; extra == 'docs' + - polars>=0.20.30 ; extra == 'docs' + - sphinx-design>=0.6.0 ; extra == 'docs' + - sphinxcontrib-sass>=0.3.4 ; extra == 'docs' + - pydata-sphinx-theme>=0.15.3 ; extra == 'docs' + - sphinx-remove-toctrees>=1.0.0.post1 ; extra == 'docs' + - towncrier>=24.8.0 ; extra == 'docs' + - matplotlib>=3.6.1 ; extra == 'examples' + - scikit-image>=0.22.0 ; extra == 'examples' + - pandas>=1.5.0 ; extra == 'examples' + - rich>=14.1.0 ; extra == 'examples' + - seaborn>=0.13.0 ; extra == 'examples' + - pooch>=1.8.0 ; extra == 'examples' + - plotly>=5.22.0 ; extra == 'examples' + - matplotlib>=3.6.1 ; extra == 'tests' + - pandas>=1.5.0 ; extra == 'tests' + - rich>=14.1.0 ; extra == 'tests' + - pytest>=7.1.2 ; extra == 'tests' + - pytest-cov>=2.9.0 ; extra == 'tests' + - ruff>=0.12.2 ; extra == 'tests' + - mypy>=1.15 ; extra == 'tests' + - pyamg>=5.0.0 ; extra == 'tests' + - polars>=0.20.30 ; extra == 'tests' + - pyarrow>=13.0.0 ; extra == 'tests' + - numpydoc>=1.2.0 ; extra == 'tests' + - pooch>=1.8.0 ; extra == 'tests' + - conda-lock==3.0.1 ; extra == 'maintenance' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl + name: markupsafe + version: 3.0.3 + sha256: c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + name: six + version: 1.17.0 + sha256: 4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' +- pypi: https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl + name: pillow + version: 12.2.0 + sha256: 80b2da48193b2f33ed0c32c38140f9d3186583ce7d516526d462645fd98660ae + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - check-manifest ; extra == 'tests' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma>=5 ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/bb/6b/f4a3d0637692c49da8ef99d72d52526f92e0a8d6ac4f0ca9f31441b9d9ea/numpy-2.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: numpy + version: 2.5.0 + sha256: aaa760137137e8d3c920d27927748215b56014f92667dc9b6c27dfc61249255a + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl + name: contourpy + version: 1.3.3 + sha256: b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb + requires_dist: + - numpy>=1.25 + - furo ; extra == 'docs' + - sphinx>=7.2 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - bokeh ; extra == 'bokeh' + - selenium ; extra == 'bokeh' + - contourpy[bokeh,docs] ; extra == 'mypy' + - bokeh ; extra == 'mypy' + - docutils-stubs ; extra == 'mypy' + - mypy==1.17.0 ; extra == 'mypy' + - types-pillow ; extra == 'mypy' + - contourpy[test-no-images] ; extra == 'test' + - matplotlib ; extra == 'test' + - pillow ; extra == 'test' + - pytest ; extra == 'test-no-images' + - pytest-cov ; extra == 'test-no-images' + - pytest-rerunfailures ; extra == 'test-no-images' + - pytest-xdist ; extra == 'test-no-images' + - wurlitzer ; extra == 'test-no-images' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/bf/d9/405320f8077e8e1c5c4bd6adc45e1e6edf6d727b6da7f2e2533cf58bff71/kiwisolver-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl + name: kiwisolver + version: 1.5.0 + sha256: 72ec46b7eba5b395e0a7b63025490d3214c11013f4aacb4f5e8d6c3041829588 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + name: sphinxcontrib-jsmath + version: 1.0.1 + sha256: 2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 + requires_dist: + - pytest ; extra == 'test' + - flake8 ; extra == 'test' + - mypy ; extra == 'test' + requires_python: '>=3.5' +- pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: kiwisolver + version: 1.5.0 + sha256: bb5136fb5352d3f422df33f0c879a1b0c204004324150cc3b5e3c4f310c9049f + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: contourpy + version: 1.3.3 + sha256: 4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1 + requires_dist: + - numpy>=1.25 + - furo ; extra == 'docs' + - sphinx>=7.2 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - bokeh ; extra == 'bokeh' + - selenium ; extra == 'bokeh' + - contourpy[bokeh,docs] ; extra == 'mypy' + - bokeh ; extra == 'mypy' + - docutils-stubs ; extra == 'mypy' + - mypy==1.17.0 ; extra == 'mypy' + - types-pillow ; extra == 'mypy' + - contourpy[test-no-images] ; extra == 'test' + - matplotlib ; extra == 'test' + - pillow ; extra == 'test' + - pytest ; extra == 'test-no-images' + - pytest-cov ; extra == 'test-no-images' + - pytest-rerunfailures ; extra == 'test-no-images' + - pytest-xdist ; extra == 'test-no-images' + - wurlitzer ; extra == 'test-no-images' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/cf/f4/672930ad51bbc135f51cac89577155f1d0c2d120375fc77978d3aa071bb7/pybigwig-0.3.25.tar.gz + name: pybigwig + version: 0.3.25 + sha256: 8c717b0222e6677956fd659c8a21650983679ffb3314427d7f68d2910fad202a + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/d7/88/b72def7262e150d16be13fca37a96481138d624e700340bc3362a7588929/scipy-1.18.0-cp314-cp314-macosx_12_0_arm64.whl + name: scipy + version: 1.18.0 + sha256: 2ef3abc54a4ffc53765374b0d5728532dfdd2585ed23f6b11c206a1f0b1b9af8 + requires_dist: + - numpy>=2.0.0,<2.8 + - pytest>=8.0.0 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-xdist ; extra == 'test' + - asv ; extra == 'test' + - mpmath ; extra == 'test' + - gmpy2 ; extra == 'test' + - threadpoolctl ; extra == 'test' + - scikit-umfpack ; extra == 'test' + - pooch ; extra == 'test' + - hypothesis>=6.30 ; extra == 'test' + - array-api-strict>=2.3.1 ; extra == 'test' + - cython ; extra == 'test' + - meson ; extra == 'test' + - ninja ; sys_platform != 'emscripten' and extra == 'test' + - scipy-doctest>=2.0.0 ; extra == 'test' + - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design>=0.4.0 ; extra == 'doc' + - matplotlib>=3.5 ; extra == 'doc' + - numpydoc ; extra == 'doc' + - jupytext ; extra == 'doc' + - myst-nb>=1.2.0 ; extra == 'doc' + - pooch ; extra == 'doc' + - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' + - jupyterlite-pyodide-kernel ; extra == 'doc' + - linkify-it-py ; extra == 'doc' + - tabulate ; extra == 'doc' + - click<8.3.0 ; extra == 'dev' + - spin ; extra == 'dev' + - mypy==1.19.1 ; extra == 'dev' + - pyrefly==0.63.0 ; extra == 'dev' + - typing-extensions ; extra == 'dev' + - types-psutil ; extra == 'dev' + - pycodestyle ; extra == 'dev' + - ruff>=0.12.0 ; extra == 'dev' + - cython-lint>=0.12.2 ; extra == 'dev' + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/da/17/f5276b496c61477a6c4fc5e7401f4bfe1c2e5ef7c6cd67896f2ade3809cb/matplotlib-3.11.0-cp312-cp312-macosx_10_13_x86_64.whl + name: matplotlib + version: 3.11.0 + sha256: 06b5872e9cf11adc8f589ded3ce11bc3e1061ad498259664fabc1f6615beb918 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.25 + - packaging>=20.0 + - pillow>=9 + - pyparsing>=3 + - python-dateutil>=2.7 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/dd/aa/1b939f6c67ed68635bb538e6752d3dacc02f66535182e939a89581a44e9c/scipy-1.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: scipy + version: 1.18.0 + sha256: 1f55797419e16e7f30cf88ffb3113ce0467f00cfe3f70d5c281730b21769bfc2 + requires_dist: + - numpy>=2.0.0,<2.8 + - pytest>=8.0.0 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-xdist ; extra == 'test' + - asv ; extra == 'test' + - mpmath ; extra == 'test' + - gmpy2 ; extra == 'test' + - threadpoolctl ; extra == 'test' + - scikit-umfpack ; extra == 'test' + - pooch ; extra == 'test' + - hypothesis>=6.30 ; extra == 'test' + - array-api-strict>=2.3.1 ; extra == 'test' + - cython ; extra == 'test' + - meson ; extra == 'test' + - ninja ; sys_platform != 'emscripten' and extra == 'test' + - scipy-doctest>=2.0.0 ; extra == 'test' + - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design>=0.4.0 ; extra == 'doc' + - matplotlib>=3.5 ; extra == 'doc' + - numpydoc ; extra == 'doc' + - jupytext ; extra == 'doc' + - myst-nb>=1.2.0 ; extra == 'doc' + - pooch ; extra == 'doc' + - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' + - jupyterlite-pyodide-kernel ; extra == 'doc' + - linkify-it-py ; extra == 'doc' + - tabulate ; extra == 'doc' + - click<8.3.0 ; extra == 'dev' + - spin ; extra == 'dev' + - mypy==1.19.1 ; extra == 'dev' + - pyrefly==0.63.0 ; extra == 'dev' + - typing-extensions ; extra == 'dev' + - types-psutil ; extra == 'dev' + - pycodestyle ; extra == 'dev' + - ruff>=0.12.0 ; extra == 'dev' + - cython-lint>=0.12.2 ; extra == 'dev' + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + name: packaging + version: '26.2' + sha256: 5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + name: cycler + version: 0.12.1 + sha256: 85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30 + requires_dist: + - ipython ; extra == 'docs' + - matplotlib ; extra == 'docs' + - numpydoc ; extra == 'docs' + - sphinx ; extra == 'docs' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + name: python-dateutil + version: 2.9.0.post0 + sha256: a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 + requires_dist: + - six>=1.5 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' +- pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl + name: certifi + version: 2026.6.17 + sha256: 2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + name: pygments + version: 2.20.0 + sha256: 81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 + requires_dist: + - colorama>=0.4.6 ; extra == 'windows-terminal' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fa/0a/11486d02add7b1384dff7374d124b1cfbb0ee864dcc9f6a2c0380638cf84/numpy-2.5.0-cp312-cp312-macosx_10_13_x86_64.whl + name: numpy + version: 2.5.0 + sha256: 489780423903667933b4ed6197b6ec3b75ea5dd17d1d8f0f38d798feb6921561 + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl + name: contourpy + version: 1.3.3 + sha256: cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77 + requires_dist: + - numpy>=1.25 + - furo ; extra == 'docs' + - sphinx>=7.2 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - bokeh ; extra == 'bokeh' + - selenium ; extra == 'bokeh' + - contourpy[bokeh,docs] ; extra == 'mypy' + - bokeh ; extra == 'mypy' + - docutils-stubs ; extra == 'mypy' + - mypy==1.17.0 ; extra == 'mypy' + - types-pillow ; extra == 'mypy' + - contourpy[test-no-images] ; extra == 'test' + - matplotlib ; extra == 'test' + - pillow ; extra == 'test' + - pytest ; extra == 'test-no-images' + - pytest-cov ; extra == 'test-no-images' + - pytest-rerunfailures ; extra == 'test-no-images' + - pytest-xdist ; extra == 'test-no-images' + - wurlitzer ; extra == 'test-no-images' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/fe/83/294bca639b0e052f1e2f65199b3db258780c7d4e31408b934c9c974a1379/maturin-1.14.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl + name: maturin + version: 1.14.1 + sha256: ffe5ad71f21d1e6603c4dd75f7fee34adf5ed5ebcebb692886549888ebb329ed + requires_dist: + - tomli>=1.1.0 ; python_full_version < '3.11' + - patchelf ; extra == 'patchelf' + - ziglang>=0.10.0 ; extra == 'zig' + requires_python: '>=3.7' diff --git a/pyproject.toml b/pyproject.toml index c218cb5687..9a6fddf68f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,7 +37,8 @@ dependencies = [ "py2bit >= 0.3", "pandas >= 2.2", "scikit-learn >= 1.6", - "deeptoolsintervals >= 0.1" + "deeptoolsintervals >= 0.1", + "maturin" ] description = "Useful tools for exploring deep sequencing data." license = {file = "LICENSE.txt"} @@ -90,3 +91,19 @@ bamCompare = "deeptools.bamCompare2:main" computeMatrix = "deeptools.computeMatrix2:main" #alignmentSieve = "deeptools.alignmentSieve2:main" multiBamSummary = "deeptools.multiBamSummary2:main" + +[tool.pixi.workspace] +channels = ["conda-forge", "bioconda"] +platforms = ["linux-64", "osx-arm64", "osx-64"] +[tool.pixi.dependencies] +libclang = "<22" +clangdev = "<22" +#compilers = "*" +#gcc = "*" +#gxx = "*" +htslib = "<=1.19" +zlib = "*" +[tool.pixi.pypi-dependencies] +deeptools = { path = ".", editable = true } +[tool.pixi.activation.env] +LIBCLANG_PATH = "$CONDA_PREFIX/lib" diff --git a/src/alignmentsieve.rs b/src/alignmentsieve.rs index c8998c588e..d680c8eb21 100644 --- a/src/alignmentsieve.rs +++ b/src/alignmentsieve.rs @@ -1,35 +1,35 @@ +use crate::covcalc::{parse_regions, Region}; +use crate::filehandler::{is_bed_or_gtf, read_bedfile}; +use crate::filtering::Alignmentfilters; use pyo3::prelude::*; use pyo3::types::PyList; use rayon::prelude::*; use rayon::ThreadPoolBuilder; use rust_htslib::bam::{self, Header, IndexedReader, Read, Reader, Writer}; -use tempfile::{Builder, TempPath}; use std::fs::File; use std::io::Write; -use crate::covcalc::{parse_regions, Region}; -use crate::filtering::Alignmentfilters; -use crate::filehandler::{is_bed_or_gtf, read_bedfile}; +use tempfile::{Builder, TempPath}; #[pyfunction] pub fn r_alignmentsieve( - bamifile: &str, // input bamfile - ofile: &str, // output file - nproc: usize, // threads - filter_metrics: &str, // filter metrics file. + py: Python, + bamifile: &str, // input bamfile + ofile: &str, // output file + nproc: usize, // threads + filter_metrics: &str, // filter metrics file. filtered_out_readsfile: &str, // filtered_out_reads bam/bedfile. - verbose: bool, // verbose - shift: Py, // python list of the shift to perform. - _bed: bool, // output format in BEDPE. - filterrnastrand: &str, // "forward", "reverse" or "None". - minmappingquality: u8, // minimum mapping quality. - samflaginclude: u16, // sam flag include - samflagexclude: u16, // sam flag exclude - blacklist: &str, // blacklist file name. - minfraglen: u32, // minimum fragment length. - maxfraglen: u32, // maximum fragment length. + verbose: bool, // verbose + shift: Py, // python list of the shift to perform. + _bed: bool, // output format in BEDPE. + filterrnastrand: &str, // "forward", "reverse" or "None". + minmappingquality: u8, // minimum mapping quality. + samflaginclude: u16, // sam flag include + samflagexclude: u16, // sam flag exclude + blacklist: &str, // blacklist file name. + minfraglen: u32, // minimum fragment length. + maxfraglen: u32, // maximum fragment length. _extend_reads: u32, _center_reads: bool, - ) -> PyResult<()> { // Input bam file let bam = Reader::from_path(bamifile).unwrap(); @@ -40,13 +40,10 @@ pub fn r_alignmentsieve( if filtered_out_readsfile != "None" { write_filters = true; } - let mut readshift: Vec = Vec::new(); - Python::with_gil(|py| { - readshift = shift.extract(py).expect("Failed to extract shift."); - }); + let readshift: Vec = shift.extract(py).expect("Failed to extract shift"); // shift is of length 0, 2, or 4. - // Define regions + // Define regions let (regions, chromsizes) = parse_regions("None", vec![bamifile]); // If there is a blacklist, read it. let mut backlistregions: Option> = None; @@ -56,10 +53,11 @@ pub fn r_alignmentsieve( match isbed.as_str() { "gtf" => panic!("Error: Please provide a bed file for the blacklist."), "bed" => { - let (bls, _) = read_bedfile(&blacklist.to_string(), false, chromsizes.keys().collect()); + let (bls, _) = + read_bedfile(&blacklist.to_string(), false, chromsizes.keys().collect()); backlistregions = Some(bls); - }, - _ => panic!("Error: Cannot determine filetype of blacklist file.") + } + _ => panic!("Error: Cannot determine filetype of blacklist file."), } } @@ -79,17 +77,29 @@ pub fn r_alignmentsieve( ); let pool = ThreadPoolBuilder::new().num_threads(1).build().unwrap(); let (sieve, filtersieve, totalreads, filteredreads) = pool.install(|| { - regions.par_iter() - .map(|i| sieve_bamregion(bamifile, i, &filters, &readshift, write_filters, nproc, verbose)) + regions + .par_iter() + .map(|i| { + sieve_bamregion( + bamifile, + i, + &filters, + &readshift, + write_filters, + nproc, + verbose, + ) + }) .reduce( || (Vec::new(), Vec::new(), 0, 0), - |(mut _sieve, mut _filtersieve, mut _total, mut _filter), (sieve, filtersieve, total, filter)| { + |(mut _sieve, mut _filtersieve, mut _total, mut _filter), + (sieve, filtersieve, total, filter)| { _sieve.extend(sieve); _filtersieve.extend(filtersieve); _total += total; _filter += filter; (_sieve, _filtersieve, _total, _filter) - } + }, ) }); @@ -107,7 +117,8 @@ pub fn r_alignmentsieve( } // write filtered reads if necessary if write_filters { - let mut ofilterbam = Writer::from_path(filtered_out_readsfile, &header, bam::Format::Bam).unwrap(); + let mut ofilterbam = + Writer::from_path(filtered_out_readsfile, &header, bam::Format::Bam).unwrap(); let _ = ofilterbam.set_threads(nproc); for sb in filtersieve.into_iter() { if let Some(sb) = sb { @@ -127,15 +138,33 @@ pub fn r_alignmentsieve( // write header writeln!(of, "#bamFilterReads --filterMetrics").unwrap(); writeln!(of, "#File\tReads\tRemaining Total\tInitial Reads").unwrap(); - writeln!(of, "{}\t{}\t{}", bamifile, totalreads-filteredreads, totalreads).unwrap(); + writeln!( + of, + "{}\t{}\t{}", + bamifile, + totalreads - filteredreads, + totalreads + ) + .unwrap(); } Ok(()) } - -fn sieve_bamregion(ibam: &str, regstruct: &Region, alfilters: &Alignmentfilters, _shift: &Vec, write_filters: bool, nproc: usize, verbose: bool) -> (Vec>, Vec>, u64, u64) { - let region = (regstruct.chrom.clone(), regstruct.get_startu(), regstruct.get_endu()); +fn sieve_bamregion( + ibam: &str, + regstruct: &Region, + alfilters: &Alignmentfilters, + _shift: &Vec, + write_filters: bool, + nproc: usize, + verbose: bool, +) -> (Vec>, Vec>, u64, u64) { + let region = ( + regstruct.chrom.clone(), + regstruct.get_startu(), + regstruct.get_endu(), + ); let mut total_reads: u64 = 0; let mut filtered_reads: u64 = 0; let mut bam = IndexedReader::from_path(ibam).unwrap(); @@ -201,7 +230,7 @@ fn sieve_bamregion(ibam: &str, regstruct: &Region, alfilters: &Alignmentfilters, } continue; } - + // SAM flags if alfilters.samflaginclude != 0 && (record.flags() & alfilters.samflaginclude) == 0 { filtered_reads += 1; @@ -223,7 +252,9 @@ fn sieve_bamregion(ibam: &str, regstruct: &Region, alfilters: &Alignmentfilters, // fragment length if alfilters.minfraglen != 0 || alfilters.maxfraglen != 0 { if record.is_paired() { - if record.insert_size().abs() < alfilters.minfraglen as i64 || record.insert_size().abs() > alfilters.maxfraglen as i64 { + if record.insert_size().abs() < alfilters.minfraglen as i64 + || record.insert_size().abs() > alfilters.maxfraglen as i64 + { filtered_reads += 1; if let Some(filterbamout) = &mut filterbamout { filterbamout.write(&record).unwrap(); @@ -264,7 +295,7 @@ fn sieve_bamregion(ibam: &str, regstruct: &Region, alfilters: &Alignmentfilters, } continue; } - }, + } ("forward", false) => { if !(record.flags() & 16 == 16) { filtered_reads += 1; @@ -274,7 +305,7 @@ fn sieve_bamregion(ibam: &str, regstruct: &Region, alfilters: &Alignmentfilters, } continue; } - }, + } ("reverse", true) => { if !((record.flags() & 144 == 144) || (record.flags() & 96 == 96)) { filtered_reads += 1; @@ -284,7 +315,7 @@ fn sieve_bamregion(ibam: &str, regstruct: &Region, alfilters: &Alignmentfilters, } continue; } - }, + } ("reverse", false) => { if !(record.flags() & 16 == 0) { filtered_reads += 1; @@ -294,8 +325,8 @@ fn sieve_bamregion(ibam: &str, regstruct: &Region, alfilters: &Alignmentfilters, } continue; } - }, - _ => {}, + } + _ => {} } } sievebamout.write(&record).unwrap(); @@ -303,18 +334,24 @@ fn sieve_bamregion(ibam: &str, regstruct: &Region, alfilters: &Alignmentfilters, } match (written, filterwritten) { - (true, true) => { - (vec![Some(sievebam_path)], vec![Some(filterbam_path)], total_reads, filtered_reads) - }, - (true, false) => { - (vec![Some(sievebam_path)], vec![None], total_reads, filtered_reads) - }, - (false, true) => { - (vec![None], vec![Some(filterbam_path)], total_reads, filtered_reads) - }, - (false, false) => { - (vec![None], vec![None], total_reads, filtered_reads) - } + (true, true) => ( + vec![Some(sievebam_path)], + vec![Some(filterbam_path)], + total_reads, + filtered_reads, + ), + (true, false) => ( + vec![Some(sievebam_path)], + vec![None], + total_reads, + filtered_reads, + ), + (false, true) => ( + vec![None], + vec![Some(filterbam_path)], + total_reads, + filtered_reads, + ), + (false, false) => (vec![None], vec![None], total_reads, filtered_reads), } - -} \ No newline at end of file +} diff --git a/src/bamcompare.rs b/src/bamcompare.rs index 959d31ad11..32d0c1a709 100644 --- a/src/bamcompare.rs +++ b/src/bamcompare.rs @@ -1,25 +1,26 @@ +use crate::calc::{calc_ratio, median}; +use crate::covcalc::{bam_pileup, parse_regions, region_divider, Region, TempZip}; +use crate::filehandler::{bam_ispaired, is_bed_or_gtf, read_bedfile, write_covfile}; +use crate::filtering::Alignmentfilters; +use crate::normalization::scale_factor_bamcompare; +use bigtools::Value; +use itertools::Itertools; use pyo3::prelude::*; use pyo3::types::PyList; use rayon::prelude::*; use rayon::ThreadPoolBuilder; -use std::io::prelude::*; -use std::io::{BufReader}; use std::fs::File; -use itertools::Itertools; -use bigtools::{Value}; -use crate::filehandler::{bam_ispaired, write_covfile, is_bed_or_gtf, read_bedfile}; -use crate::covcalc::{bam_pileup, parse_regions, TempZip, region_divider, Region}; -use crate::filtering::Alignmentfilters; -use crate::normalization::{scale_factor_bamcompare}; -use crate::calc::{median, calc_ratio}; -use tempfile::{TempPath}; +use std::io::prelude::*; +use std::io::BufReader; +use tempfile::TempPath; #[pyfunction] pub fn r_bamcompare( + py: Python, // input and output bamifile1: &str, // input bamfile 1 bamifile2: &str, // input bamfile 2 - ofile: &str, // output file + ofile: &str, // output file ofiletype: &str, // ouput file type, bedgraph or bigwig // norm options norm: &str, @@ -31,11 +32,11 @@ pub fn r_bamcompare( pseudocount1: f32, pseudocount2: f32, // filtering options - extendreads: bool, // if 0, no extension + extendreads: bool, // if 0, no extension extendreadslen: u32, // length of extension (0 if PE or if not extending) centerreads: bool, - blacklist: &str, // path to blacklist filename, or 'None' - minmappingquality: u8, // + blacklist: &str, // path to blacklist filename, or 'None' + minmappingquality: u8, // samflaginclude: u16, samflagexclude: u16, minfraglen: u32, @@ -47,7 +48,7 @@ pub fn r_bamcompare( binsize: u32, supregion: &str, verbose: bool, - collapse: bool + collapse: bool, ) -> PyResult<()> { let ispe1 = bam_ispaired(bamifile1); let ispe2 = bam_ispaired(bamifile2); @@ -56,14 +57,12 @@ pub fn r_bamcompare( println!("Sample1: {} is-paired: {}", bamifile1, ispe1); println!("Sample2: {} is-paired: {}", bamifile2, ispe2); } - let mut ignorechr: Vec = Vec::new(); - Python::with_gil(|py| { - ignorechr = _ignorechr.extract(py).expect("Failed to retrieve ignorechr."); - }); + let ignorechr: Vec = _ignorechr + .extract(py) + .expect("Failed to retrieve ignorechr."); - - // Parse regions & calculate coverage. Note that - let (regions, chromsizes) = parse_regions(supregion, vec![bamifile1, bamifile2]); + // Parse regions & calculate coverage. Note that + let (regions, chromsizes) = parse_regions(supregion, vec![bamifile1, bamifile2]); let regionblocks = region_divider(®ions); // If there is a blacklist, read it. @@ -74,13 +73,14 @@ pub fn r_bamcompare( match isbed.as_str() { "gtf" => panic!("Error: Please provide a bed file for the blacklist."), "bed" => { - let (bls, _) = read_bedfile(&blacklist.to_string(), false, chromsizes.keys().collect()); + let (bls, _) = + read_bedfile(&blacklist.to_string(), false, chromsizes.keys().collect()); blacklistregions = Some(bls); - }, - _ => panic!("Error: Cannot determine filetype of blacklist file.") + } + _ => panic!("Error: Cannot determine filetype of blacklist file."), } } - // + // // Set alignment filters let mut filter1 = Alignmentfilters::new( blacklistregions, @@ -107,37 +107,51 @@ pub fn r_bamcompare( // We need a pass over the bamfile already to get the mean fragment length. filter1.set_extendreadslen(bamifile1, nproc, ®ions); if verbose { - println!("fragment length for read extension set as: {} for bamfile 1", filter1.extendreadslen); + println!( + "fragment length for read extension set as: {} for bamfile 1", + filter1.extendreadslen + ); } } if filter2.extendreads && filter2.extendreadslen == 0 && ispe2 { // We need a pass over the bamfile already to get the mean fragment length. filter2.set_extendreadslen(bamifile2, nproc, ®ions); if verbose { - println!("fragment length for read extension set as: {} for bamfile 2", filter2.extendreadslen); + println!( + "fragment length for read extension set as: {} for bamfile 2", + filter2.extendreadslen + ); } } let pool = ThreadPoolBuilder::new().num_threads(nproc).build().unwrap(); - + // Set up the bam files in a Vec. - let bamfiles: Vec<(&str, bool, &Alignmentfilters)> = vec![(bamifile1, ispe1, &filter1), (bamifile2, ispe2, &filter2)]; + let bamfiles: Vec<(&str, bool, &Alignmentfilters)> = + vec![(bamifile1, ispe1, &filter1), (bamifile2, ispe2, &filter2)]; let mut covcalcs: Vec = pool.install(|| { - bamfiles.par_iter() + bamfiles + .par_iter() .map(|(bamfile, ispe, alfilter)| { - let (bg, mapped, unmapped, readlen, fraglen) = regionblocks.par_iter() - .map(|i| bam_pileup(bamfile, &i, &binsize, &ispe, &ignorechr, alfilter , false, false, true)) + let (bg, mapped, unmapped, readlen, fraglen) = regionblocks + .par_iter() + .map(|i| { + bam_pileup( + bamfile, &i, &binsize, &ispe, &ignorechr, alfilter, false, false, true, + ) + }) .reduce( || (vec![], 0, 0, vec![], vec![]), - |(mut _bg, mut _mapped, mut _unmapped, mut _readlen, mut _fraglen), (bg, mapped, unmapped, readlen, fraglen)| { + |(mut _bg, mut _mapped, mut _unmapped, mut _readlen, mut _fraglen), + (bg, mapped, unmapped, readlen, fraglen)| { _bg.extend(bg); _readlen.extend(readlen); _fraglen.extend(fraglen); _mapped += mapped; _unmapped += unmapped; (_bg, _mapped, _unmapped, _readlen, _fraglen) - } + }, ); ParsedBamFile { bamfile: bamfile, @@ -146,25 +160,46 @@ pub fn r_bamcompare( mapped: mapped, unmapped: unmapped, readlen: median(readlen), - fraglen: median(fraglen) + fraglen: median(fraglen), } }) - .collect() + .collect() }); // Print out some stats if verbose if verbose { println!("bamfile\tPE\tmapped\tunmapped\tmed_readlen\tmed_fraglen"); - println!("{}\t{}\t{}\t{}\t{}\t{}", covcalcs[0].bamfile, covcalcs[0].ispe, covcalcs[0].mapped, covcalcs[0].unmapped, covcalcs[0].readlen, covcalcs[0].fraglen); - println!("{}\t{}\t{}\t{}\t{}\t{}", covcalcs[1].bamfile, covcalcs[1].ispe, covcalcs[1].mapped, covcalcs[1].unmapped, covcalcs[1].readlen, covcalcs[1].fraglen); + println!( + "{}\t{}\t{}\t{}\t{}\t{}", + covcalcs[0].bamfile, + covcalcs[0].ispe, + covcalcs[0].mapped, + covcalcs[0].unmapped, + covcalcs[0].readlen, + covcalcs[0].fraglen + ); + println!( + "{}\t{}\t{}\t{}\t{}\t{}", + covcalcs[1].bamfile, + covcalcs[1].ispe, + covcalcs[1].mapped, + covcalcs[1].unmapped, + covcalcs[1].readlen, + covcalcs[1].fraglen + ); } // Calculate scale factors. - + let mut sf = scale_factor_bamcompare( scalefactorsmethod, - covcalcs[0].mapped, covcalcs[1].mapped, - binsize, effective_genome_size, norm, - covcalcs[0].readlen, covcalcs[1].readlen, - covcalcs[0].fraglen, covcalcs[1].fraglen, + covcalcs[0].mapped, + covcalcs[1].mapped, + binsize, + effective_genome_size, + norm, + covcalcs[0].readlen, + covcalcs[1].readlen, + covcalcs[0].fraglen, + covcalcs[1].fraglen, ); if given_sf1 != 0.0 || given_sf2 != 0.0 { if verbose { @@ -174,33 +209,55 @@ pub fn r_bamcompare( } else if verbose { println!("scale factor1 = {}, scale factor2 = {}", sf.0, sf.1); } - + // Extract both vecs of TempPaths into a single vector let its = vec![ covcalcs[0].bg.drain(..).collect::>(), - covcalcs[1].bg.drain(..).collect::>() + covcalcs[1].bg.drain(..).collect::>(), ]; let its: Vec<_> = its.iter().map(|x| x.into_iter()).collect(); let zips = TempZip { iterators: its }; let zips_vec: Vec<_> = zips.collect(); if collapse { - let lines = zips_vec - .into_iter() - .flat_map(|c| { - let readers: Vec<_> = c.into_iter().map(|x| BufReader::new(File::open(x).unwrap()).lines()).collect(); - let temp_zip = TempZip { iterators: readers }; - temp_zip.into_iter().filter_map(|mut _l| { + let lines = zips_vec.into_iter().flat_map(|c| { + let readers: Vec<_> = c + .into_iter() + .map(|x| BufReader::new(File::open(x).unwrap()).lines()) + .collect(); + let temp_zip = TempZip { iterators: readers }; + temp_zip + .into_iter() + .filter_map(|mut _l| { let lines: Vec<_> = _l .iter_mut() .map(|x| x.as_mut().unwrap()) .map(|x| x.split('\t').collect()) - .map(|x: Vec<&str>| (x[0].to_string(), x[1].parse::().unwrap(), x[2].parse::().unwrap(), x[3].parse::().unwrap())) + .map(|x: Vec<&str>| { + ( + x[0].to_string(), + x[1].parse::().unwrap(), + x[2].parse::().unwrap(), + x[3].parse::().unwrap(), + ) + }) .collect(); assert_eq!(lines.len(), 2); - assert_eq!(lines[0].0, lines[1].0, "Error: Chromosome mismatch in bam files. {} != {}", lines[0].0, lines[1].0); - assert_eq!(lines[0].1, lines[1].1, "Error: Start position mismatch in bam files. {} != {}", lines[0].1, lines[1].1); - assert_eq!(lines[0].2, lines[1].2, "Error: End position mismatch in bam files. {} != {}", lines[0].2, lines[1].2); + assert_eq!( + lines[0].0, lines[1].0, + "Error: Chromosome mismatch in bam files. {} != {}", + lines[0].0, lines[1].0 + ); + assert_eq!( + lines[0].1, lines[1].1, + "Error: Start position mismatch in bam files. {} != {}", + lines[0].1, lines[1].1 + ); + assert_eq!( + lines[0].2, lines[1].2, + "Error: End position mismatch in bam files. {} != {}", + lines[0].2, lines[1].2 + ); // Calculate the coverage. if skip_zero_over_zero && lines[0].3 == 0.0 && lines[1].3 == 0.0 { return None; @@ -209,12 +266,35 @@ pub fn r_bamcompare( } else if skip_non_covered_regions && lines[1].3 == 0.0 { return None; } else { - let cov = calc_ratio(lines[0].3, lines[1].3, &sf.0, &sf.1, &pseudocount1, &pseudocount2, operation); - Some((lines[0].0.clone(), Value { start: lines[0].1, end: lines[0].2, value: cov })) + let cov = calc_ratio( + lines[0].3, + lines[1].3, + &sf.0, + &sf.1, + &pseudocount1, + &pseudocount2, + operation, + ); + Some(( + lines[0].0.clone(), + Value { + start: lines[0].1, + end: lines[0].2, + value: cov, + }, + )) } - }).coalesce(|p, c| { + }) + .coalesce(|p, c| { if p.1.value == c.1.value && p.0 == c.0 { - Ok((p.0, Value {start: p.1.start, end: c.1.end, value: p.1.value})) + Ok(( + p.0, + Value { + start: p.1.start, + end: c.1.end, + value: p.1.value, + }, + )) } else { Err((p, c)) } @@ -222,34 +302,69 @@ pub fn r_bamcompare( }); write_covfile(lines, ofile, ofiletype, chromsizes); } else { - let lines = zips_vec - .into_iter() - .flat_map(|c| { - let readers: Vec<_> = c.into_iter().map(|x| BufReader::new(File::open(x).unwrap()).lines()).collect(); - let temp_zip = TempZip { iterators: readers }; - temp_zip.into_iter().filter_map(|mut _l| { - let lines: Vec<_> = _l - .iter_mut() - .map(|x| x.as_mut().unwrap()) - .map(|x| x.split('\t').collect()) - .map(|x: Vec<&str>| (x[0].to_string(), x[1].parse::().unwrap(), x[2].parse::().unwrap(), x[3].parse::().unwrap())) - .collect(); - assert_eq!(lines.len(), 2); - assert_eq!(lines[0].0, lines[1].0, "Error: Chromosome mismatch in bam files. {} != {}", lines[0].0, lines[1].0); - assert_eq!(lines[0].1, lines[1].1, "Error: Start position mismatch in bam files. {} != {}", lines[0].1, lines[1].1); - assert_eq!(lines[0].2, lines[1].2, "Error: End position mismatch in bam files. {} != {}", lines[0].2, lines[1].2); - // Calculate the coverage. - if skip_zero_over_zero && lines[0].3 == 0.0 && lines[1].3 == 0.0 { - return None; - } else if skip_non_covered_regions && lines[0].3 == 0.0 { - return None; - } else if skip_non_covered_regions && lines[1].3 == 0.0 { - return None; - } else { - let cov = calc_ratio(lines[0].3, lines[1].3, &sf.0, &sf.1, &pseudocount1, &pseudocount2, operation); - Some((lines[0].0.clone(), Value { start: lines[0].1, end: lines[0].2, value: cov })) - } - }) + let lines = zips_vec.into_iter().flat_map(|c| { + let readers: Vec<_> = c + .into_iter() + .map(|x| BufReader::new(File::open(x).unwrap()).lines()) + .collect(); + let temp_zip = TempZip { iterators: readers }; + temp_zip.into_iter().filter_map(|mut _l| { + let lines: Vec<_> = _l + .iter_mut() + .map(|x| x.as_mut().unwrap()) + .map(|x| x.split('\t').collect()) + .map(|x: Vec<&str>| { + ( + x[0].to_string(), + x[1].parse::().unwrap(), + x[2].parse::().unwrap(), + x[3].parse::().unwrap(), + ) + }) + .collect(); + assert_eq!(lines.len(), 2); + assert_eq!( + lines[0].0, lines[1].0, + "Error: Chromosome mismatch in bam files. {} != {}", + lines[0].0, lines[1].0 + ); + assert_eq!( + lines[0].1, lines[1].1, + "Error: Start position mismatch in bam files. {} != {}", + lines[0].1, lines[1].1 + ); + assert_eq!( + lines[0].2, lines[1].2, + "Error: End position mismatch in bam files. {} != {}", + lines[0].2, lines[1].2 + ); + // Calculate the coverage. + if skip_zero_over_zero && lines[0].3 == 0.0 && lines[1].3 == 0.0 { + return None; + } else if skip_non_covered_regions && lines[0].3 == 0.0 { + return None; + } else if skip_non_covered_regions && lines[1].3 == 0.0 { + return None; + } else { + let cov = calc_ratio( + lines[0].3, + lines[1].3, + &sf.0, + &sf.1, + &pseudocount1, + &pseudocount2, + operation, + ); + Some(( + lines[0].0.clone(), + Value { + start: lines[0].1, + end: lines[0].2, + value: cov, + }, + )) + } + }) }); write_covfile(lines, ofile, ofiletype, chromsizes); } @@ -263,5 +378,5 @@ pub struct ParsedBamFile<'a> { pub mapped: u32, pub unmapped: u32, pub readlen: f32, - pub fraglen: f32 -} \ No newline at end of file + pub fraglen: f32, +} diff --git a/src/bamcoverage.rs b/src/bamcoverage.rs index 905641400d..2ca0e260d6 100644 --- a/src/bamcoverage.rs +++ b/src/bamcoverage.rs @@ -1,43 +1,43 @@ +use crate::calc::median; +use crate::covcalc::{bam_pileup, parse_regions, region_divider, Region}; +use crate::filehandler::{bam_ispaired, is_bed_or_gtf, read_bedfile, write_covfile}; +use crate::filtering::Alignmentfilters; +use crate::normalization::scale_factor; +use bigtools::Value; +use core::panic; use pyo3::prelude::*; use pyo3::types::PyList; use rayon::prelude::*; use rayon::ThreadPoolBuilder; -use core::panic; +use std::fs::File; use std::io::prelude::*; use std::io::BufReader; -use std::fs::File; -use bigtools::Value; -use crate::covcalc::{bam_pileup, parse_regions, region_divider, Region}; -use crate::filtering::Alignmentfilters; -use crate::filehandler::{bam_ispaired, write_covfile, is_bed_or_gtf, read_bedfile}; -use crate::normalization::scale_factor; -use crate::calc::median; - #[pyfunction] pub fn r_bamcoverage( + py: Python, // input and output - bamifile: &str, // input bamfile - ofile: &str, // output file + bamifile: &str, // input bamfile + ofile: &str, // output file ofiletype: &str, // output file type, bedgraph or bigwig // norm options - norm: &str, // normalization mode RPKM, CPM, BPM, RPGC - effectivegenomesize: u64, // default is 0, when not set. - scalefactor: f32, // default 1.0 + norm: &str, // normalization mode RPKM, CPM, BPM, RPGC + effectivegenomesize: u64, // default is 0, when not set. + scalefactor: f32, // default 1.0 // processing options mnase: bool, _offset: Py, // list of 2 [offset 5', offset 3'], if no offset is required we have [0, 0] - extendreads: bool, // true for extension of reads + extendreads: bool, // true for extension of reads extendreadslen: u32, // if extendreads is set, and SE, this length is used for extension. - centerreads: bool, // to center the reads or not. + centerreads: bool, // to center the reads or not. filterrnastrand: &str, // forward, reverse or 'None' - blacklist: &str, // path to blacklist filename, or 'None' + blacklist: &str, // path to blacklist filename, or 'None' _ignorechr: Py, // list of chromosomes to ignore. Is empty if none. skipnoncovregions: bool, _smoothlength: u32, // 0 = no smoothing, else it's a strictly larger then binsize binsize: u32, // filtering options - minmappingquality: u8, // + minmappingquality: u8, // samflaginclude: u16, samflagexclude: u16, mut minfraglen: u32, // default 0 -> no filter @@ -47,17 +47,19 @@ pub fn r_bamcoverage( verbose: bool, collapse: bool, ) -> PyResult<()> { - let mut offset: (i32, i32) = (0, 0); - let mut ignorechr: Vec = Vec::new(); - Python::with_gil(|py| { - let offsetv: Vec = _offset.extract(py).expect("Failed to retrieve offset."); - if offsetv.len() == 2 { - offset = (offsetv[0], offsetv[1]); - } else { - panic!("Error: Offset should be a list of 2. Received: {:?}", offsetv); - } - ignorechr = _ignorechr.extract(py).expect("Failed to retrieve ignorechr."); - }); + let offsetv: Vec = _offset.extract(py).expect("Failed to retrieve offset"); + + let offset = match offsetv.as_slice() { + [a, b] => (*a, *b), + _ => panic!( + "Error: Offset should be a list of 2. Received: {:?}", + offsetv + ), + }; + + let ignorechr: Vec = _ignorechr + .extract(py) + .expect("Failed to retrieve ignorechr"); let ispe = bam_ispaired(bamifile); // If mnase, library should be PE ! @@ -93,23 +95,32 @@ pub fn r_bamcoverage( if mnase { if minfraglen == 0 { minfraglen = 130; - } else if minfraglen != 130{ - println!("Note that MNase mode is set, but minfraglen is set at {}. Recommended is 130.", minfraglen); + } else if minfraglen != 130 { + println!( + "Note that MNase mode is set, but minfraglen is set at {}. Recommended is 130.", + minfraglen + ); } if maxfraglen == 0 { maxfraglen = 200; } else if maxfraglen != 200 { - println!("Note that MNase mode is set, but maxfraglen is set at {}. Recommended is 200.", maxfraglen); + println!( + "Note that MNase mode is set, but maxfraglen is set at {}. Recommended is 200.", + maxfraglen + ); } if binsize != 1 { - println!("Note that MNase mode is set, but binsize is set at {}. Recommended is 1.", binsize); + println!( + "Note that MNase mode is set, but binsize is set at {}. Recommended is 1.", + binsize + ); } } if verbose { println!("Sample: {} is-paired: {}", bamifile, ispe); } // Parse regions & calculate coverage - let (regions, chromsizes) = parse_regions(supregion, vec![bamifile]); + let (regions, chromsizes) = parse_regions(supregion, vec![bamifile]); let regionblocks = region_divider(®ions); // If there is a blacklist, read it. @@ -120,10 +131,11 @@ pub fn r_bamcoverage( match isbed.as_str() { "gtf" => panic!("Error: Please provide a bed file for the blacklist."), "bed" => { - let (bls, _) = read_bedfile(&blacklist.to_string(), false, chromsizes.keys().collect()); + let (bls, _) = + read_bedfile(&blacklist.to_string(), false, chromsizes.keys().collect()); backlistregions = Some(bls); - }, - _ => panic!("Error: Cannot determine filetype of blacklist file.") + } + _ => panic!("Error: Cannot determine filetype of blacklist file."), } } // Set alignment filters @@ -146,17 +158,26 @@ pub fn r_bamcoverage( // We need a pass over the bamfile already to get the mean fragment length. filters.set_extendreadslen(bamifile, nproc, ®ions); if verbose { - println!("fragment length for read extension set as: {}", filters.extendreadslen); + println!( + "fragment length for read extension set as: {}", + filters.extendreadslen + ); } } let pool = ThreadPoolBuilder::new().num_threads(nproc).build().unwrap(); let (bg, mapped, _unmapped, readlen, fraglen) = pool.install(|| { - regionblocks.par_iter() - .map(|i| bam_pileup(bamifile, &i, &binsize, &ispe, &ignorechr, &filters, collapse, false, true)) + regionblocks + .par_iter() + .map(|i| { + bam_pileup( + bamifile, &i, &binsize, &ispe, &ignorechr, &filters, collapse, false, true, + ) + }) .reduce( || (vec![], 0, 0, vec![], vec![]), - |(mut _bg, mut _mapped, mut _unmapped, mut _readlen, mut _fraglen), (bg, mapped, unmapped, readlen, fraglen)| { + |(mut _bg, mut _mapped, mut _unmapped, mut _readlen, mut _fraglen), + (bg, mapped, unmapped, readlen, fraglen)| { _bg.extend(bg); _readlen.extend(readlen); _fraglen.extend(fraglen); @@ -164,14 +185,17 @@ pub fn r_bamcoverage( _unmapped += unmapped; (_bg, _mapped, _unmapped, _readlen, _fraglen) - } + }, ) }); let mut readlen = median(readlen); if filters.extendreads { if verbose { - println!("extend reads option on, overriding readlen from {} to {}", readlen, filters.extendreadslen); + println!( + "extend reads option on, overriding readlen from {} to {}", + readlen, filters.extendreadslen + ); } readlen = filters.extendreadslen as f32; } @@ -183,39 +207,36 @@ pub fn r_bamcoverage( } let sf = scale_factor( - norm, + norm, mapped, binsize, effectivegenomesize, readlen, fraglen, scalefactor, - &verbose + &verbose, ); // Create output stream - let lines = bg.into_iter().flat_map( - |bg| { - let reader = BufReader::new(File::open(bg).unwrap()); - reader.lines().filter_map( - |l| { - let l = l.unwrap(); - let fields: Vec<&str> = l.split('\t').collect(); - if skipnoncovregions && fields[3] == "0" { - None - } else { - Some( - (fields[0].to_string(), Value { - start: fields[1].parse::().unwrap(), - end: fields[2].parse::().unwrap(), - value: (fields[3].parse::().unwrap() * sf * 100.0).round() / 100.0, - }) - ) - } - } - ) - } - ); + let lines = bg.into_iter().flat_map(|bg| { + let reader = BufReader::new(File::open(bg).unwrap()); + reader.lines().filter_map(|l| { + let l = l.unwrap(); + let fields: Vec<&str> = l.split('\t').collect(); + if skipnoncovregions && fields[3] == "0" { + None + } else { + Some(( + fields[0].to_string(), + Value { + start: fields[1].parse::().unwrap(), + end: fields[2].parse::().unwrap(), + value: (fields[3].parse::().unwrap() * sf * 100.0).round() / 100.0, + }, + )) + } + }) + }); if verbose { println!("Writing output to: {}", ofile); } diff --git a/src/computematrix.rs b/src/computematrix.rs index 587dc5e1be..fcba6c2d78 100644 --- a/src/computematrix.rs +++ b/src/computematrix.rs @@ -1,62 +1,78 @@ +use crate::calc::{max_float, mean_float, median_float, min_float, sum_float}; +use crate::covcalc::{Bin, Gtfparse, Region, Scalingregions}; +use crate::filehandler::{ + bwintervals, chrombounds_from_bw, header_matrix, is_bed_or_gtf, read_bedfile, read_gtffile, + write_matrix, +}; +use itertools::Itertools; use pyo3::prelude::*; use pyo3::types::PyList; -use crate::filehandler::{read_bedfile, read_gtffile, chrombounds_from_bw, bwintervals, header_matrix, write_matrix, is_bed_or_gtf}; use rayon::prelude::*; use rayon::ThreadPoolBuilder; use std::collections::HashMap; use std::path::Path; -use itertools::Itertools; -use crate::calc::{mean_float, median_float, max_float, min_float, sum_float}; -use crate::covcalc::{Region, Gtfparse, Scalingregions, Bin}; #[pyfunction] pub fn r_computematrix( - mode: &str, // reference-point or scale-regions - regionlis: Py, // python list of region files (bed or gtf) - bwlis: Py, // python list of bigwig files - sampleslabel: Py, // python list of sample labels, if empty, use bigwig file names. - upstream: u32, // upstream region to consider - downstream: u32, // downstream region to consider + py: Python, + mode: &str, // reference-point or scale-regions + regionlis: Py, // python list of region files (bed or gtf) + bwlis: Py, // python list of bigwig files + sampleslabel: Py, // python list of sample labels, if empty, use bigwig file names. + upstream: u32, // upstream region to consider + downstream: u32, // downstream region to consider unscaled5prime: u32, // unscaled region 5' of the anchorpoint, only used in scale-regions mode. unscaled3prime: u32, // unscaled region 3' of the anchorpoint, only used in scale-regions mode. regionbodylength: u32, // length of the region body (after scaling), only used in scale-regions mode. - binsize: u32, // binsize to use for the matrix + binsize: u32, // binsize to use for the matrix missingdatazero: bool, // Encode missing data as 0. Default is false (and will be encoded as NA). - metagene: bool, // If set, 'exons' are stitched together to form a metagene - txnid: &str, // transcript id to use when parsing GTF file - exonid: &str, // exon id to use when parsing GTF file + metagene: bool, // If set, 'exons' are stitched together to form a metagene + txnid: &str, // transcript id to use when parsing GTF file + exonid: &str, // exon id to use when parsing GTF file txniddesignator: &str, // designator to use when parsing GTF file - scale: f32, // scaling factor for writing out values. default is 1.0 (no scaling) - nanafterend: bool, // end regions will treated as nans. Default is false. - skipzeros: bool, // skip regions with all zeros. Default is false. - minthresh: f32, // minimum threshold to keep a region. If not set it will equal 0.0 - maxthresh: f32, // maximum threshold to keep a region. if not set it will equal 0.0 + scale: f32, // scaling factor for writing out values. default is 1.0 (no scaling) + nanafterend: bool, // end regions will treated as nans. Default is false. + skipzeros: bool, // skip regions with all zeros. Default is false. + minthresh: f32, // minimum threshold to keep a region. If not set it will equal 0.0 + maxthresh: f32, // maximum threshold to keep a region. if not set it will equal 0.0 averagetypebins: &str, // operation to summarize values over bins. Default is mean. sortregions: &str, // either ascend, descend or keep. Default is keep (and ignores sortusing). sortusing: &str, // metric to sort on. Either mean median max min sum region_length. Default is mean. sortusingsamples: Py, // list of samples to sort on. If empty, use all samples. referencepoint: &str, // reference point to use. Either TSS, TES or center. Default is TSS. Only used in reference-point mode. - nproc: usize, // number of threads. - verbose: bool, // verbose output. - ofile: &str // npz file to write to. + nproc: usize, // number of threads. + verbose: bool, // verbose output. + ofile: &str, // npz file to write to. ) -> PyResult<()> { // Extract the bed and bigwig files from pyList to Vec. - let mut region_files: Vec = Vec::new(); - let mut bw_files: Vec = Vec::new(); - let mut samples_label: Vec = Vec::new(); - let mut sort_using_samples: Vec = Vec::new(); - Python::with_gil(|py| { - region_files = regionlis.extract(py).expect("Failed to retrieve bed files."); - bw_files = bwlis.extract(py).expect("Failed to retrieve bigwig filess."); - samples_label = sampleslabel.extract(py).expect("Failed to retrieve samples label."); - sort_using_samples = sortusingsamples.extract(py).expect("Failed to retrieve the samples to sort on."); - }); + let region_files: Vec = regionlis + .extract(py) + .expect("Failed to retrieve bed files."); + + let bw_files: Vec = bwlis + .extract(py) + .expect("Failed to retrieve bigwig filess."); + + let mut samples_label: Vec = sampleslabel + .extract(py) + .expect("Failed to retrieve samples label."); + + let sort_using_samples: Vec = sortusingsamples + .extract(py) + .expect("Failed to retrieve the samples to sort on."); // Assert that samples_label equals bw_files, if samples_label is not empty. if !samples_label.is_empty() { - assert_eq!(samples_label.len(), bw_files.len(), "Number of samplelabels do not match number of bigwig files."); + assert_eq!( + samples_label.len(), + bw_files.len(), + "Number of samplelabels do not match number of bigwig files." + ); } // Assert that sort_using_samples is smaller or equal to bw_files. - assert!(sort_using_samples.len() <= bw_files.len(), "Number of samples to sort on is larger than number of bigwig files provided."); + assert!( + sort_using_samples.len() <= bw_files.len(), + "Number of samples to sort on is larger than number of bigwig files provided." + ); // Assert that no value in sort_using_samples is larger than bw_files. // Get chromosome boundaries from first bigwig file. let chromsizes = chrombounds_from_bw(&bw_files.get(0).unwrap()); @@ -106,7 +122,7 @@ pub fn r_computematrix( verbose: verbose, proc_number: nproc, regionlabels: regionlabels, - bwlabels: samples_label + bwlabels: samples_label, }; let gtfparse = Gtfparse { metagene: metagene, @@ -121,7 +137,7 @@ pub fn r_computematrix( println!("Sort using samples: {:?}", &sort_using_samples); } let pool = ThreadPoolBuilder::new().num_threads(nproc).build().unwrap(); - + // Parse regions from bed files. Note that we retain the name of the bed file (in case there are more then 1) // Additionaly, score and strand are also retained, if it's a 3-column bed file we just fill in '.' let mut regions: Vec = Vec::new(); @@ -129,7 +145,7 @@ pub fn r_computematrix( region_files.iter() .map(|r| { let ftype = is_bed_or_gtf(r); - + match ftype.as_str() { "gtf" => read_gtffile(r, >fparse, chromsizes.keys().collect()), "bed" => read_bedfile(r, metagene, chromsizes.keys().collect()), @@ -142,7 +158,8 @@ pub fn r_computematrix( }); // Define slop regions, which contain the actual 'bins' to query the bigwig files. let slopregions = pool.install(|| { - regions.par_iter() + regions + .par_iter() .map(|region| slop_region(®ion, &scale_regions, &chromsizes)) .collect::>() }); @@ -150,7 +167,8 @@ pub fn r_computematrix( // Discriminate between reference-point and scale-regions mode. let matrix: Vec> = pool.install(|| { - bw_files.par_iter() + bw_files + .par_iter() .map(|i| bwintervals(&i, ®ions, &slopregions, &scale_regions)) .reduce( || vec![vec![]; regions.len()], @@ -167,11 +185,11 @@ pub fn r_computematrix( sortusing, sort_using_samples, regions, - matrix, + matrix, scale_regions, regionsizes, ofile, - verbose + verbose, ); Ok(()) @@ -180,15 +198,15 @@ pub fn r_computematrix( fn slop_region( region: &Region, scale_regions: &Scalingregions, - chromsizes: &HashMap + chromsizes: &HashMap, ) -> Vec { // Idea is to create a vector Bins (Conbin or Catbin) which encodes start and end of every bin (binsize passed by computeMatrix). // Catbin takes care of the situation where one needs metagenes, and thus multiple start/end per bin are possible. // The number of columns is predetermined - // Note that the before / after could mean that we run out of chromosome. + // Note that the before / after could mean that we run out of chromosome. // Invalid regions (later to be encoded as NA or 0), will be pushed as (0,0) tuples. // Note that if nan_after_end is set to true, we will push (0,0) tuples after the end of the region. - + // Get the chromosome end for a specific region, and assert that the region stays within the chromosome boundary. // Note that only a right check is needed, as positions are u32. // Note that we know ®ion.chrom is inside chromsizes already, since this filtering is done at the region reading stage. @@ -208,13 +226,16 @@ fn matrix_dump( scale_regions: Scalingregions, regionsizes: HashMap, ofile: &str, - verbose: bool + verbose: bool, ) { // Takes a pre-computed matrix, resorts it if requested, and writes it to file. // Resort the matrix, if this is requested. if sortregions != "keep" { if verbose { - println!("Sorting output matrix with settings: sortRegions: {}, sortUsing {}", sortregions, sortusing); + println!( + "Sorting output matrix with settings: sortRegions: {}, sortUsing {}", + sortregions, sortusing + ); } // If sortusingsamples is set, we need a vector to subset the columns of interest let mut cols_of_interest: Vec = Vec::new(); @@ -306,34 +327,32 @@ fn matrix_dump( } }) .collect(); - } + } // assert sorted ix length == matrix length == regions length assert_eq!( sortedix.len(), matrix.len(), - "Length of sorted indices does not match matrix length: {} != {}", sortedix.len(), matrix.len() + "Length of sorted indices does not match matrix length: {} != {}", + sortedix.len(), + matrix.len() ); assert_eq!( sortedix.len(), regions.len(), - "Length of sorted indices does not match regions length: {} ! = {}", sortedix.len(), regions.len() + "Length of sorted indices does not match regions length: {} ! = {}", + sortedix.len(), + regions.len() ); // Reorder matrix & regions - let sortedmatrix = sortedix - .iter() - .map(|ix| matrix[*ix].clone()) - .collect(); - let sortedregions = sortedix - .into_iter() - .map(|ix| regions[ix].clone()) - .collect(); + let sortedmatrix = sortedix.iter().map(|ix| matrix[*ix].clone()).collect(); + let sortedregions = sortedix.into_iter().map(|ix| regions[ix].clone()).collect(); write_matrix( header_matrix(&scale_regions, regionsizes), sortedmatrix, ofile, sortedregions, - &scale_regions + &scale_regions, ); } else { write_matrix( @@ -341,7 +360,7 @@ fn matrix_dump( matrix, ofile, regions, - &scale_regions + &scale_regions, ); } -} \ No newline at end of file +} diff --git a/src/lib.rs b/src/lib.rs index 47b39334a3..9a37b0398e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,7 @@ use pyo3::prelude::*; mod alignmentsieve; -mod bamcoverage; mod bamcompare; +mod bamcoverage; mod calc; mod computematrix; mod covcalc; @@ -13,7 +13,7 @@ mod normalization; mod tests; #[pymodule] -fn hp(m: &Bound<'_, PyModule>) -> PyResult<()> { +fn hp(_py: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> { m.add_function(wrap_pyfunction!(bamcoverage::r_bamcoverage, m)?)?; m.add_function(wrap_pyfunction!(bamcompare::r_bamcompare, m)?)?; m.add_function(wrap_pyfunction!(computematrix::r_computematrix, m)?)?; diff --git a/src/multibamsummary.rs b/src/multibamsummary.rs index 8cbec0e616..ef05c04e99 100644 --- a/src/multibamsummary.rs +++ b/src/multibamsummary.rs @@ -1,22 +1,25 @@ +use crate::calc::deseq_scalefactors; +use crate::covcalc::{bam_pileup, parse_regions, region_divider, TempZip}; +use crate::covcalc::{Gtfparse, Region}; +use crate::filehandler::{ + bam_ispaired, chrombounds_from_bam, is_bed_or_gtf, read_bedfile, read_gtffile, +}; +use crate::filtering::Alignmentfilters; +use itertools::multiunzip; +use ndarray::Array2; +use ndarray_npy::NpzWriter; use pyo3::prelude::*; use pyo3::types::PyList; use rayon::prelude::*; use rayon::ThreadPoolBuilder; -use itertools::multiunzip; +use std::collections::HashMap; +use std::fs::File; use std::io::prelude::*; use std::io::{BufReader, BufWriter}; -use std::fs::File; -use ndarray::Array2; -use ndarray_npy::NpzWriter; -use std::collections::HashMap; -use crate::covcalc::{bam_pileup, parse_regions, TempZip, region_divider}; -use crate::filtering::Alignmentfilters; -use crate::filehandler::{bam_ispaired, read_bedfile, read_gtffile, chrombounds_from_bam, is_bed_or_gtf}; -use crate::calc::deseq_scalefactors; -use crate::covcalc::{Region, Gtfparse}; #[pyfunction] pub fn r_mbams( + py: Python, // required parameters mode: &str, // either bins or BED-file bam_files: Py, @@ -36,25 +39,25 @@ pub fn r_mbams( extendreads: bool, extendreadslen: u32, centerreads: bool, - samflaginclude: u16, // sam flag include - samflagexclude: u16, // sam flag exclude - minfraglen: u32, // minimum fragment length. - maxfraglen: u32, // maximum fragment length. + samflaginclude: u16, // sam flag include + samflagexclude: u16, // sam flag exclude + minfraglen: u32, // minimum fragment length. + maxfraglen: u32, // maximum fragment length. minmappingquality: u8, // minimum mapping quality. - metagene: bool, // metagene mode or not. - txnid: &str, // transcript id to use when parsing GTF file. - exonid: &str, // exon id to use when parsing GTF file. + metagene: bool, // metagene mode or not. + txnid: &str, // transcript id to use when parsing GTF file. + exonid: &str, // exon id to use when parsing GTF file. txniddesignator: &str, // designator to use when parsing GTF file. ) -> PyResult<()> { - let mut bamfiles: Vec = Vec::new(); - let mut bamlabels: Vec = Vec::new(); - let mut bedfiles: Vec = Vec::new(); + let bamfiles: Vec = bam_files + .extract(py) + .expect("Failed to retrieve bam files."); + + let bamlabels: Vec = labels.extract(py).expect("Failed to retrieve labels."); + + let bedfiles: Vec = bed_file.extract(py).expect("Failed to retrieve bedfiles."); + let ignorechr: Vec = Vec::new(); - Python::with_gil(|py| { - bamfiles = bam_files.extract(py).expect("Failed to retrieve bam files."); - bamlabels = labels.extract(py).expect("Failed to retrieve labels."); - bedfiles = bed_file.extract(py).expect("Failed to retrieve bedfiles."); - }); let max_len = bamlabels.iter().map(|s| s.len()).max().unwrap_or(0); let bamlabels_arr: Array2 = Array2::from_shape_fn((bamlabels.len(), max_len), |(i, j)| { @@ -62,9 +65,7 @@ pub fn r_mbams( }); // Get paired-end information - let ispe = bamfiles.iter() - .map(|x| bam_ispaired(x)) - .collect::>(); + let ispe = bamfiles.iter().map(|x| bam_ispaired(x)).collect::>(); // zip through ispe and bamfiles if verbose { @@ -72,8 +73,7 @@ pub fn r_mbams( println!("Sample: {} is-paired: {}", _bf, _ispe); } } - - + let mut regions: Vec = Vec::new(); let mut gene_mode = false; let mut blacklistregions: Option> = None; @@ -100,7 +100,7 @@ pub fn r_mbams( bedfiles.iter() .map(|r| { let ftype = is_bed_or_gtf(r); - + match ftype.as_str() { "gtf" => read_gtffile(r, >fparse, chromsizes.keys().collect()), "bed" => read_bedfile(r, metagene, chromsizes.keys().collect()), @@ -120,17 +120,22 @@ pub fn r_mbams( match isbed.as_str() { "gtf" => panic!("Error: Please provide a bed file for the blacklist."), "bed" => { - let (bls, _) = read_bedfile(&blacklist.to_string(), false, chromsizes.keys().collect()); + let (bls, _) = + read_bedfile(&blacklist.to_string(), false, chromsizes.keys().collect()); blacklistregions = Some(bls); - }, - _ => panic!("Error: Cannot determine filetype of blacklist file.") + } + _ => panic!("Error: Cannot determine filetype of blacklist file."), } } } else { if verbose { - println!("BINS mode. with binsize: {}, distance between bins: {}", binsize, distance_between_bins); + println!( + "BINS mode. with binsize: {}, distance between bins: {}", + binsize, distance_between_bins + ); } - let (parsedregions, chromsizes) = parse_regions(supregion, bamfiles.iter().map(|x| x.as_str()).collect()); + let (parsedregions, chromsizes) = + parse_regions(supregion, bamfiles.iter().map(|x| x.as_str()).collect()); regions = parsedregions; // If there is a blacklist, read it. if blacklist != "None" { @@ -139,10 +144,11 @@ pub fn r_mbams( match isbed.as_str() { "gtf" => panic!("Error: Please provide a bed file for the blacklist."), "bed" => { - let (bls, _) = read_bedfile(&blacklist.to_string(), false, chromsizes.keys().collect()); + let (bls, _) = + read_bedfile(&blacklist.to_string(), false, chromsizes.keys().collect()); blacklistregions = Some(bls); - }, - _ => panic!("Error: Cannot determine filetype of blacklist file.") + } + _ => panic!("Error: Cannot determine filetype of blacklist file."), } } } @@ -162,8 +168,8 @@ pub fn r_mbams( Some(centerreads), ); - let pool = ThreadPoolBuilder::new().num_threads(nproc).build().unwrap(); - + let pool = ThreadPoolBuilder::new().num_threads(nproc).build().unwrap(); + // Zip together bamfiles and ispe into a vec of tuples. let bampfiles: Vec<_> = bamfiles.into_iter().zip(ispe.into_iter()).collect(); let bam_ispe_filter: Vec<(String, bool, Alignmentfilters)> = bampfiles.into_iter() @@ -176,7 +182,7 @@ pub fn r_mbams( panic!("Error: No fragment length found for read extension. Please provide a valid fragment length."); } if verbose { - println!("fragment length for read extension set as: {} for {}", filter.extendreadslen, bamfile); + println!("fragment length for read extension set as: {} for {}", filter.extendreadslen, bamfile.to_string()); } } (bamfile, ispe, filter) @@ -184,39 +190,50 @@ pub fn r_mbams( .collect(); // Divide up the regions into regionBlocks let regionblocks = region_divider(®ions); - + assert!(regionblocks.len() > 0, "No regions to process. Exiting."); if verbose { - println!("Regions divided into {} parallel blocks", regionblocks.len()); + println!( + "Regions divided into {} parallel blocks", + regionblocks.len() + ); println!("Start coverage calculation"); } let covcalcs: Vec<_> = pool.install(|| { - bam_ispe_filter.par_iter() + bam_ispe_filter + .par_iter() .map(|(bamfile, ispe, filter)| { - let (bg, _mapped, _unmapped, _readlen, _fraglen) = regionblocks.par_iter() - .map(|i| bam_pileup(bamfile, &i, &binsize, &ispe, &ignorechr, filter, false, gene_mode, false)) + let (bg, _mapped, _unmapped, _readlen, _fraglen) = regionblocks + .par_iter() + .map(|i| { + bam_pileup( + bamfile, &i, &binsize, &ispe, &ignorechr, filter, false, gene_mode, + false, + ) + }) .reduce( || (vec![], 0, 0, vec![], vec![]), - |(mut _bg, mut _mapped, mut _unmapped, mut _readlen, mut _fraglen), (bg, mapped, unmapped, readlen, fraglen)| { + |(mut _bg, mut _mapped, mut _unmapped, mut _readlen, mut _fraglen), + (bg, mapped, unmapped, readlen, fraglen)| { _bg.extend(bg); _readlen.extend(readlen); _fraglen.extend(fraglen); _mapped += mapped; _unmapped += unmapped; (_bg, _mapped, _unmapped, _readlen, _fraglen) - } + }, ); bg }) - .collect() + .collect() }); if verbose { println!("Coverage calculation done"); println!("Define output file"); } - - // Collate the coverage files into a matrix. + + // Collate the coverage files into a matrix. let its: Vec<_> = covcalcs.iter().map(|x| x.into_iter()).collect(); let zips = TempZip { iterators: its }; if verbose { @@ -229,7 +246,10 @@ pub fn r_mbams( let _m: Vec<_> = zips_vec .par_iter() .flat_map(|c| { - let readers: Vec<_> = c.par_iter().map(|x| BufReader::new(File::open(x).unwrap()).lines()).collect(); + let readers: Vec<_> = c + .par_iter() + .map(|x| BufReader::new(File::open(x).unwrap()).lines()) + .collect(); let mut _matvec: Vec> = Vec::new(); let mut _regions: Vec<(String, String, String)> = Vec::new(); for mut _l in (TempZip { iterators: readers }) { @@ -238,13 +258,21 @@ pub fn r_mbams( .par_iter_mut() .map(|x| x.as_mut().unwrap()) .map(|x| x.split('\t').collect()) - .map(|x: Vec<&str> | ( x[0].to_string(), x[1].to_string(), x[2].to_string(), x[3].parse::().unwrap() ) ) + .map(|x: Vec<&str>| { + ( + x[0].to_string(), + x[1].to_string(), + x[2].to_string(), + x[3].parse::().unwrap(), + ) + }) .collect(); let counts = lines .par_iter() .map(|x| (x.3 * 100.0).round() / 100.0) .collect::>(); - let regions: (String, String, String) = (lines[0].0.clone(), lines[0].1.clone(), lines[0].2.clone()); + let regions: (String, String, String) = + (lines[0].0.clone(), lines[0].1.clone(), lines[0].2.clone()); _matvec.push(counts); _regions.push(regions); } @@ -272,7 +300,9 @@ pub fn r_mbams( } writeln!(cfile, "{}", headstr).unwrap(); let outlines: Vec = pool.install(|| { - regions.par_iter().zip(matvec.par_iter()) + regions + .par_iter() + .zip(matvec.par_iter()) .map(|(region, counts)| { let mut outstr = String::new(); outstr.push_str(&format!("{}\t{}\t{}", region.0, region.1, region.2)); @@ -290,9 +320,11 @@ pub fn r_mbams( // Create 2darray from matvec let matarr: Array2 = Array2::from_shape_vec( - (matvec.len(), matvec[0].len()), matvec.into_iter().flatten().collect() - ).unwrap(); - + (matvec.len(), matvec[0].len()), + matvec.into_iter().flatten().collect(), + ) + .unwrap(); + // If scalefactors are required, calc and save them now. if scaling_factors != "None" { if verbose { @@ -318,4 +350,4 @@ pub fn r_mbams( println!("Matrix written."); } Ok(()) -} \ No newline at end of file +} From c85d26af0148a1f7ab181016aff2021b2edc0310 Mon Sep 17 00:00:00 2001 From: WardDeb Date: Tue, 23 Jun 2026 09:00:16 +0200 Subject: [PATCH 02/10] add actions to editable pixi run --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 9a6fddf68f..e6135bf295 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -104,6 +104,6 @@ clangdev = "<22" htslib = "<=1.19" zlib = "*" [tool.pixi.pypi-dependencies] -deeptools = { path = ".", editable = true } +deeptools = { path = ".", editable = true, extras = ['actions'] } [tool.pixi.activation.env] LIBCLANG_PATH = "$CONDA_PREFIX/lib" From 21559501a06a6830f779a753a40c5b0197aa13f5 Mon Sep 17 00:00:00 2001 From: WardDeb Date: Tue, 23 Jun 2026 09:00:25 +0200 Subject: [PATCH 03/10] fix tests --- pixi.lock | 1778 +++++++++++++++++ pydeeptools/deeptools/bamPEFragmentSize.py | 528 +++-- pydeeptools/deeptools/bigwigAverage.py | 108 +- pydeeptools/deeptools/computeMatrix2.py | 697 ++++--- pydeeptools/deeptools/multiBamSummary2.py | 327 +-- pydeeptools/deeptools/multiBigwigSummary.py | 323 +-- .../deeptools/test/test_bamPEFragmentSize.py | 41 +- .../bamPEFragmentSize_histogram_result1.png | Bin 14756 -> 18288 bytes .../plotCoverage_default.png | Bin 81892 -> 93012 bytes .../plotEnrichment_defaults.png | Bin 37537 -> 56069 bytes .../test_plotHeatmap/plotHeatmap_default.png | Bin 55257 -> 53038 bytes .../test_plotProfile/plotProfile_default.png | Bin 37052 -> 36166 bytes 12 files changed, 2943 insertions(+), 859 deletions(-) diff --git a/pixi.lock b/pixi.lock index 4147b0b826..e5f37ef660 100644 --- a/pixi.lock +++ b/pixi.lock @@ -74,50 +74,146 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - pypi: . + - pypi: https://files.pythonhosted.org/packages/00/01/4001033457f25ecdc2b1ffd513ca0b76200b9ea009dd64f6c1aad2dde133/boltons-26.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/08/f6/af32e23e563971ffb0fb86be52bc5be5c2c118858ffc119bf6a9039b173d/lxml-6.1.1-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/c2/6604a71269e0c1bd75656d5a001432d16f2cc5b8c057140ec797155c295e/rdflib-7.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/37/a065dc3bd6e49423a6532c642ca7378d3f467b1ef44c2800c937af7f9739/filelock-3.29.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/15/5574111ae50dd6e879456888c0eadd4c5a869959775854e18e18a6b345f3/propcache-0.5.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/15/1c/991e414e4305e5aef60c8ebb51f35a2e1b12cf80b9fc41733bbdd070c037/galaxy_tool_util-26.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/3e/4253fa84dd1947207033df2fecd52781e7e2f6d65c4360f38d739bb3c8c9/galaxy_util-26.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/82/a70006589557f267f15bd384c0642ad49f0d97b690c3a05b166b9dcbad3b/python_discovery-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/bd/9c0d5d6983905ce2c9edaa073a7e89355a9cf7f396988e05d32f1c37785d/maturin-1.14.1-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/20/9c/d445818389df371f56d141d881153ba23183c4735a03f7356ffb43f7757d/aiohttp-3.14.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/7f/a946aa4f8752b37102b41e64dca18a1976ac705c3a0d1dfe74d820a02552/mistune-3.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/02/3623e6169bed617ed1e2d372f7c69f92ec28d54c4dfc997055c8578ec148/virtualenv-21.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/8e/b94ec25fcd4384de2a1f5e0403284f005ec743c04bafdb6698c851df5c6d/tuspy-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/aa/111610d8bf5b1bb7a295a048fc648cec346347a8b0be5881defd2d1b4a52/oyaml-1.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3c/6b/72e5f22f3c5069bd950f107110cd17468cdb43abda3c55b48c4013e7b667/bioblend-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3d/6f/221654a39431edc7e9685702ab06fbb22bb313629e0187c0ed4462ba8af7/schema_salad-8.9.20260417192335-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/53/78/ddd0affa881b1e09bc59f11ab829a7904f4bca29d25c34cbb9395e8e0061/allure_python_commons-2.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/0f/e7f1ff3a1cabc6c4486a7ee1b0506aedf2f5f8329760ac1f4e8032feef2b/pysam-0.24.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/58/9d/40b6267367182187139a4000b82a3b287d84d745bccd808e75d916920e9d/bleach-6.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5b/67/314f6151bad77a93d751978a344033e1fc890822f05f0416079338e34231/nh3-0.3.6-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5f/fc/a7bf5b6e4e617b45f90f2d9d2a68519c249c81dd4fc2658c7a2a61c4f4b7/aiohappyeyeballs-2.6.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6a/fd/6adabd4f6d5e686f97dd02ce7fce3fe4cf672cbac36b8f67ff4040e8ad8b/msgpack-1.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6b/67/6ea73b2173bcb1abe3a947fbd090cf96ee1b0a75f3f690e8902dc8ffdbfa/py2bit-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6b/b2/d17b2722c636d64b4e77ddc68d8d0625719d39f94021be8719a218af4c0a/backports_zstd-1.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6c/c2/63fdda36c56437eeb44aaf9493c8bcd62ce230ab1598924fc626ffbfa943/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/74/f5/9373290775639cb67a2fce7f629a1c240dce9f12fe927bc32b2736e16dfc/argcomplete-3.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/c7/2342da9830e3e9d4870305ca5d2091d2a83284f2953079b7bdd3b5e029d8/fonttools-4.63.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7a/da/323a01c349bd5fb01bb6652e314d9bb218cee630a736bdb810ad50e4013f/yarl-1.24.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/7a/f6/51d8a97116de23c9280c1fa3b813bc088f8571ce5936ba84af1ecf13ed45/pybigwig-0.3.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/32/a7125fb28c4261a627f999d5fb4afff25b523800faed2c30979949d6facd/pydot-4.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/59/208f71d70ddc6184f79b8c6d87d46eb7d7b12c19186a817dec9c9c3f3693/tifffile-2026.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/f3/d7b4c8c9b6657ff0db27b739894ed0665fa8f3c78a7452bf74d6447f6865/zipstream_new-1.1.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/0c/b3288ee003c344356cd505ba8d85286e8f0d4d4177a13d8eed7db6e7c688/planemo-0.75.44-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8e/b4/23f8462c72e514563f5fd949e38a9e45bcc86fb59bf4b88240ba0ef02026/cwl_utils-0.42-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/fb/2c4c618185be2bda327f9dacd16b3122cc938809f19df7be840595d0e584/prov-1.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/92/7a/8017d45e513c720ee82bf062b1be3ae39087db3024571b4a00773e17c235/galaxy_job_config_init-0.1.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/95/7f522393c88313336b20d70fc849555757b2e5febc22b83b3a3f0fd4bce9/matplotlib-3.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/96/9a/982e48afcffcd727a9144506720ffd4224b6b7e355c98641866f38b7c043/jaraco_functools-4.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/1b/295bf2fa3e740131778065e5ffa2c481f0e7210182d408e9a2c244ff5b0c/readme_renderer-45.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/70/875f4a23bfc4731703a5835487d0d2fb999031bd415e7d17c0ae615c18b7/pathvalidate-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/e9/1a19e42cd43cc1365e127db6aae85e1c671da1d9a5d746f4d34a50edb577/h5py-3.16.0-cp312-cp312-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9f/27/3c3e5398fa49227b2dd67211b4402c84ed9d5b48a4257bf5b1196f9b6a8e/ct3-3.4.0.post5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/1f/d10d6ad23c86c62d90d867d0506881a392ec6ef06885b858eaab868dd356/deeptoolsintervals-0.1.9.tar.gz + - pypi: https://files.pythonhosted.org/packages/ac/3e/61d11b779e4e83ee8661439af070f6f138060cd41f0346a0a70432f9e55c/cwl_upgrader-1.2.15-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b4/97/0535f7d3f45d3853f79a11988d8faf798de684d902579126449455506e2f/ephemeris-0.10.11-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/0c/51f6841f1d84f404f92463fc2b1ba0da357ca1e3db6b7fbda26956c3b82a/ruamel_yaml-0.19.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/6b/f4a3d0637692c49da8ef99d72d52526f92e0a8d6ac4f0ca9f31441b9d9ea/numpy-2.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/2f/7229e91cfa37459622808002bec6eb019c7189bfc59788b3eaba5f273671/conda_package_streaming-0.13.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d4/74/3d6534c6ce0802bf085a32908b093e6a4123443050299bcc6e3828a9bf3e/cwltool-3.2.20260413085819-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/a5/bbbc3b74a94fbdbd7915e7ad030f16539bfdc1362f7e9003b594f0537950/glob2-0.7.tar.gz + - pypi: https://files.pythonhosted.org/packages/d9/b0/1e05aa4e0124cbc6509641353f513fc29c2b5e5197dbd5dfade810a521cf/galaxy_tool_util_models-26.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/aa/1b939f6c67ed68635bb538e6752d3dacc02f66535182e939a89581a44e9c/scipy-1.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/78/47a205b5921bd86ef8d174fcda3daf23d65ad2887b38771935a064acd348/gxformat2-0.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e8/3d/1087453384dbde46a8c7f9356eead2c58be8a7bf156bca40243377c85715/more_itertools-11.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/17/d9ad109c8d7f05e6e78a79c4ec410ad3d38877b3efe18896eae6c446b534/edam_ontology-1.25.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/79/c45f2d53efe6ada1110cf6f9fca095e4ff47a0454444aefdde6ac4789179/cachecontrol-0.14.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/58/bc8954bda5fcda97bd7c19be11b85f91973d67a706ed4a3aec33e7de22db/jaraco_context-6.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/8d/5e5be3ced1d12966fefb5c4ea3b2a5b480afcea36406559442c6e31d4a48/multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/38/8b6fc7a8153cb49eb3a9a13acfa9eeb6cc476e37888781e593e6f02ac05e/spython-0.3.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl osx-64: - conda: https://conda.anaconda.org/bioconda/osx-64/htslib-1.10-h9f635df_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda @@ -166,50 +262,144 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.2-hbb4bfdb_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - pypi: . + - pypi: https://files.pythonhosted.org/packages/00/01/4001033457f25ecdc2b1ffd513ca0b76200b9ea009dd64f6c1aad2dde133/boltons-26.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/c2/6604a71269e0c1bd75656d5a001432d16f2cc5b8c057140ec797155c295e/rdflib-7.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/37/a065dc3bd6e49423a6532c642ca7378d3f467b1ef44c2800c937af7f9739/filelock-3.29.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/27/cc422d11961a00bd04aa9a8d9a63683a1083fe2e6a491c285a94998d6751/pysam-0.24.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/15/1c/991e414e4305e5aef60c8ebb51f35a2e1b12cf80b9fc41733bbdd070c037/galaxy_tool_util-26.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/3e/4253fa84dd1947207033df2fecd52781e7e2f6d65c4360f38d739bb3c8c9/galaxy_util-26.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/82/a70006589557f267f15bd384c0642ad49f0d97b690c3a05b166b9dcbad3b/python_discovery-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/bb/009af3a9532d4cc66d5385391c512210fae32ab2442605f26aca1d8d2957/backports_zstd-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/22/00/ff3009c88e65de8011630acf8ab5a09cb2becd2aaf47fba2f3449f6224e9/lxml-6.1.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/7f/a946aa4f8752b37102b41e64dca18a1976ac705c3a0d1dfe74d820a02552/mistune-3.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/02/3623e6169bed617ed1e2d372f7c69f92ec28d54c4dfc997055c8578ec148/virtualenv-21.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/8e/b94ec25fcd4384de2a1f5e0403284f005ec743c04bafdb6698c851df5c6d/tuspy-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/aa/111610d8bf5b1bb7a295a048fc648cec346347a8b0be5881defd2d1b4a52/oyaml-1.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/6b/72e5f22f3c5069bd950f107110cd17468cdb43abda3c55b48c4013e7b667/bioblend-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3d/6f/221654a39431edc7e9685702ab06fbb22bb313629e0187c0ed4462ba8af7/schema_salad-8.9.20260417192335-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/44/a0/c815bea63117fa63e4e1c01f8a1110d2112fa003f838e6467094ec2432ce/fonttools-4.63.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/46/3b/9dedd2e35cebcd4eb3539514b5ac674fd45654404839e6f9eff6e25d67c7/py2bit-1.0.1.tar.gz - pypi: https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/53/78/ddd0affa881b1e09bc59f11ab829a7904f4bca29d25c34cbb9395e8e0061/allure_python_commons-2.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/58/9d/40b6267367182187139a4000b82a3b287d84d745bccd808e75d916920e9d/bleach-6.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/58/be/7482c8a5ebebbc6470b3eb791812fff7d5e0216c2be3827b30b8bb6603ed/pillow-12.2.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/fc/a7bf5b6e4e617b45f90f2d9d2a68519c249c81dd4fc2658c7a2a61c4f4b7/aiohappyeyeballs-2.6.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/19/ca10ead60b0acc80b2b833c2c4a4f2ff753d0f58b811f70d911c7e94a25c/scipy-1.18.0-cp312-cp312-macosx_10_15_x86_64.whl - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/74/f5/9373290775639cb67a2fce7f629a1c240dce9f12fe927bc32b2736e16dfc/argcomplete-3.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/32/a7125fb28c4261a627f999d5fb4afff25b523800faed2c30979949d6facd/pydot-4.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/59/208f71d70ddc6184f79b8c6d87d46eb7d7b12c19186a817dec9c9c3f3693/tifffile-2026.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/f3/d7b4c8c9b6657ff0db27b739894ed0665fa8f3c78a7452bf74d6447f6865/zipstream_new-1.1.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/0c/b3288ee003c344356cd505ba8d85286e8f0d4d4177a13d8eed7db6e7c688/planemo-0.75.44-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/b4/23f8462c72e514563f5fd949e38a9e45bcc86fb59bf4b88240ba0ef02026/cwl_utils-0.42-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/fb/2c4c618185be2bda327f9dacd16b3122cc938809f19df7be840595d0e584/prov-1.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/92/7a/8017d45e513c720ee82bf062b1be3ae39087db3024571b4a00773e17c235/galaxy_job_config_init-0.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/9a/982e48afcffcd727a9144506720ffd4224b6b7e355c98641866f38b7c043/jaraco_functools-4.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/c2/2a1605af41829cd2a247271b5b6f6b2dbc2e9407df2dd9bcafdceafcd4b3/ct3-3.4.0.post5.tar.gz + - pypi: https://files.pythonhosted.org/packages/97/1b/295bf2fa3e740131778065e5ffa2c481f0e7210182d408e9a2c244ff5b0c/readme_renderer-45.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/70/875f4a23bfc4731703a5835487d0d2fb999031bd415e7d17c0ae615c18b7/pathvalidate-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/1f/d10d6ad23c86c62d90d867d0506881a392ec6ef06885b858eaab868dd356/deeptoolsintervals-0.1.9.tar.gz - pypi: https://files.pythonhosted.org/packages/ac/20/75f915ff375d6249e6550ac740fdbbd66159a068fd3af1400ff62036b07a/scikit_learn-1.9.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ac/3e/61d11b779e4e83ee8661439af070f6f138060cd41f0346a0a70432f9e55c/cwl_upgrader-1.2.15-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b4/97/0535f7d3f45d3853f79a11988d8faf798de684d902579126449455506e2f/ephemeris-0.10.11-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/0c/51f6841f1d84f404f92463fc2b1ba0da357ca1e3db6b7fbda26956c3b82a/ruamel_yaml-0.19.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/dd/9e8cbd8f5582ca4b590336f2b91ee5662f6a6ca562b565abaf696a0f81ff/msgpack-1.2.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bf/1d/fcefb70922ea2268a8971d8e5874d9a8218644200fb8465f1dcad55e6851/yarl-1.24.2-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/bf/d9/405320f8077e8e1c5c4bd6adc45e1e6edf6d727b6da7f2e2533cf58bff71/kiwisolver-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/82/280619e0bd7bf2454987e19282616e84762255dd9c8468f62382e8c191f1/aiohttp-3.14.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/c0/5d4119dba94093bbafede500d3defd2f5eab7897732998c04b54021e530b/h5py-3.16.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/2f/7229e91cfa37459622808002bec6eb019c7189bfc59788b3eaba5f273671/conda_package_streaming-0.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/cf/f4/672930ad51bbc135f51cac89577155f1d0c2d120375fc77978d3aa071bb7/pybigwig-0.3.25.tar.gz + - pypi: https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d4/74/3d6534c6ce0802bf085a32908b093e6a4123443050299bcc6e3828a9bf3e/cwltool-3.2.20260413085819-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/a5/bbbc3b74a94fbdbd7915e7ad030f16539bfdc1362f7e9003b594f0537950/glob2-0.7.tar.gz + - pypi: https://files.pythonhosted.org/packages/d9/b0/1e05aa4e0124cbc6509641353f513fc29c2b5e5197dbd5dfade810a521cf/galaxy_tool_util_models-26.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/da/17/f5276b496c61477a6c4fc5e7401f4bfe1c2e5ef7c6cd67896f2ade3809cb/matplotlib-3.11.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/78/47a205b5921bd86ef8d174fcda3daf23d65ad2887b38771935a064acd348/gxformat2-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/13/b8ae04c59392f8d11c6cd9fb4011d1dc7c86b81225c770280300e259ffe1/propcache-0.5.2-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e8/3d/1087453384dbde46a8c7f9356eead2c58be8a7bf156bca40243377c85715/more_itertools-11.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ec/17/d9ad109c8d7f05e6e78a79c4ec410ad3d38877b3efe18896eae6c446b534/edam_ontology-1.25.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/79/c45f2d53efe6ada1110cf6f9fca095e4ff47a0454444aefdde6ac4789179/cachecontrol-0.14.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/58/bc8954bda5fcda97bd7c19be11b85f91973d67a706ed4a3aec33e7de22db/jaraco_context-6.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/ab/a7653bce9a3b204be6a6931767a9e23595807bb84790ce6685e4d7e5bd08/nh3-0.3.6-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl + - pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/38/8b6fc7a8153cb49eb3a9a13acfa9eeb6cc476e37888781e593e6f02ac05e/spython-0.3.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fa/0a/11486d02add7b1384dff7374d124b1cfbb0ee864dcc9f6a2c0380638cf84/numpy-2.5.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fe/83/294bca639b0e052f1e2f65199b3db258780c7d4e31408b934c9c974a1379/maturin-1.14.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl + - pypi: https://files.pythonhosted.org/packages/fe/cf/18ef143a81610136d3da8193da9d80bfe1cb548a1e2d1c775f26b23d024a/multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl osx-arm64: - conda: https://conda.anaconda.org/bioconda/osx-arm64/htslib-1.10-hfcd771d_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda @@ -272,50 +462,145 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - pypi: . + - pypi: https://files.pythonhosted.org/packages/00/01/4001033457f25ecdc2b1ffd513ca0b76200b9ea009dd64f6c1aad2dde133/boltons-26.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/c2/6604a71269e0c1bd75656d5a001432d16f2cc5b8c057140ec797155c295e/rdflib-7.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/37/a065dc3bd6e49423a6532c642ca7378d3f467b1ef44c2800c937af7f9739/filelock-3.29.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/e2/2e325795566de01d0d7c3bb57d3c370616b2d07b01214e84eec5d3b10963/lxml-6.1.1-cp314-cp314-macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/15/1c/991e414e4305e5aef60c8ebb51f35a2e1b12cf80b9fc41733bbdd070c037/galaxy_tool_util-26.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/3e/4253fa84dd1947207033df2fecd52781e7e2f6d65c4360f38d739bb3c8c9/galaxy_util-26.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/82/a70006589557f267f15bd384c0642ad49f0d97b690c3a05b166b9dcbad3b/python_discovery-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/d2/23d25e3f247b328be58d04a4c9f894178a0d1eda7d42867cfb388adaf416/fonttools-4.63.0-cp314-cp314-macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/2a/7f/a946aa4f8752b37102b41e64dca18a1976ac705c3a0d1dfe74d820a02552/mistune-3.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/02/3623e6169bed617ed1e2d372f7c69f92ec28d54c4dfc997055c8578ec148/virtualenv-21.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/8e/b94ec25fcd4384de2a1f5e0403284f005ec743c04bafdb6698c851df5c6d/tuspy-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/37/aa/111610d8bf5b1bb7a295a048fc648cec346347a8b0be5881defd2d1b4a52/oyaml-1.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/6b/72e5f22f3c5069bd950f107110cd17468cdb43abda3c55b48c4013e7b667/bioblend-1.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/a7/552a7821597c632b907f7bfe8f36f9f572777af8ef8a48353041cf8e091a/scikit_learn-1.9.0-cp314-cp314-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3d/6f/221654a39431edc7e9685702ab06fbb22bb313629e0187c0ed4462ba8af7/schema_salad-8.9.20260417192335-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/46/3b/9dedd2e35cebcd4eb3539514b5ac674fd45654404839e6f9eff6e25d67c7/py2bit-1.0.1.tar.gz - pypi: https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/49/b2/97980f3ad4fae37dd7fe31626e2bf75fbf8bdf5d303950ec1fab39a12da8/kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/53/78/ddd0affa881b1e09bc59f11ab829a7904f4bca29d25c34cbb9395e8e0061/allure_python_commons-2.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/58/9d/40b6267367182187139a4000b82a3b287d84d745bccd808e75d916920e9d/bleach-6.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/5d/39/b72e168daf9c00fb20c9fc996d00437ccecdef3102387775d29d7a62576d/numpy-2.5.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/fc/a7bf5b6e4e617b45f90f2d9d2a68519c249c81dd4fc2658c7a2a61c4f4b7/aiohappyeyeballs-2.6.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/5c/15b4c7a0182f75ffa90751958ba36a9c01cafee367d49a3edc10ed140b01/msgpack-1.2.1-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/b1/4260d67d6bd85e58a66b72d54ce15d5de789b6f3870cc6bedf8ff9667401/propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/6a/b7/9366ed44ced9b7ef357ab48c94205280276db9d7f064aa3012a97227e966/h5py-3.16.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/72/65/a4559d4ff4a210d2a26d7ca0712e4e738cbfc963135f86e8ae807ca420eb/pysam-0.24.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/74/f5/9373290775639cb67a2fce7f629a1c240dce9f12fe927bc32b2736e16dfc/argcomplete-3.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7c/03/b8cdb625a21f710dfa11bbca1f48fb4057d2c0286975f8b415bf80942c99/matplotlib-3.11.0-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/7e/32/a7125fb28c4261a627f999d5fb4afff25b523800faed2c30979949d6facd/pydot-4.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/81/59/208f71d70ddc6184f79b8c6d87d46eb7d7b12c19186a817dec9c9c3f3693/tifffile-2026.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/f3/d7b4c8c9b6657ff0db27b739894ed0665fa8f3c78a7452bf74d6447f6865/zipstream_new-1.1.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/0c/b3288ee003c344356cd505ba8d85286e8f0d4d4177a13d8eed7db6e7c688/planemo-0.75.44-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/b4/23f8462c72e514563f5fd949e38a9e45bcc86fb59bf4b88240ba0ef02026/cwl_utils-0.42-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/fb/2c4c618185be2bda327f9dacd16b3122cc938809f19df7be840595d0e584/prov-1.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/92/7a/8017d45e513c720ee82bf062b1be3ae39087db3024571b4a00773e17c235/galaxy_job_config_init-0.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/9a/982e48afcffcd727a9144506720ffd4224b6b7e355c98641866f38b7c043/jaraco_functools-4.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/1b/295bf2fa3e740131778065e5ffa2c481f0e7210182d408e9a2c244ff5b0c/readme_renderer-45.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/70/875f4a23bfc4731703a5835487d0d2fb999031bd415e7d17c0ae615c18b7/pathvalidate-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/22/adf66990e63584a68dfb50c24f48a125c07b1699899381c8151e63ed458c/cryptography-49.0.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ac/1f/d10d6ad23c86c62d90d867d0506881a392ec6ef06885b858eaab868dd356/deeptoolsintervals-0.1.9.tar.gz + - pypi: https://files.pythonhosted.org/packages/ac/3e/61d11b779e4e83ee8661439af070f6f138060cd41f0346a0a70432f9e55c/cwl_upgrader-1.2.15-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b4/97/0535f7d3f45d3853f79a11988d8faf798de684d902579126449455506e2f/ephemeris-0.10.11-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b4/c9/7d293a9ea42ef05d6260714f8cf641ba64fab438be55312b1c719d4e7cc6/fissix-24.4.24-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/0c/51f6841f1d84f404f92463fc2b1ba0da357ca1e3db6b7fbda26956c3b82a/ruamel_yaml-0.19.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ba/b1/5297bb6a7df4782f7605bffc43b31f5044070935fbbcaa6c705a07e6ac65/yarl-1.24.2-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/2f/7229e91cfa37459622808002bec6eb019c7189bfc59788b3eaba5f273671/conda_package_streaming-0.13.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/f4/672930ad51bbc135f51cac89577155f1d0c2d120375fc77978d3aa071bb7/pybigwig-0.3.25.tar.gz + - pypi: https://files.pythonhosted.org/packages/d4/74/3d6534c6ce0802bf085a32908b093e6a4123443050299bcc6e3828a9bf3e/cwltool-3.2.20260413085819-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/88/b72def7262e150d16be13fca37a96481138d624e700340bc3362a7588929/scipy-1.18.0-cp314-cp314-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/d7/a5/bbbc3b74a94fbdbd7915e7ad030f16539bfdc1362f7e9003b594f0537950/glob2-0.7.tar.gz + - pypi: https://files.pythonhosted.org/packages/d9/b0/1e05aa4e0124cbc6509641353f513fc29c2b5e5197dbd5dfade810a521cf/galaxy_tool_util_models-26.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/78/47a205b5921bd86ef8d174fcda3daf23d65ad2887b38771935a064acd348/gxformat2-0.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e8/3d/1087453384dbde46a8c7f9356eead2c58be8a7bf156bca40243377c85715/more_itertools-11.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/a7/248e1aebe0c7810b0271e021a0f2a5eb6e78a051885b3c9df49f42a5802d/aiohttp-3.14.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ec/17/d9ad109c8d7f05e6e78a79c4ec410ad3d38877b3efe18896eae6c446b534/edam_ontology-1.25.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/79/c45f2d53efe6ada1110cf6f9fca095e4ff47a0454444aefdde6ac4789179/cachecontrol-0.14.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/4f/733c48f270565d78b4544f2baddc2fb2a245e5a8640254b12c36ac7ac68e/multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f2/58/bc8954bda5fcda97bd7c19be11b85f91973d67a706ed4a3aec33e7de22db/jaraco_context-6.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/ab/a7653bce9a3b204be6a6931767a9e23595807bb84790ce6685e4d7e5bd08/nh3-0.3.6-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl + - pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/38/8b6fc7a8153cb49eb3a9a13acfa9eeb6cc476e37888781e593e6f02ac05e/spython-0.3.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/99/757a48b4ace0097b63550597db28f58da0b91d89889f98b34b30f272c0bf/ct3-3.4.0.post5-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/fe/83/294bca639b0e052f1e2f65199b3db258780c7d4e31408b934c9c974a1379/maturin-1.14.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl + - pypi: https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl packages: - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.19-h81da01d_0.tar.bz2 sha256: 70a43fdc3e81fde05e8cee0b1880d9929c00b2581e162e7c21926deb379b31b3 @@ -2780,6 +3065,15 @@ packages: - build ; extra == 'actions' - planemo ; extra == 'actions' requires_python: '>3.9' +- pypi: https://files.pythonhosted.org/packages/00/01/4001033457f25ecdc2b1ffd513ca0b76200b9ea009dd64f6c1aad2dde133/boltons-26.0.0-py3-none-any.whl + name: boltons + version: 26.0.0 + sha256: ba077cac51b27532299634f87f5589b4080fa94a011b4d43a9247f775e9215c7 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl + name: distlib + version: 0.4.3 + sha256: 4b0ce306c966eb73bc3a7b6abad017c556dadd92c44701562cd528ac7fde4d5b - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl name: docutils version: 0.22.4 @@ -2790,6 +3084,16 @@ packages: version: 4.1.0 sha256: 647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/08/f6/af32e23e563971ffb0fb86be52bc5be5c2c118858ffc119bf6a9039b173d/lxml-6.1.1-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + name: lxml + version: 6.1.1 + sha256: ebe6af670449830d6d9b752c256a983291c766a1365ba5d5460048f9e33a7818 + requires_dist: + - cssselect>=0.7 ; extra == 'cssselect' + - html5lib ; extra == 'html5' + - beautifulsoup4 ; extra == 'htmlsoup' + - lxml-html-clean ; extra == 'html-clean' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl name: sphinxcontrib-htmlhelp version: 2.1.0 @@ -2802,11 +3106,38 @@ packages: - pytest ; extra == 'test' - html5lib ; extra == 'test' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl + name: rich-argparse + version: 1.8.0 + sha256: d2a3ce7854654e2253c578763ab0a32f05016f23a55fadba7b9a91b6c0e92142 + requires_dist: + - rich>=11.0.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl + name: pycparser + version: '3.0' + sha256: b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl name: charset-normalizer version: 3.4.7 sha256: eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46 requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl + name: build + version: 1.5.0 + sha256: 13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f + requires_dist: + - packaging>=24.0 + - pyproject-hooks + - colorama ; os_name == 'nt' + - importlib-metadata>=4.6 ; python_full_version < '3.10.2' + - tomli>=1.1.0 ; python_full_version < '3.11' + - keyring ; extra == 'keyring' + - uv>=0.1.18 ; extra == 'uv' + - virtualenv>=20.17 ; python_full_version >= '3.10' and python_full_version < '3.14' and extra == 'virtualenv' + - virtualenv>=20.31 ; python_full_version >= '3.14' and extra == 'virtualenv' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl name: pyparsing version: 3.3.2 @@ -2815,11 +3146,126 @@ packages: - railroad-diagrams ; extra == 'diagrams' - jinja2 ; extra == 'diagrams' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/10/c2/6604a71269e0c1bd75656d5a001432d16f2cc5b8c057140ec797155c295e/rdflib-7.6.0-py3-none-any.whl + name: rdflib + version: 7.6.0 + sha256: 30c0a3ebf4c0e09215f066be7246794b6492e054e782d7ac2a34c9f70a15e0dd + requires_dist: + - berkeleydb>=18.1.0,<19.0.0 ; extra == 'berkeleydb' + - html5rdf>=1.2,<2 ; extra == 'html' + - httpx>=0.28.1,<0.29.0 ; extra == 'graphdb' or extra == 'rdf4j' + - isodate>=0.7.2,<1.0.0 ; python_full_version < '3.11' + - lxml>=4.3,<6.0 ; extra == 'lxml' + - networkx>=2,<4 ; extra == 'networkx' + - orjson>=3.9.14,<4 ; extra == 'orjson' + - pyparsing>=2.1.0,<4 + requires_python: '>=3.8.1' +- pypi: https://files.pythonhosted.org/packages/13/37/a065dc3bd6e49423a6532c642ca7378d3f467b1ef44c2800c937af7f9739/filelock-3.29.4-py3-none-any.whl + name: filelock + version: 3.29.4 + sha256: dac1648087d5115554850d113e7dd8c83ab2d38e3435dde2d4f163847e57b767 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/13/e2/2e325795566de01d0d7c3bb57d3c370616b2d07b01214e84eec5d3b10963/lxml-6.1.1-cp314-cp314-macosx_10_15_universal2.whl + name: lxml + version: 6.1.1 + sha256: 19b7ab10b210b0b3ad7985d9ac4eb66ab09a90b20fe6e2f7ba55d01a234345d0 + requires_dist: + - cssselect>=0.7 ; extra == 'cssselect' + - html5lib ; extra == 'html5' + - beautifulsoup4 ; extra == 'htmlsoup' + - lxml-html-clean ; extra == 'html-clean' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/14/15/5574111ae50dd6e879456888c0eadd4c5a869959775854e18e18a6b345f3/propcache-0.5.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: propcache + version: 0.5.2 + sha256: 6f328175a2cde1f0ff2c4ed8ce968b9dcfb55f3a7153f39e2957ed994da13476 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/14/27/cc422d11961a00bd04aa9a8d9a63683a1083fe2e6a491c285a94998d6751/pysam-0.24.0-cp312-cp312-macosx_10_13_x86_64.whl name: pysam version: 0.24.0 sha256: 38d5cc5dff4bdaceabbb58c0700c41b132aacf783432b1d16060b46ac7d866e2 requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/15/1c/991e414e4305e5aef60c8ebb51f35a2e1b12cf80b9fc41733bbdd070c037/galaxy_tool_util-26.0.1-py3-none-any.whl + name: galaxy-tool-util + version: 26.0.1 + sha256: 8e96969e2ced926bededa90ac137aa3a939500eb521ec7f64edc0f39f48b180a + requires_dist: + - galaxy-tool-util-models + - galaxy-util[image-util,template]>=22.1 + - conda-package-streaming + - lxml!=4.2.2 + - markupsafe + - packaging + - pydantic>=2.7.4 + - pyyaml + - requests + - sortedcontainers + - typing-extensions + - cwl-utils ; extra == 'cwl' + - cwltool>=3.1.20230624081518 ; extra == 'cwl' + - jinja2 ; extra == 'mulled' + - whoosh ; extra == 'mulled' + - edam-ontology ; extra == 'edam' + - numpy ; extra == 'extended-assertions' + - pysam ; extra == 'extended-assertions' + - pillow ; extra == 'extended-assertions' + - tifffile ; extra == 'extended-assertions' + - beaker ; extra == 'test' + - pytest ; extra == 'test' + - pytest-mock ; extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/18/3e/4253fa84dd1947207033df2fecd52781e7e2f6d65c4360f38d739bb3c8c9/galaxy_util-26.0.1-py3-none-any.whl + name: galaxy-util + version: 26.0.1 + sha256: 62185001f2295338e45aa7376f30bbefd0ee69f08875892170c9831901a0310d + requires_dist: + - bleach + - boltons + - docutils!=0.17,!=0.17.1 + - importlib-resources>=5.10.0 ; python_full_version < '3.12' + - packaging + - pyparsing>=3.0.0 + - pyyaml + - requests + - typing-extensions + - zipstream-new + - pillow ; extra == 'image-util' + - dictobj ; extra == 'jstree' + - ct3>=3.3.3 ; extra == 'template' + - fissix ; python_full_version >= '3.13' and extra == 'template' + - future>=1.0.0 ; extra == 'template' + - galaxy-tool-util-models ; extra == 'config-template' + - jinja2 ; extra == 'config-template' + - pydantic>=2.7.4 ; extra == 'config-template' + - pytest ; extra == 'test' + - pytest-httpserver ; extra == 'test' + - responses ; extra == 'test' + - werkzeug ; extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + name: typing-extensions + version: 4.15.0 + sha256: f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/1a/82/a70006589557f267f15bd384c0642ad49f0d97b690c3a05b166b9dcbad3b/python_discovery-1.4.2-py3-none-any.whl + name: python-discovery + version: 1.4.2 + sha256: 475803f53b7b2ed6e490e27373f9d8340f7d2eebf9acdaf645d7d714c97bb500 + requires_dist: + - filelock>=3.15.4 + - platformdirs>=4.3.6,<5 + - furo>=2025.12.19 ; extra == 'docs' + - sphinx-autodoc-typehints>=3.6.3 ; extra == 'docs' + - sphinx>=9.1 ; extra == 'docs' + - sphinxcontrib-mermaid>=2 ; extra == 'docs' + - sphinxcontrib-towncrier>=0.4 ; extra == 'docs' + - towncrier>=25.8 ; extra == 'docs' + - covdefaults>=2.3 ; extra == 'testing' + - coverage>=7.5.4 ; extra == 'testing' + - pytest-mock>=3.14 ; extra == 'testing' + - pytest>=8.3.5 ; extra == 'testing' + - setuptools>=75.1 ; extra == 'testing' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/1a/bd/9c0d5d6983905ce2c9edaa073a7e89355a9cf7f396988e05d32f1c37785d/maturin-1.14.1-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl name: maturin version: 1.14.1 @@ -2838,6 +3284,78 @@ packages: - mypy>=1.11.2 ; extra == 'all' - pytest>=8.3.2 ; extra == 'all' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/1e/bb/009af3a9532d4cc66d5385391c512210fae32ab2442605f26aca1d8d2957/backports_zstd-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl + name: backports-zstd + version: 1.6.0 + sha256: 0466b14723f3b7697669c00ee66fe16e30e25636b286b0a923fa86fa3d8a753c + requires_python: '>=3.10,<3.14' +- pypi: https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz + name: cryptography + version: 49.0.0 + sha256: f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493 + requires_dist: + - cffi>=2.0.0 ; platform_python_implementation != 'PyPy' + - typing-extensions>=4.13.2 ; python_full_version < '3.11' + - bcrypt>=3.1.5 ; extra == 'ssh' + requires_python: '>=3.9,!=3.9.0,!=3.9.1' +- pypi: https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl + name: cryptography + version: 49.0.0 + sha256: 2afe9051da7ae7bd5905da5a949280c7d2bb75682e188f650a9d0f2756b834c6 + requires_dist: + - cffi>=2.0.0 ; platform_python_implementation != 'PyPy' + - typing-extensions>=4.13.2 ; python_full_version < '3.11' + - bcrypt>=3.1.5 ; extra == 'ssh' + requires_python: '>=3.9,!=3.9.0,!=3.9.1' +- pypi: https://files.pythonhosted.org/packages/20/9c/d445818389df371f56d141d881153ba23183c4735a03f7356ffb43f7757d/aiohttp-3.14.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: aiohttp + version: 3.14.1 + sha256: 3e6fc1a85fa7194a1a7d19f44e8609180f4a8eb5fa4c7ed8b4355f080fad235c + requires_dist: + - aiohappyeyeballs>=2.5.0 + - aiosignal>=1.4.0 + - async-timeout>=4.0,<6.0 ; python_full_version < '3.11' + - attrs>=17.3.0 + - frozenlist>=1.1.1 + - multidict>=4.5,<7.0 + - propcache>=0.2.0 + - typing-extensions>=4.4 ; python_full_version < '3.13' + - yarl>=1.17.0,<2.0 + - aiodns>=3.3.0 ; sys_platform != 'android' and sys_platform != 'ios' and extra == 'speedups' + - brotli>=1.2 ; platform_python_implementation == 'CPython' and sys_platform != 'android' and sys_platform != 'ios' and extra == 'speedups' + - brotlicffi>=1.2 ; platform_python_implementation != 'CPython' and extra == 'speedups' + - backports-zstd ; python_full_version < '3.14' and platform_python_implementation == 'CPython' and sys_platform != 'android' and sys_platform != 'ios' and extra == 'speedups' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/22/00/ff3009c88e65de8011630acf8ab5a09cb2becd2aaf47fba2f3449f6224e9/lxml-6.1.1-cp312-cp312-macosx_10_13_x86_64.whl + name: lxml + version: 6.1.1 + sha256: 25c6997a9a534e016695a0ba06b2f07945de682731ff01065b6d5a4474179da1 + requires_dist: + - cssselect>=0.7 ; extra == 'cssselect' + - html5lib ; extra == 'html5' + - beautifulsoup4 ; extra == 'htmlsoup' + - lxml-html-clean ; extra == 'html-clean' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl + name: pytest + version: 9.1.1 + sha256: 37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c + requires_dist: + - colorama>=0.4 ; sys_platform == 'win32' + - exceptiongroup>=1 ; python_full_version < '3.11' + - iniconfig>=1.0.1 + - packaging>=22 + - pluggy>=1.5,<2 + - pygments>=2.7.2 + - tomli>=1 ; python_full_version < '3.11' + - argcomplete ; extra == 'dev' + - attrs>=19.2 ; extra == 'dev' + - hypothesis>=3.56 ; extra == 'dev' + - mock ; extra == 'dev' + - requests ; extra == 'dev' + - setuptools ; extra == 'dev' + - xmlschema ; extra == 'dev' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl name: pandas version: 3.0.3 @@ -2928,6 +3446,11 @@ packages: - xlsxwriter>=3.2.0 ; extra == 'all' - zstandard>=0.23.0 ; extra == 'all' requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl + name: mccabe + version: 0.7.0 + sha256: 6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e + requires_python: '>=3.6' - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl name: sphinxcontrib-qthelp version: 2.0.0 @@ -2974,6 +3497,47 @@ packages: - skia-pathops>=0.5.0 ; extra == 'all' - uharfbuzz>=0.45.0 ; extra == 'all' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/2a/7f/a946aa4f8752b37102b41e64dca18a1976ac705c3a0d1dfe74d820a02552/mistune-3.2.1-py3-none-any.whl + name: mistune + version: 3.2.1 + sha256: 78cdb0ba5e938053ccf63651b352508d2efa9411dc8810bfb05f2dc5140c0048 + requires_dist: + - typing-extensions ; python_full_version < '3.11' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/2c/02/3623e6169bed617ed1e2d372f7c69f92ec28d54c4dfc997055c8578ec148/virtualenv-21.5.1-py3-none-any.whl + name: virtualenv + version: 21.5.1 + sha256: 55aa670b67bbfb991b03fda39bd3276d92c419d702376e98c5df1c9989a26783 + requires_dist: + - distlib>=0.3.7,<1 + - filelock>=3.24.2,<4 ; python_full_version >= '3.10' + - filelock>=3.16.1,<=3.19.1 ; python_full_version < '3.10' + - platformdirs>=3.9.1,<5 + - python-discovery>=1.4.2 + - typing-extensions>=4.13.2 ; python_full_version < '3.11' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + name: sortedcontainers + version: 2.4.0 + sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +- pypi: https://files.pythonhosted.org/packages/32/8e/b94ec25fcd4384de2a1f5e0403284f005ec743c04bafdb6698c851df5c6d/tuspy-1.1.0-py3-none-any.whl + name: tuspy + version: 1.1.0 + sha256: 7fc5ac8fb25de37c96c90213f83a1ffdede7f48a471cb5a15a2f57846828a79a + requires_dist: + - requests>=2.18.4 + - tinydb>=3.5.0 + - aiohttp>=3.6.2 + - responses>=0.5.1 ; extra == 'test' + - aioresponses>=0.6.2 ; extra == 'test' + - coverage>=4.2 ; extra == 'test' + - pytest>=3.0.3 ; extra == 'test' + - pytest-cov>=2.3.1,<2.6 ; extra == 'test' + - parametrize>=0.1.1 ; extra == 'test' + - tox>=2.3.1 ; extra == 'dev' + - sphinx-autobuild==2021.3.14 ; extra == 'dev' + - sphinx==1.7.1 ; extra == 'dev' + requires_python: '>=3.5.3' - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl name: threadpoolctl version: 3.6.0 @@ -2990,11 +3554,49 @@ packages: - sphinx>=5 ; extra == 'standalone' - pytest ; extra == 'test' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/37/aa/111610d8bf5b1bb7a295a048fc648cec346347a8b0be5881defd2d1b4a52/oyaml-1.0-py2.py3-none-any.whl + name: oyaml + version: '1.0' + sha256: 3a378747b7fb2425533d1ce41962d6921cda075d46bb480a158d45242d156323 + requires_dist: + - pyyaml +- pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + name: twine + version: 6.2.0 + sha256: 418ebf08ccda9a8caaebe414433b0ba5e25eb5e4a927667122fbe8f829f985d8 + requires_dist: + - readme-renderer>=35.0 + - requests>=2.20 + - requests-toolbelt>=0.8.0,!=0.9.0 + - urllib3>=1.26.0 + - importlib-metadata>=3.6 ; python_full_version < '3.10' + - keyring>=21.2.0 ; platform_machine != 'ppc64le' and platform_machine != 's390x' + - rfc3986>=1.4.0 + - rich>=12.0.0 + - packaging>=24.0 + - id + - keyring>=21.2.0 ; extra == 'keyring' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl + name: appdirs + version: 1.4.4 + sha256: a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128 - pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: markupsafe version: 3.0.3 sha256: d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/3c/6b/72e5f22f3c5069bd950f107110cd17468cdb43abda3c55b48c4013e7b667/bioblend-1.9.0-py3-none-any.whl + name: bioblend + version: 1.9.0 + sha256: 573d6e8e8f1ee3f5a5630a05e561ca5c69ecfa2cf93d7e81d472ec8fe53abc49 + requires_dist: + - pyyaml + - requests>=2.20.0 + - requests-toolbelt>=0.5.1,!=0.9.0 + - tuspy + - pytest ; extra == 'testing' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/3c/a7/552a7821597c632b907f7bfe8f36f9f572777af8ef8a48353041cf8e091a/scikit_learn-1.9.0-cp314-cp314-macosx_12_0_arm64.whl name: scikit-learn version: 1.9.0 @@ -3059,6 +3661,51 @@ packages: - pooch>=1.8.0 ; extra == 'tests' - conda-lock==3.0.1 ; extra == 'maintenance' requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/3d/6f/221654a39431edc7e9685702ab06fbb22bb313629e0187c0ed4462ba8af7/schema_salad-8.9.20260417192335-py3-none-any.whl + name: schema-salad + version: 8.9.20260417192335 + sha256: dd7f5b1aa4d6f3ab61e7fd83d942af22d83afecc5f24f48b2027810efe6bd76f + requires_dist: + - requests>=1.0 + - ruamel-yaml>=0.17.6,<0.20 + - rdflib>=4.2.2,<8.0.0 + - mistune>=3,<3.3 + - cachecontrol[filecache]>=0.13.1,<0.15 + - mypy-extensions + - rich-argparse + - sphinx>=2.2 ; extra == 'docs' + - sphinx-rtd-theme>=1 ; extra == 'docs' + - pytest<10 ; extra == 'docs' + - sphinx-autoapi ; extra == 'docs' + - sphinx-autodoc-typehints ; extra == 'docs' + - sphinxcontrib-autoprogram ; extra == 'docs' + - black ; extra == 'pycodegen' + requires_python: '>=3.10,<3.15' +- pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + name: requests-toolbelt + version: 1.0.0 + sha256: cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06 + requires_dist: + - requests>=2.0.1,<3.0.0 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl + name: id + version: 1.6.1 + sha256: f5ec41ed2629a508f5d0988eda142e190c9c6da971100612c4de9ad9f9b237ca + requires_dist: + - urllib3>=2,<3 + - build ; extra == 'dev' + - bump>=1.3.2 ; extra == 'dev' + - id[test,lint] ; extra == 'dev' + - bandit ; extra == 'lint' + - interrogate ; extra == 'lint' + - mypy ; extra == 'lint' + - ruff<0.14.15 ; extra == 'lint' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pretend ; extra == 'test' + - coverage[toml] ; extra == 'test' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: pillow version: 12.2.0 @@ -3177,11 +3824,38 @@ packages: - sphinx>=5 ; extra == 'standalone' - pytest ; extra == 'test' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/53/78/ddd0affa881b1e09bc59f11ab829a7904f4bca29d25c34cbb9395e8e0061/allure_python_commons-2.16.0-py3-none-any.whl + name: allure-python-commons + version: 2.16.0 + sha256: 6d42a500078aca8a2e68823075c1ffc2396987bb268d62b19af82390b205ce88 + requires_dist: + - attrs>=16.0.0 + - pluggy>=0.4.0 + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + name: pluggy + version: 1.6.0 + sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 + requires_dist: + - pre-commit ; extra == 'dev' + - tox ; extra == 'dev' + - pytest ; extra == 'testing' + - pytest-benchmark ; extra == 'testing' + - coverage ; extra == 'testing' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/55/0f/e7f1ff3a1cabc6c4486a7ee1b0506aedf2f5f8329760ac1f4e8032feef2b/pysam-0.24.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: pysam version: 0.24.0 sha256: 4a642f18649e59817de272173e9c27c031dceaca199809e4f8b338ebfc5d6698 requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/58/9d/40b6267367182187139a4000b82a3b287d84d745bccd808e75d916920e9d/bleach-6.4.0-py3-none-any.whl + name: bleach + version: 6.4.0 + sha256: 4b6b6a54fff2e69a3dde9d21cc6301220bee3c3cb792187d11403fd795031081 + requires_dist: + - webencodings + - tinycss2>=1.1.0 ; extra == 'css' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/58/be/7482c8a5ebebbc6470b3eb791812fff7d5e0216c2be3827b30b8bb6603ed/pillow-12.2.0-cp312-cp312-macosx_10_13_x86_64.whl name: pillow version: 12.2.0 @@ -3214,11 +3888,23 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl + name: cffi + version: 2.0.0 + sha256: c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 + requires_dist: + - pycparser ; implementation_name != 'PyPy' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl name: markupsafe version: 3.0.3 sha256: d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/5b/67/314f6151bad77a93d751978a344033e1fc890822f05f0416079338e34231/nh3-0.3.6-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: nh3 + version: 0.3.6 + sha256: 905f877dc66dd7aea4a76e54bcb26acb5ff8216f720c0017ccf63e0e6035698e + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/5d/39/b72e168daf9c00fb20c9fc996d00437ccecdef3102387775d29d7a62576d/numpy-2.5.0-cp314-cp314-macosx_11_0_arm64.whl name: numpy version: 2.5.0 @@ -3240,6 +3926,23 @@ packages: version: 2.0.0 sha256: 5667c5bbb57ab3f1fa4bc366f4fbc971db3d5ed011fd2715fd8001f782718d96 requires_python: '>=3.10,<3.15' +- pypi: https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pydantic-core + version: 2.46.4 + sha256: 926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/5f/fc/a7bf5b6e4e617b45f90f2d9d2a68519c249c81dd4fc2658c7a2a61c4f4b7/aiohappyeyeballs-2.6.2-py3-none-any.whl + name: aiohappyeyeballs + version: 2.6.2 + sha256: 4708045e2d7a6c6bdf8aafa8ed39649eaf926a4543b54560659129e3365953c4 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/60/5c/15b4c7a0182f75ffa90751958ba36a9c01cafee367d49a3edc10ed140b01/msgpack-1.2.1-cp314-cp314-macosx_11_0_arm64.whl + name: msgpack + version: 1.2.1 + sha256: 810b916696c86ef0deb3b74588480224df4c1b071136c34183e4a2a4284d7ac7 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl name: numpydoc version: 1.10.0 @@ -3256,6 +3959,21 @@ packages: - markupsafe>=2.0 - babel>=2.7 ; extra == 'i18n' requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/63/b1/4260d67d6bd85e58a66b72d54ce15d5de789b6f3870cc6bedf8ff9667401/propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl + name: propcache + version: 0.5.2 + sha256: 97797ebb098e670a2f92dd66f32897e30d7615b14e7f59711de23e30a9072539 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl + name: frozenlist + version: 1.8.0 + sha256: 229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + name: attrs + version: 26.1.0 + sha256: c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl name: pandas version: 3.0.3 @@ -3482,10 +4200,32 @@ packages: - ruff>=0.12.0 ; extra == 'dev' - cython-lint>=0.12.2 ; extra == 'dev' requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/6a/b7/9366ed44ced9b7ef357ab48c94205280276db9d7f064aa3012a97227e966/h5py-3.16.0-cp314-cp314-macosx_11_0_arm64.whl + name: h5py + version: 3.16.0 + sha256: 8c1eff849cdd53cbc73c214c30ebdb6f1bb8b64790b4b4fc36acdb5e43570210 + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: frozenlist + version: 1.8.0 + sha256: 494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/6a/fd/6adabd4f6d5e686f97dd02ce7fce3fe4cf672cbac36b8f67ff4040e8ad8b/msgpack-1.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: msgpack + version: 1.2.1 + sha256: 020e881a764b20d8d7ca1a54fc01b8175519d108e3c3f194fddc200bda95951a + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/6b/67/6ea73b2173bcb1abe3a947fbd090cf96ee1b0a75f3f690e8902dc8ffdbfa/py2bit-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: py2bit version: 1.0.1 sha256: 0cbd9754342dc9595f46b18e655af01d89e78d9762b0b541fcd4e96076523275 +- pypi: https://files.pythonhosted.org/packages/6b/b2/d17b2722c636d64b4e77ddc68d8d0625719d39f94021be8719a218af4c0a/backports_zstd-1.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: backports-zstd + version: 1.6.0 + sha256: 1a99710fbb225d459d66def4dc2bb2cd4a9a0bdc8b799fc0621cfdd863be9c93 + requires_python: '>=3.10,<3.14' - pypi: https://files.pythonhosted.org/packages/6c/c2/63fdda36c56437eeb44aaf9493c8bcd62ce230ab1598924fc626ffbfa943/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: scikit-learn version: 1.9.0 @@ -3578,6 +4318,17 @@ packages: - packaging>=23.0 - colorama>=0.4.6 ; sys_platform == 'win32' requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/74/f5/9373290775639cb67a2fce7f629a1c240dce9f12fe927bc32b2736e16dfc/argcomplete-3.6.3-py3-none-any.whl + name: argcomplete + version: 3.6.3 + sha256: f5007b3a600ccac5d25bbce33089211dfd49eab4a7718da3f10e3082525a92ce + requires_dist: + - coverage ; extra == 'test' + - mypy ; extra == 'test' + - pexpect ; extra == 'test' + - ruff ; extra == 'test' + - wheel ; extra == 'test' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/77/c7/2342da9830e3e9d4870305ca5d2091d2a83284f2953079b7bdd3b5e029d8/fonttools-4.63.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: fonttools version: 4.63.0 @@ -3627,6 +4378,39 @@ packages: - pytz ; extra == 'dev' - setuptools ; extra == 'dev' requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl + name: tinydb + version: 4.8.2 + sha256: f97030ee5cbc91eeadd1d7af07ab0e48ceb04aa63d4a983adbaca4cba16e86c3 + requires_python: '>=3.8,<4.0' +- pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: cffi + version: 2.0.0 + sha256: 3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba + requires_dist: + - pycparser ; implementation_name != 'PyPy' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + name: annotated-types + version: 0.7.0 + sha256: 1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 + requires_dist: + - typing-extensions>=4.0.0 ; python_full_version < '3.9' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + name: mypy-extensions + version: 1.1.0 + sha256: 1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/7a/da/323a01c349bd5fb01bb6652e314d9bb218cee630a736bdb810ad50e4013f/yarl-1.24.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: yarl + version: 1.24.2 + sha256: 7e7ebcdef69dec6c6451e616f32b622a6d4a2e92b445c992f7c8e5274a6bbc4c + requires_dist: + - idna>=2.0 + - multidict>=4.0 + - propcache>=0.2.1 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/7a/f6/51d8a97116de23c9280c1fa3b813bc088f8571ce5936ba84af1ecf13ed45/pybigwig-0.3.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: pybigwig version: 0.3.25 @@ -3652,6 +4436,25 @@ packages: - pyparsing>=3 - python-dateutil>=2.7 requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/7e/32/a7125fb28c4261a627f999d5fb4afff25b523800faed2c30979949d6facd/pydot-4.0.1-py3-none-any.whl + name: pydot + version: 4.0.1 + sha256: 869c0efadd2708c0be1f916eb669f3d664ca684bc57ffb7ecc08e70d5e93fee6 + requires_dist: + - pyparsing>=3.1.0 + - ruff ; extra == 'lint' + - mypy ; extra == 'types' + - pydot[lint] ; extra == 'dev' + - pydot[types] ; extra == 'dev' + - chardet ; extra == 'dev' + - parameterized ; extra == 'dev' + - pydot[dev] ; extra == 'tests' + - tox ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-xdist[psutil] ; extra == 'tests' + - zest-releaser[recommended] ; extra == 'release' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl name: alabaster version: 1.0.0 @@ -3668,6 +4471,230 @@ packages: - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' - backports-zstd>=1.0.0 ; python_full_version < '3.14' and extra == 'zstd' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + name: jaraco-classes + version: 3.4.0 + sha256: f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 + requires_dist: + - more-itertools + - sphinx>=3.5 ; extra == 'docs' + - jaraco-packaging>=9.3 ; extra == 'docs' + - rst-linker>=1.9 ; extra == 'docs' + - furo ; extra == 'docs' + - sphinx-lint ; extra == 'docs' + - jaraco-tidelift>=1.4 ; extra == 'docs' + - pytest>=6 ; extra == 'testing' + - pytest-checkdocs>=2.4 ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - pytest-enabler>=2.2 ; extra == 'testing' + - pytest-ruff>=0.2.1 ; extra == 'testing' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl + name: psutil + version: 7.2.2 + sha256: 1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 + requires_dist: + - psleak ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-instafail ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - setuptools ; extra == 'dev' + - abi3audit ; extra == 'dev' + - black ; extra == 'dev' + - check-manifest ; extra == 'dev' + - coverage ; extra == 'dev' + - packaging ; extra == 'dev' + - pylint ; extra == 'dev' + - pyperf ; extra == 'dev' + - pypinfo ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - requests ; extra == 'dev' + - rstcheck ; extra == 'dev' + - ruff ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-rtd-theme ; extra == 'dev' + - toml-sort ; extra == 'dev' + - twine ; extra == 'dev' + - validate-pyproject[all] ; extra == 'dev' + - virtualenv ; extra == 'dev' + - vulture ; extra == 'dev' + - wheel ; extra == 'dev' + - colorama ; os_name == 'nt' and extra == 'dev' + - pyreadline3 ; os_name == 'nt' and extra == 'dev' + - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' + - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' + - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' + - psleak ; extra == 'test' + - pytest ; extra == 'test' + - pytest-instafail ; extra == 'test' + - pytest-xdist ; extra == 'test' + - setuptools ; extra == 'test' + - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' + - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' + - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/81/59/208f71d70ddc6184f79b8c6d87d46eb7d7b12c19186a817dec9c9c3f3693/tifffile-2026.6.1-py3-none-any.whl + name: tifffile + version: 2026.6.1 + sha256: 0d7382d2769b855b81ce358528e2b40c16d48aa39031746efa81215205332a8d + requires_dist: + - numpy>=2.1 + - imagecodecs>=2026.5.10 ; extra == 'codecs' + - lxml ; extra == 'xml' + - zarr>=3.2.0 ; extra == 'zarr' + - fsspec ; extra == 'zarr' + - kerchunk ; extra == 'zarr' + - matplotlib ; extra == 'plot' + - imagecodecs>=2026.5.10 ; extra == 'all' + - matplotlib ; extra == 'all' + - lxml ; extra == 'all' + - zarr>=3.2.0 ; extra == 'all' + - xarray ; extra == 'all' + - fsspec ; extra == 'all' + - kerchunk ; extra == 'all' + - cmapfile ; extra == 'test' + - czifile ; extra == 'test' + - dask ; extra == 'test' + - fsspec ; extra == 'test' + - imagecodecs ; extra == 'test' + - kerchunk ; extra == 'test' + - lfdfiles ; extra == 'test' + - lxml ; extra == 'test' + - ndtiff ; extra == 'test' + - oiffile ; extra == 'test' + - psdtags ; extra == 'test' + - pytest ; extra == 'test' + - requests ; extra == 'test' + - roifile ; extra == 'test' + - xarray ; extra == 'test' + - zarr>=3.2.0 ; extra == 'test' + requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl + name: keyring + version: 25.7.0 + sha256: be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f + requires_dist: + - pywin32-ctypes>=0.2.0 ; sys_platform == 'win32' + - secretstorage>=3.2 ; sys_platform == 'linux' + - jeepney>=0.4.2 ; sys_platform == 'linux' + - importlib-metadata>=4.11.4 ; python_full_version < '3.12' + - jaraco-classes + - jaraco-functools + - jaraco-context + - pytest>=6,!=8.1.* ; extra == 'test' + - pyfakefs ; extra == 'test' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - pytest-enabler>=3.4 ; extra == 'enabler' + - pytest-mypy>=1.0.1 ; extra == 'type' + - pygobject-stubs ; extra == 'type' + - shtab ; extra == 'type' + - types-pywin32 ; extra == 'type' + - shtab>=1.1.0 ; extra == 'completion' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl + name: platformdirs + version: 4.10.0 + sha256: fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/81/f3/d7b4c8c9b6657ff0db27b739894ed0665fa8f3c78a7452bf74d6447f6865/zipstream_new-1.1.8-py3-none-any.whl + name: zipstream-new + version: 1.1.8 + sha256: 0662eb3ebe764fa168a5883cd8819ef83b94bd9e39955537188459d2264a7f60 +- pypi: https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl + name: rich + version: 15.0.0 + sha256: 33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb + requires_dist: + - ipywidgets>=7.5.1,<9 ; extra == 'jupyter' + - markdown-it-py>=2.2.0 + - pygments>=2.13.0,<3.0.0 + requires_python: '>=3.9.0' +- pypi: https://files.pythonhosted.org/packages/84/0c/b3288ee003c344356cd505ba8d85286e8f0d4d4177a13d8eed7db6e7c688/planemo-0.75.44-py3-none-any.whl + name: planemo + version: 0.75.44 + sha256: 9c167c35f84fd15227ef5af81c80c761768b6a2feecf99724e8eb12b8a146906 + requires_dist: + - allure-python-commons + - bioblend>=1.6.0 + - click!=8.0.2 + - cryptography>=46.0.3 + - cwltool>=1.0.20191225192155 + - ephemeris>=0.10.3 + - galaxy-job-config-init>=0.1.4 + - galaxy-tool-util[edam,extended-assertions]>=25.1,<26.1 + - galaxy-util[template]>=24.1,<26.1 + - glob2 + - gxformat2>=0.25.0 + - h5py + - jinja2 + - lxml + - oyaml + - packaging + - pathvalidate + - pydantic>=2 + - pyyaml + - ruamel-yaml + - virtualenv + - stdlib-list ; python_full_version < '3.10' + - tabulate + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: pyyaml + version: 6.0.3 + sha256: ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/8e/b4/23f8462c72e514563f5fd949e38a9e45bcc86fb59bf4b88240ba0ef02026/cwl_utils-0.42-py3-none-any.whl + name: cwl-utils + version: '0.42' + sha256: 3ded53f626268d1113895f59e91a6ce2d8a1568823b4db506b4814ae2e4904c4 + requires_dist: + - cwl-upgrader>=1.2.3 + - packaging + - rdflib + - requests + - ruamel-yaml>=0.17.6,<0.20 + - schema-salad>=8.8.20250205075315,<9 + - typing-extensions>=4.10.0 + - cwlformat ; extra == 'pretty' + - cwlformat ; extra == 'testing' + - cwltool ; extra == 'testing' + - jsonschema>=4.21.1 ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-mock>=1.10.0 ; extra == 'testing' + - pytest-xdist[psutil] ; extra == 'testing' + - pytest<10 ; extra == 'testing' + - udocker ; extra == 'testing' + requires_python: '>=3.10,<3.15' +- pypi: https://files.pythonhosted.org/packages/8e/fb/2c4c618185be2bda327f9dacd16b3122cc938809f19df7be840595d0e584/prov-1.5.1-py2.py3-none-any.whl + name: prov + version: 1.5.1 + sha256: 5c930cbbd05424aa3066d336dc31d314dd9fa0280caeab064288e592ed716bea + requires_dist: + - lxml + - networkx + - python-dateutil + - rdflib>=4.2.1 + - six>=1.9.0 + - pydot>=1.2.0 ; extra == 'dot' +- pypi: https://files.pythonhosted.org/packages/92/7a/8017d45e513c720ee82bf062b1be3ae39087db3024571b4a00773e17c235/galaxy_job_config_init-0.1.4-py3-none-any.whl + name: galaxy-job-config-init + version: 0.1.4 + sha256: d9db27a0dee86da4adc22a35ec9a97b631a921d9a4eb9fba199cbfdc6cbaf35f + requires_dist: + - typing-extensions + - jinja2 + - pyyaml + - backports-strenum ; python_full_version < '3.11' + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/94/95/7f522393c88313336b20d70fc849555757b2e5febc22b83b3a3f0fd4bce9/matplotlib-3.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: matplotlib version: 3.11.0 @@ -3683,11 +4710,204 @@ packages: - pyparsing>=3 - python-dateutil>=2.7 requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/96/9a/982e48afcffcd727a9144506720ffd4224b6b7e355c98641866f38b7c043/jaraco_functools-4.5.0-py3-none-any.whl + name: jaraco-functools + version: 4.5.0 + sha256: 79ce39246eddbde4b3a03b77ea5f0f7878dc669b166a66cf3fa8e266aa3fa2f4 + requires_dist: + - more-itertools + - pytest>=6,!=8.1.* ; extra == 'test' + - jaraco-classes ; extra == 'test' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-checkdocs>=2.14 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - pytest-enabler>=3.4 ; extra == 'enabler' + - pytest-mypy>=1.0.1 ; platform_python_implementation != 'PyPy' and extra == 'type' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/96/c2/2a1605af41829cd2a247271b5b6f6b2dbc2e9407df2dd9bcafdceafcd4b3/ct3-3.4.0.post5.tar.gz + name: ct3 + version: 3.4.0.post5 + sha256: 1c5f2000d52d591703c74f6f5f7ef427ed1b6501be28e3f1634f62c3a5d792e1 + requires_dist: + - markdown ; extra == 'filters' + - markdown ; extra == 'markdown' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- pypi: https://files.pythonhosted.org/packages/97/1b/295bf2fa3e740131778065e5ffa2c481f0e7210182d408e9a2c244ff5b0c/readme_renderer-45.0-py3-none-any.whl + name: readme-renderer + version: '45.0' + sha256: 3385ed220117104a2bceb4a9dac8c5fdf6d1f96890d7ea2a9c7174fd5c84091f + requires_dist: + - nh3>=0.2.14 + - docutils>=0.21.2 + - pygments>=2.5.1 + - comrak>=0.0.11 ; extra == 'md' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl name: charset-normalizer version: 3.4.7 sha256: c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0 requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl + name: tabulate + version: 0.10.0 + sha256: f0b0622e567335c8fabaaa659f1b33bcb6ddfe2e496071b743aa113f8774f2d3 + requires_dist: + - wcwidth ; extra == 'widechars' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/9a/70/875f4a23bfc4731703a5835487d0d2fb999031bd415e7d17c0ae615c18b7/pathvalidate-3.3.1-py3-none-any.whl + name: pathvalidate + version: 3.3.1 + sha256: 5263baab691f8e1af96092fa5137ee17df5bdfbd6cff1fcac4d6ef4bc2e1735f + requires_dist: + - sphinx-rtd-theme>=1.2.2 ; extra == 'docs' + - sphinx>=2.4 ; extra == 'docs' + - urllib3<2 ; extra == 'docs' + - readmemaker>=1.2.0 ; extra == 'readme' + - path>=13,<18 ; extra == 'readme' + - allpairspy>=2 ; extra == 'test' + - click>=6.2 ; extra == 'test' + - faker>=1.0.8 ; extra == 'test' + - pytest>=6.0.1 ; extra == 'test' + - pytest-md-report>=0.6.2 ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/9b/22/adf66990e63584a68dfb50c24f48a125c07b1699899381c8151e63ed458c/cryptography-49.0.0-cp311-abi3-macosx_11_0_arm64.whl + name: cryptography + version: 49.0.0 + sha256: 966fe0e9c67490071f14c0d2b1cb2dfb3023c5ce39457343931415f08382f2db + requires_dist: + - cffi>=2.0.0 ; platform_python_implementation != 'PyPy' + - typing-extensions>=4.13.2 ; python_full_version < '3.11' + - bcrypt>=3.1.5 ; extra == 'ssh' + requires_python: '>=3.9,!=3.9.0,!=3.9.1' +- pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl + name: setuptools + version: 82.0.1 + sha256: a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb + requires_dist: + - pytest>=6,!=8.1.* ; extra == 'test' + - virtualenv>=13.0.0 ; extra == 'test' + - wheel>=0.44.0 ; extra == 'test' + - pip>=19.1 ; extra == 'test' + - packaging>=24.2 ; extra == 'test' + - jaraco-envs>=2.2 ; extra == 'test' + - pytest-xdist>=3 ; extra == 'test' + - jaraco-path>=3.7.2 ; extra == 'test' + - build[virtualenv]>=1.0.3 ; extra == 'test' + - filelock>=3.4.0 ; extra == 'test' + - ini2toml[lite]>=0.14 ; extra == 'test' + - tomli-w>=1.0.0 ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-perf ; sys_platform != 'cygwin' and extra == 'test' + - jaraco-develop>=7.21 ; python_full_version >= '3.9' and sys_platform != 'cygwin' and extra == 'test' + - pytest-home>=0.5 ; extra == 'test' + - pytest-subprocess ; extra == 'test' + - pyproject-hooks!=1.1 ; extra == 'test' + - jaraco-test>=5.5 ; extra == 'test' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pygments-github-lexers==0.0.5 ; extra == 'doc' + - sphinx-favicon ; extra == 'doc' + - sphinx-inline-tabs ; extra == 'doc' + - sphinx-reredirects ; extra == 'doc' + - sphinxcontrib-towncrier ; extra == 'doc' + - sphinx-notfound-page>=1,<2 ; extra == 'doc' + - pyproject-hooks!=1.1 ; extra == 'doc' + - towncrier<24.7 ; extra == 'doc' + - packaging>=24.2 ; extra == 'core' + - more-itertools>=8.8 ; extra == 'core' + - jaraco-text>=3.7 ; extra == 'core' + - importlib-metadata>=6 ; python_full_version < '3.10' and extra == 'core' + - tomli>=2.0.1 ; python_full_version < '3.11' and extra == 'core' + - wheel>=0.43.0 ; extra == 'core' + - jaraco-functools>=4 ; extra == 'core' + - more-itertools ; extra == 'core' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - ruff>=0.13.0 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest-mypy ; extra == 'type' + - mypy==1.18.* ; extra == 'type' + - importlib-metadata>=7.0.2 ; python_full_version < '3.10' and extra == 'type' + - jaraco-develop>=7.21 ; sys_platform != 'cygwin' and extra == 'type' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + name: networkx + version: 3.6.1 + sha256: d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762 + requires_dist: + - asv ; extra == 'benchmarking' + - virtualenv ; extra == 'benchmarking' + - numpy>=1.25 ; extra == 'default' + - scipy>=1.11.2 ; extra == 'default' + - matplotlib>=3.8 ; extra == 'default' + - pandas>=2.0 ; extra == 'default' + - pre-commit>=4.1 ; extra == 'developer' + - mypy>=1.15 ; extra == 'developer' + - sphinx>=8.0 ; extra == 'doc' + - pydata-sphinx-theme>=0.16 ; extra == 'doc' + - sphinx-gallery>=0.18 ; extra == 'doc' + - numpydoc>=1.8.0 ; extra == 'doc' + - pillow>=10 ; extra == 'doc' + - texext>=0.6.7 ; extra == 'doc' + - myst-nb>=1.1 ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - osmnx>=2.0.0 ; extra == 'example' + - momepy>=0.7.2 ; extra == 'example' + - contextily>=1.6 ; extra == 'example' + - seaborn>=0.13 ; extra == 'example' + - cairocffi>=1.7 ; extra == 'example' + - igraph>=0.11 ; extra == 'example' + - scikit-learn>=1.5 ; extra == 'example' + - iplotx>=0.9.0 ; extra == 'example' + - lxml>=4.6 ; extra == 'extra' + - pygraphviz>=1.14 ; extra == 'extra' + - pydot>=3.0.1 ; extra == 'extra' + - sympy>=1.10 ; extra == 'extra' + - build>=0.10 ; extra == 'release' + - twine>=4.0 ; extra == 'release' + - wheel>=0.40 ; extra == 'release' + - changelist==0.5 ; extra == 'release' + - pytest>=7.2 ; extra == 'test' + - pytest-cov>=4.0 ; extra == 'test' + - pytest-xdist>=3.0 ; extra == 'test' + - pytest-mpl ; extra == 'test-extras' + - pytest-randomly ; extra == 'test-extras' + requires_python: '>=3.11,!=3.14.1' +- pypi: https://files.pythonhosted.org/packages/9e/e9/1a19e42cd43cc1365e127db6aae85e1c671da1d9a5d746f4d34a50edb577/h5py-3.16.0-cp312-cp312-manylinux_2_28_x86_64.whl + name: h5py + version: 3.16.0 + sha256: dfc21898ff025f1e8e67e194965a95a8d4754f452f83454538f98f8a3fcb207e + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/9f/27/3c3e5398fa49227b2dd67211b4402c84ed9d5b48a4257bf5b1196f9b6a8e/ct3-3.4.0.post5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl + name: ct3 + version: 3.4.0.post5 + sha256: 3be2cd9d24b6c6741e90c3f854b20dd019b0c47f7887962972a515b92c35204e + requires_dist: + - markdown ; extra == 'filters' + - markdown ; extra == 'markdown' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl + name: flake8 + version: 7.3.0 + sha256: b9696257b9ce8beb888cdbe31cf885c90d31928fe202be0889a7cdafad32f01e + requires_dist: + - mccabe>=0.7.0,<0.8.0 + - pycodestyle>=2.14.0,<2.15.0 + - pyflakes>=3.4.0,<3.5.0 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl name: requests version: 2.34.2 @@ -3700,6 +4920,19 @@ packages: - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' - chardet>=3.0.2,<8 ; extra == 'use-chardet-on-py3' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl + name: frozenlist + version: 1.8.0 + sha256: 4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl + name: coloredlogs + version: 15.0.1 + sha256: 612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934 + requires_dist: + - humanfriendly>=9.1 + - capturer>=2.4 ; extra == 'cron' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' - pypi: https://files.pythonhosted.org/packages/ac/1f/d10d6ad23c86c62d90d867d0506881a392ec6ef06885b858eaab868dd356/deeptoolsintervals-0.1.9.tar.gz name: deeptoolsintervals version: 0.1.9 @@ -3768,16 +5001,177 @@ packages: - pooch>=1.8.0 ; extra == 'tests' - conda-lock==3.0.1 ; extra == 'maintenance' requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/ac/3e/61d11b779e4e83ee8661439af070f6f138060cd41f0346a0a70432f9e55c/cwl_upgrader-1.2.15-py3-none-any.whl + name: cwl-upgrader + version: 1.2.15 + sha256: 42ae4546a433a7439f56282942e3a9369d08d9a2ad31d86cddb1bb298e28640d + requires_dist: + - ruamel-yaml>=0.16.0,<0.20 + - schema-salad + - pytest<10 ; extra == 'testing' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl + name: pydantic-core + version: 2.46.4 + sha256: 23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462 + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl + name: jeepney + version: 0.9.0 + sha256: 97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 + requires_dist: + - pytest ; extra == 'test' + - pytest-trio ; extra == 'test' + - pytest-asyncio>=0.17 ; extra == 'test' + - testpath ; extra == 'test' + - trio ; extra == 'test' + - async-timeout ; python_full_version < '3.11' and extra == 'test' + - trio ; extra == 'trio' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + name: mdurl + version: 0.1.2 + sha256: 84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl + name: markdown-it-py + version: 4.2.0 + sha256: 9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a + requires_dist: + - mdurl~=0.1 + - psutil ; extra == 'benchmarking' + - pytest ; extra == 'benchmarking' + - pytest-benchmark ; extra == 'benchmarking' + - commonmark~=0.9 ; extra == 'compare' + - markdown~=3.4 ; extra == 'compare' + - mistletoe~=1.0 ; extra == 'compare' + - mistune~=3.0 ; extra == 'compare' + - panflute~=2.3 ; extra == 'compare' + - markdown-it-pyrs ; extra == 'compare' + - linkify-it-py>=1,<3 ; extra == 'linkify' + - mdit-py-plugins>=0.5.0 ; extra == 'plugins' + - gprof2dot ; extra == 'profiling' + - mdit-py-plugins>=0.5.0 ; extra == 'rtd' + - myst-parser ; extra == 'rtd' + - pyyaml ; extra == 'rtd' + - sphinx ; extra == 'rtd' + - sphinx-copybutton ; extra == 'rtd' + - sphinx-design ; extra == 'rtd' + - sphinx-book-theme~=1.0 ; extra == 'rtd' + - jupyter-sphinx ; extra == 'rtd' + - ipykernel ; extra == 'rtd' + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-regressions ; extra == 'testing' + - pytest-timeout ; extra == 'testing' + - requests ; extra == 'testing' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/b4/97/0535f7d3f45d3853f79a11988d8faf798de684d902579126449455506e2f/ephemeris-0.10.11-py2.py3-none-any.whl + name: ephemeris + version: 0.10.11 + sha256: a6ec62371ccc519ebab9aefa1d49bd1d396218a3ebced1760ae5ace77dd93f2f + requires_dist: + - six>=1.9.0 + - pyyaml + - bioblend>=0.10.0 + - jinja2 + - galaxy-tool-util>=20.9.1 + - galaxy-util>=20.9.0 + - pysam + - rich + - setuptools + - pydantic>=2.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b4/c9/7d293a9ea42ef05d6260714f8cf641ba64fab438be55312b1c719d4e7cc6/fissix-24.4.24-py3-none-any.whl + name: fissix + version: 24.4.24 + sha256: be7f5c66e9e212bd9b3365c9e8f2453e973d0a645f31c8eba842724adb4c0c50 + requires_dist: + - appdirs>=1.4.4 + - attribution==1.7.1 ; extra == 'dev' + - black==24.4.0 ; extra == 'dev' + - flit==3.9.0 ; extra == 'dev' + - isort==5.8.0 ; extra == 'dev' + - pytest==8.1.1 ; extra == 'dev' + - sphinx==7.3.7 ; extra == 'docs' + - sphinx-mdinclude==0.6.0 ; extra == 'docs' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl name: markupsafe version: 3.0.3 sha256: c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026 requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl + name: psutil + version: 7.2.2 + sha256: 076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 + requires_dist: + - psleak ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-instafail ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - setuptools ; extra == 'dev' + - abi3audit ; extra == 'dev' + - black ; extra == 'dev' + - check-manifest ; extra == 'dev' + - coverage ; extra == 'dev' + - packaging ; extra == 'dev' + - pylint ; extra == 'dev' + - pyperf ; extra == 'dev' + - pypinfo ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - requests ; extra == 'dev' + - rstcheck ; extra == 'dev' + - ruff ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-rtd-theme ; extra == 'dev' + - toml-sort ; extra == 'dev' + - twine ; extra == 'dev' + - validate-pyproject[all] ; extra == 'dev' + - virtualenv ; extra == 'dev' + - vulture ; extra == 'dev' + - wheel ; extra == 'dev' + - colorama ; os_name == 'nt' and extra == 'dev' + - pyreadline3 ; os_name == 'nt' and extra == 'dev' + - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' + - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' + - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' + - psleak ; extra == 'test' + - pytest ; extra == 'test' + - pytest-instafail ; extra == 'test' + - pytest-xdist ; extra == 'test' + - setuptools ; extra == 'test' + - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' + - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' + - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl + name: secretstorage + version: 3.5.0 + sha256: 0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 + requires_dist: + - cryptography>=2.0 + - jeepney>=0.6 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl name: six version: 1.17.0 sha256: 4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' +- pypi: https://files.pythonhosted.org/packages/b8/0c/51f6841f1d84f404f92463fc2b1ba0da357ca1e3db6b7fbda26956c3b82a/ruamel_yaml-0.19.1-py3-none-any.whl + name: ruamel-yaml + version: 0.19.1 + sha256: 27592957fedf6e0b62f281e96effd28043345e0e66001f97683aa9a40c667c93 + requires_dist: + - ruamel-yaml-clib ; platform_python_implementation == 'CPython' and extra == 'oldlibyaml' + - ruamel-yaml-clibz>=0.3.7 ; platform_python_implementation == 'CPython' and extra == 'libyaml' + - ruamel-yaml-jinja2>=0.2 ; extra == 'jinja2' + - ryd ; extra == 'docs' + - mercurial>5.7 ; extra == 'docs' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl name: pillow version: 12.2.0 @@ -3810,11 +5204,35 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ba/b1/5297bb6a7df4782f7605bffc43b31f5044070935fbbcaa6c705a07e6ac65/yarl-1.24.2-cp314-cp314-macosx_11_0_arm64.whl + name: yarl + version: 1.24.2 + sha256: 0c3063e5c0a8e8e62fae6c2596fa01da1561e4cd1da6fec5789f5cf99a8aefd8 + requires_dist: + - idna>=2.0 + - multidict>=4.0 + - propcache>=0.2.1 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/bb/6b/f4a3d0637692c49da8ef99d72d52526f92e0a8d6ac4f0ca9f31441b9d9ea/numpy-2.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: numpy version: 2.5.0 sha256: aaa760137137e8d3c920d27927748215b56014f92667dc9b6c27dfc61249255a requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/bc/dd/9e8cbd8f5582ca4b590336f2b91ee5662f6a6ca562b565abaf696a0f81ff/msgpack-1.2.1-cp312-cp312-macosx_10_13_x86_64.whl + name: msgpack + version: 1.2.1 + sha256: 2ef59c659f289eddf8aa6623823f19fa2f40a4029266889eac7a2505dd210c35 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl + name: pyproject-hooks + version: 1.2.0 + sha256: 9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl + name: pyyaml + version: 6.0.3 + sha256: 34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310 + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl name: contourpy version: 1.3.3 @@ -3840,11 +5258,25 @@ packages: - pytest-xdist ; extra == 'test-no-images' - wurlitzer ; extra == 'test-no-images' requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/bf/1d/fcefb70922ea2268a8971d8e5874d9a8218644200fb8465f1dcad55e6851/yarl-1.24.2-cp312-cp312-macosx_10_13_x86_64.whl + name: yarl + version: 1.24.2 + sha256: 3b075301a2836a0e297b1b658cb6d6135df535d62efefdd60366bd589c2c82f2 + requires_dist: + - idna>=2.0 + - multidict>=4.0 + - propcache>=0.2.1 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/bf/d9/405320f8077e8e1c5c4bd6adc45e1e6edf6d727b6da7f2e2533cf58bff71/kiwisolver-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl name: kiwisolver version: 1.5.0 sha256: 72ec46b7eba5b395e0a7b63025490d3214c11013f4aacb4f5e8d6c3041829588 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl + name: pyflakes + version: 3.4.0 + sha256: f742a7dbd0d9cb9ea41e9a24a918996e8170c799fa528688d40dd582c8265f4f + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl name: sphinxcontrib-jsmath version: 1.0.1 @@ -3854,11 +5286,70 @@ packages: - flake8 ; extra == 'test' - mypy ; extra == 'test' requires_python: '>=3.5' +- pypi: https://files.pythonhosted.org/packages/c2/82/280619e0bd7bf2454987e19282616e84762255dd9c8468f62382e8c191f1/aiohttp-3.14.1-cp312-cp312-macosx_10_13_x86_64.whl + name: aiohttp + version: 3.14.1 + sha256: bcfb80a2cc36fba2534e5e5b5264dc7ae6fcd9bf15256da3e53d2f499e6fa29d + requires_dist: + - aiohappyeyeballs>=2.5.0 + - aiosignal>=1.4.0 + - async-timeout>=4.0,<6.0 ; python_full_version < '3.11' + - attrs>=17.3.0 + - frozenlist>=1.1.1 + - multidict>=4.5,<7.0 + - propcache>=0.2.0 + - typing-extensions>=4.4 ; python_full_version < '3.13' + - yarl>=1.17.0,<2.0 + - aiodns>=3.3.0 ; sys_platform != 'android' and sys_platform != 'ios' and extra == 'speedups' + - brotli>=1.2 ; platform_python_implementation == 'CPython' and sys_platform != 'android' and sys_platform != 'ios' and extra == 'speedups' + - brotlicffi>=1.2 ; platform_python_implementation != 'CPython' and extra == 'speedups' + - backports-zstd ; python_full_version < '3.14' and platform_python_implementation == 'CPython' and sys_platform != 'android' and sys_platform != 'ios' and extra == 'speedups' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: kiwisolver version: 1.5.0 sha256: bb5136fb5352d3f422df33f0c879a1b0c204004324150cc3b5e3c4f310c9049f requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl + name: click + version: 8.4.1 + sha256: 482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2 + requires_dist: + - colorama ; sys_platform == 'win32' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/c8/c0/5d4119dba94093bbafede500d3defd2f5eab7897732998c04b54021e530b/h5py-3.16.0-cp312-cp312-macosx_10_13_x86_64.whl + name: h5py + version: 3.16.0 + sha256: c5313566f4643121a78503a473f0fb1e6dcc541d5115c44f05e037609c565c4d + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + name: iniconfig + version: 2.3.0 + sha256: f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/cc/2f/7229e91cfa37459622808002bec6eb019c7189bfc59788b3eaba5f273671/conda_package_streaming-0.13.0-py3-none-any.whl + name: conda-package-streaming + version: 0.13.0 + sha256: 806ea3f2f7ac272873242e6253d543ac8aaf224e5c76d794e5fee9c63776fb5c + requires_dist: + - requests + - backports-zstd ; python_full_version < '3.14' + - furo ; extra == 'docs' + - sphinx ; extra == 'docs' + - myst-parser ; extra == 'docs' + - mdit-py-plugins>=0.3.0 ; extra == 'docs' + - pytest>=7 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - boto3 ; extra == 'test' + - boto3-stubs[essential] ; extra == 'test' + - bottle ; extra == 'test' + - conda ; extra == 'test' + - conda-package-handling>=2 ; extra == 'test' + - responses ; extra == 'test' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: contourpy version: 1.3.3 @@ -3884,11 +5375,53 @@ packages: - pytest-xdist ; extra == 'test-no-images' - wurlitzer ; extra == 'test-no-images' requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl + name: pydantic-core + version: 2.46.4 + sha256: 3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2 + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/cf/f4/672930ad51bbc135f51cac89577155f1d0c2d120375fc77978d3aa071bb7/pybigwig-0.3.25.tar.gz name: pybigwig version: 0.3.25 sha256: 8c717b0222e6677956fd659c8a21650983679ffb3314427d7f68d2910fad202a requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl + name: pyyaml + version: 6.0.3 + sha256: 7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/d4/74/3d6534c6ce0802bf085a32908b093e6a4123443050299bcc6e3828a9bf3e/cwltool-3.2.20260413085819-py3-none-any.whl + name: cwltool + version: 3.2.20260413085819 + sha256: 2ed9b586b2d9cda0870a3c2b9cba958943ef3fde53805f935cb20888dc8b87a3 + requires_dist: + - requests>=2.6.1 + - ruamel-yaml>=0.16,<0.20 + - rdflib>=4.2.2,<7.7.0 + - schema-salad>=8.9,<9 + - prov==1.5.1 + - mypy-extensions + - psutil>=5.6.6 + - coloredlogs + - pydot>=1.4.1 + - argcomplete>=1.12.0 + - pyparsing!=3.0.2 + - cwl-utils>=0.41 + - spython>=0.3.0 + - rich-argparse + - pygments>=2.20.0 + - typing-extensions>=4.1.0 + - galaxy-tool-util>=22.1.2,!=23.0.1,!=23.0.2,!=23.0.3,!=23.0.4,!=23.0.5,<26.1 ; extra == 'deps' + - galaxy-util<26.1 ; extra == 'deps' + - pillow ; extra == 'deps' + requires_python: '>=3.10,<3.15' +- pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl + name: pycodestyle + version: 2.14.0 + sha256: dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/d7/88/b72def7262e150d16be13fca37a96481138d624e700340bc3362a7588929/scipy-1.18.0-cp314-cp314-macosx_12_0_arm64.whl name: scipy version: 1.18.0 @@ -3935,6 +5468,19 @@ packages: - ruff>=0.12.0 ; extra == 'dev' - cython-lint>=0.12.2 ; extra == 'dev' requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/d7/a5/bbbc3b74a94fbdbd7915e7ad030f16539bfdc1362f7e9003b594f0537950/glob2-0.7.tar.gz + name: glob2 + version: '0.7' + sha256: 85c3dbd07c8aa26d63d7aacee34fa86e9a91a3873bc30bf62ec46e531f92ab8c +- pypi: https://files.pythonhosted.org/packages/d9/b0/1e05aa4e0124cbc6509641353f513fc29c2b5e5197dbd5dfade810a521cf/galaxy_tool_util_models-26.0.1-py3-none-any.whl + name: galaxy-tool-util-models + version: 26.0.1 + sha256: b14e5619cec2fc4375dc355ec2d812168935cd97e4249dcd8ffa5c8d592db843 + requires_dist: + - pydantic>=2.7.4 + - typing-extensions + - pytest ; extra == 'test' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/da/17/f5276b496c61477a6c4fc5e7401f4bfe1c2e5ef7c6cd67896f2ade3809cb/matplotlib-3.11.0-cp312-cp312-macosx_10_13_x86_64.whl name: matplotlib version: 3.11.0 @@ -3950,6 +5496,18 @@ packages: - pyparsing>=3 - python-dateutil>=2.7 requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl + name: future + version: 1.0.0 + sha256: 929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216 + requires_python: '>=2.6,!=3.0.*,!=3.1.*,!=3.2.*' +- pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + name: typing-inspection + version: 0.4.2 + sha256: 4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 + requires_dist: + - typing-extensions>=4.12.0 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/dd/aa/1b939f6c67ed68635bb538e6752d3dacc02f66535182e939a89581a44e9c/scipy-1.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: scipy version: 1.18.0 @@ -4001,6 +5559,24 @@ packages: version: '26.2' sha256: 5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/e3/78/47a205b5921bd86ef8d174fcda3daf23d65ad2887b38771935a064acd348/gxformat2-0.27.0-py3-none-any.whl + name: gxformat2 + version: 0.27.0 + sha256: 2e8a90b649ddecc7d1662b2ab75b942b895bae9536fec1f8b6f71e27fe4fe4c6 + requires_dist: + - eval-type-backport ; python_full_version < '3.10' + - pydantic>=2.0 + - pyyaml + - requests + - schema-salad>8.7.20241010092723 + - typing-extensions + - bioblend ; extra == 'bioblend' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/e6/13/b8ae04c59392f8d11c6cd9fb4011d1dc7c86b81225c770280300e259ffe1/propcache-0.5.2-cp312-cp312-macosx_10_13_x86_64.whl + name: propcache + version: 0.5.2 + sha256: db2b80ea58eab4f86b2beec3cc8b39e8ff9276ac20e96b7cce43c8ae84cd6b5a + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl name: cycler version: 0.12.1 @@ -4014,6 +5590,86 @@ packages: - pytest-cov ; extra == 'tests' - pytest-xdist ; extra == 'tests' requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl + name: psutil + version: 7.2.2 + sha256: ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 + requires_dist: + - psleak ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-instafail ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - setuptools ; extra == 'dev' + - abi3audit ; extra == 'dev' + - black ; extra == 'dev' + - check-manifest ; extra == 'dev' + - coverage ; extra == 'dev' + - packaging ; extra == 'dev' + - pylint ; extra == 'dev' + - pyperf ; extra == 'dev' + - pypinfo ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - requests ; extra == 'dev' + - rstcheck ; extra == 'dev' + - ruff ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-rtd-theme ; extra == 'dev' + - toml-sort ; extra == 'dev' + - twine ; extra == 'dev' + - validate-pyproject[all] ; extra == 'dev' + - virtualenv ; extra == 'dev' + - vulture ; extra == 'dev' + - wheel ; extra == 'dev' + - colorama ; os_name == 'nt' and extra == 'dev' + - pyreadline3 ; os_name == 'nt' and extra == 'dev' + - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' + - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' + - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'dev' + - psleak ; extra == 'test' + - pytest ; extra == 'test' + - pytest-instafail ; extra == 'test' + - pytest-xdist ; extra == 'test' + - setuptools ; extra == 'test' + - pywin32 ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' + - wheel ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' + - wmi ; implementation_name != 'pypy' and os_name == 'nt' and extra == 'test' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/e8/3d/1087453384dbde46a8c7f9356eead2c58be8a7bf156bca40243377c85715/more_itertools-11.1.0-py3-none-any.whl + name: more-itertools + version: 11.1.0 + sha256: 4b65538ae22f6fed0ce4874efd317463a7489796a0939fa66824dd542125a192 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e9/a7/248e1aebe0c7810b0271e021a0f2a5eb6e78a051885b3c9df49f42a5802d/aiohttp-3.14.1-cp314-cp314-macosx_11_0_arm64.whl + name: aiohttp + version: 3.14.1 + sha256: 07eabb979d236335fed927e137a928c9adfb7df3b9ec7aa31726f133a62be983 + requires_dist: + - aiohappyeyeballs>=2.5.0 + - aiosignal>=1.4.0 + - async-timeout>=4.0,<6.0 ; python_full_version < '3.11' + - attrs>=17.3.0 + - frozenlist>=1.1.1 + - multidict>=4.5,<7.0 + - propcache>=0.2.0 + - typing-extensions>=4.4 ; python_full_version < '3.13' + - yarl>=1.17.0,<2.0 + - aiodns>=3.3.0 ; sys_platform != 'android' and sys_platform != 'ios' and extra == 'speedups' + - brotli>=1.2 ; platform_python_implementation == 'CPython' and sys_platform != 'android' and sys_platform != 'ios' and extra == 'speedups' + - brotlicffi>=1.2 ; platform_python_implementation != 'CPython' and extra == 'speedups' + - backports-zstd ; python_full_version < '3.14' and platform_python_implementation == 'CPython' and sys_platform != 'android' and sys_platform != 'ios' and extra == 'speedups' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl + name: cffi + version: 2.0.0 + sha256: 6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d + requires_dist: + - pycparser ; implementation_name != 'PyPy' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/ec/17/d9ad109c8d7f05e6e78a79c4ec410ad3d38877b3efe18896eae6c446b534/edam_ontology-1.25.3-py3-none-any.whl + name: edam-ontology + version: 1.25.3 + sha256: cdea906b7885b5e553e924425ba4fb708826dfcb8a2cf186af57725998fcf8c5 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl name: python-dateutil version: 2.9.0.post0 @@ -4026,6 +5682,82 @@ packages: version: 2026.6.17 sha256: 2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/ef/79/c45f2d53efe6ada1110cf6f9fca095e4ff47a0454444aefdde6ac4789179/cachecontrol-0.14.4-py3-none-any.whl + name: cachecontrol + version: 0.14.4 + sha256: b7ac014ff72ee199b5f8af1de29d60239954f223e948196fa3d84adaffc71d2b + requires_dist: + - requests>=2.16.0 + - msgpack>=0.5.2,<2.0.0 + - cachecontrol[filecache,redis] ; extra == 'dev' + - cherrypy ; extra == 'dev' + - cheroot>=11.1.2 ; extra == 'dev' + - codespell ; extra == 'dev' + - furo ; extra == 'dev' + - mypy ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - ruff ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-copybutton ; extra == 'dev' + - types-redis ; extra == 'dev' + - types-requests ; extra == 'dev' + - filelock>=3.8.0 ; extra == 'filecache' + - redis>=2.10.5 ; extra == 'redis' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl + name: humanfriendly + version: '10.0' + sha256: 1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477 + requires_dist: + - monotonic ; python_full_version == '2.7.*' + - pyreadline ; python_full_version < '3.8' and sys_platform == 'win32' + - pyreadline3 ; python_full_version >= '3.8' and sys_platform == 'win32' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' +- pypi: https://files.pythonhosted.org/packages/f1/4f/733c48f270565d78b4544f2baddc2fb2a245e5a8640254b12c36ac7ac68e/multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl + name: multidict + version: 6.7.1 + sha256: 0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1 + requires_dist: + - typing-extensions>=4.1.0 ; python_full_version < '3.11' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/f2/58/bc8954bda5fcda97bd7c19be11b85f91973d67a706ed4a3aec33e7de22db/jaraco_context-6.1.2-py3-none-any.whl + name: jaraco-context + version: 6.1.2 + sha256: bf8150b79a2d5d91ae48629d8b427a8f7ba0e1097dd6202a9059f29a36379535 + requires_dist: + - backports-tarfile ; python_full_version < '3.12' + - pytest>=6,!=8.1.* ; extra == 'test' + - jaraco-test>=5.6.0 ; extra == 'test' + - portend ; extra == 'test' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-checkdocs>=2.14 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - pytest-enabler>=3.4 ; extra == 'enabler' + - pytest-mypy>=1.0.1 ; platform_python_implementation != 'PyPy' and extra == 'type' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/f3/8d/5e5be3ced1d12966fefb5c4ea3b2a5b480afcea36406559442c6e31d4a48/multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: multidict + version: 6.7.1 + sha256: bfde23ef6ed9db7eaee6c37dcec08524cb43903c60b285b172b6c094711b3961 + requires_dist: + - typing-extensions>=4.1.0 ; python_full_version < '3.11' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/f3/ab/a7653bce9a3b204be6a6931767a9e23595807bb84790ce6685e4d7e5bd08/nh3-0.3.6-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl + name: nh3 + version: 0.3.6 + sha256: a43ebd7543555c3ac1bc353023d0794e75cb76f6f18f19c32e95441496c0cc25 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl + name: webencodings + version: 0.5.1 + sha256: a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl name: pygments version: 2.20.0 @@ -4033,11 +5765,43 @@ packages: requires_dist: - colorama>=0.4.6 ; extra == 'windows-terminal' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/f9/38/8b6fc7a8153cb49eb3a9a13acfa9eeb6cc476e37888781e593e6f02ac05e/spython-0.3.14-py3-none-any.whl + name: spython + version: 0.3.14 + sha256: 72968583e498bc2a51f9acd0ed6bc0d7d1f7ccd491feaba5e2f7d944bc51da3a - pypi: https://files.pythonhosted.org/packages/fa/0a/11486d02add7b1384dff7374d124b1cfbb0ee864dcc9f6a2c0380638cf84/numpy-2.5.0-cp312-cp312-macosx_10_13_x86_64.whl name: numpy version: 2.5.0 sha256: 489780423903667933b4ed6197b6ec3b75ea5dd17d1d8f0f38d798feb6921561 requires_python: '>=3.12' +- pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl + name: aiosignal + version: 1.4.0 + sha256: 053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e + requires_dist: + - frozenlist>=1.1.0 + - typing-extensions>=4.2 ; python_full_version < '3.13' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + name: pydantic + version: 2.13.4 + sha256: 45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba + requires_dist: + - annotated-types>=0.6.0 + - pydantic-core==2.46.4 + - typing-extensions>=4.14.1 + - typing-inspection>=0.4.2 + - email-validator>=2.0.0 ; extra == 'email' + - tzdata ; python_full_version >= '3.9' and sys_platform == 'win32' and extra == 'timezone' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fd/99/757a48b4ace0097b63550597db28f58da0b91d89889f98b34b30f272c0bf/ct3-3.4.0.post5-cp314-cp314-macosx_11_0_arm64.whl + name: ct3 + version: 3.4.0.post5 + sha256: 9611a4052fd76df8bd8961be0f8d94150908f712f910fcf22b2ceddae8f1882a + requires_dist: + - markdown ; extra == 'filters' + - markdown ; extra == 'markdown' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' - pypi: https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl name: contourpy version: 1.3.3 @@ -4072,3 +5836,17 @@ packages: - patchelf ; extra == 'patchelf' - ziglang>=0.10.0 ; extra == 'zig' requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/fe/cf/18ef143a81610136d3da8193da9d80bfe1cb548a1e2d1c775f26b23d024a/multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl + name: multidict + version: 6.7.1 + sha256: 3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd + requires_dist: + - typing-extensions>=4.1.0 ; python_full_version < '3.11' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl + name: rfc3986 + version: 2.0.0 + sha256: 50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd + requires_dist: + - idna ; extra == 'idna2008' + requires_python: '>=3.7' diff --git a/pydeeptools/deeptools/bamPEFragmentSize.py b/pydeeptools/deeptools/bamPEFragmentSize.py index fab0b96022..9569abbe66 100755 --- a/pydeeptools/deeptools/bamPEFragmentSize.py +++ b/pydeeptools/deeptools/bamPEFragmentSize.py @@ -3,114 +3,152 @@ import argparse import sys -import numpy as np import matplotlib -matplotlib.use('Agg') -matplotlib.rcParams['pdf.fonttype'] = 42 -matplotlib.rcParams['svg.fonttype'] = 'none' +import numpy as np + +matplotlib.use("Agg") +matplotlib.rcParams["pdf.fonttype"] = 42 +matplotlib.rcParams["svg.fonttype"] = "none" +from importlib.metadata import version + import matplotlib.pyplot as plt +from deeptools.getFragmentAndReadSize import get_read_and_fragment_length + # own tools from deeptools.parserCommon import writableFile -from deeptools.getFragmentAndReadSize import get_read_and_fragment_length -from importlib.metadata import version + def parse_arguments(): parser = argparse.ArgumentParser( - description='This tool calculates the fragment sizes for read pairs given a BAM file from paired-end sequencing.' - 'Several regions are sampled depending on the ' - 'size of the genome and number of processors to estimate the' - 'summary statistics on the fragment lengths. ' - 'Properly paired reads are preferred for computation, i.e., ' - 'it will only use discordant pairs if no concordant alignments ' - 'overlap with a given region. ' - 'The default setting simply prints the summary statistics to the screen.', - usage='bamPEFragmentSize -b sample1.bam sample2.bam -o hist.png\n' - 'help: bamPEFragmentSize -h / bamPEFragmentSize --help' + description="This tool calculates the fragment sizes for read pairs given a BAM file from paired-end sequencing." + "Several regions are sampled depending on the " + "size of the genome and number of processors to estimate the" + "summary statistics on the fragment lengths. " + "Properly paired reads are preferred for computation, i.e., " + "it will only use discordant pairs if no concordant alignments " + "overlap with a given region. " + "The default setting simply prints the summary statistics to the screen.", + usage="bamPEFragmentSize -b sample1.bam sample2.bam -o hist.png\n" + "help: bamPEFragmentSize -h / bamPEFragmentSize --help", + ) + parser.add_argument( + "--bamfiles", + "-b", + help="List of BAM files to process", + nargs="+", + metavar="bam files", + ) + + parser.add_argument( + "--histogram", + "-hist", + "-o", + help="Save a .png file with a histogram of the fragment length distribution.", + metavar="FILE", + ) + + parser.add_argument( + "--plotFileFormat", + metavar="FILETYPE", + help="Image format type. If given, this option " + "overrides the image format based on the plotFile " + "ending. The available options are: png, " + "eps, pdf, svg and plotly.", + default=None, + choices=["png", "pdf", "svg", "eps"], + ) + parser.add_argument( + "--ggplot", help="Use ggplot theme for figures", action="store_true" + ) + + parser.add_argument( + "--numberOfProcessors", + "-p", + help="Number of processors to use. The default is " + "to use 1. (Default: %(default)s)", + metavar="INT", + type=int, + default=1, + required=False, + ) + parser.add_argument( + "--samplesLabel", + help="Labels for the samples plotted. The " + "default is to use the file name of the " + "sample. The sample labels should be separated " + "by spaces and quoted if a label itself" + 'contains a space E.g. --samplesLabel label-1 "label 2" ', + nargs="+", + ) + parser.add_argument( + "--plotTitle", + "-T", + help="Title of the plot, to be printed on top of " + "the generated image. Leave blank for no title. (Default: %(default)s)", + default="", + ) + parser.add_argument( + "--maxFragmentLength", + help="The maximum fragment length in the histogram. A value of 0 (the default) indicates to use twice the mean fragment length. (Default: %(default)s)", + default=0, + type=int, + ) + parser.add_argument("--logScale", help="Plot on the log scale", action="store_true") + parser.add_argument( + "--binSize", + "-bs", + metavar="INT", + help="Length in bases of the window used to sample the genome. (Default: %(default)s)", + default=1000, + type=int, + ) + parser.add_argument( + "--distanceBetweenBins", + "-n", + metavar="INT", + help="To reduce the computation time, not every possible genomic " + "bin is sampled. This option allows you to set the distance " + "between bins actually sampled from. Larger numbers are sufficient " + "for high coverage samples, while smaller values are useful for " + "lower coverage samples. Note that if you specify a value that " + "results in too few (<1000) reads sampled, the value will be " + "decreased. (Default: %(default)s)", + default=1000000, + type=int, + ) + parser.add_argument( + "--blackListFileName", + "-bl", + help="A BED file containing regions that should be excluded from all analyses. Currently this works by rejecting genomic chunks that happen to overlap an entry. Consequently, for BAM files, if a read partially overlaps a blacklisted region or a fragment spans over it, then the read/fragment might still be considered.", + metavar="BED file", + required=False, + ) + parser.add_argument( + "--table", + metavar="FILE", + help="In addition to printing read and fragment length metrics to the screen, write them to the given file in tabular format.", + required=False, + ) + parser.add_argument( + "--outRawFragmentLengths", + metavar="FILE", + required=False, + type=writableFile, + help="Save the fragment (or read if the input is single-end) length and their associated number of occurrences to a tab-separated file. Columns are length, number of occurrences, and the sample label.", + ) + parser.add_argument( + "--verbose", + help="Set if processing data messages are wanted.", + action="store_true", + required=False, + ) + parser.add_argument( + "--version", + action="version", + version="%(prog)s {}".format(version("deeptools")), ) - parser.add_argument('--bamfiles', '-b', - help='List of BAM files to process', - nargs='+', - metavar='bam files') - - parser.add_argument('--histogram', '-hist', '-o', - help='Save a .png file with a histogram ' - 'of the fragment length distribution.', - metavar='FILE') - - parser.add_argument('--plotFileFormat', - metavar='FILETYPE', - help='Image format type. If given, this option ' - 'overrides the image format based on the plotFile ' - 'ending. The available options are: png, ' - 'eps, pdf, svg and plotly.', - default=None, - choices=['png', 'pdf', 'svg', 'eps']) - parser.add_argument('--ggplot', - help='Use ggplot theme for figures', - action='store_true') - - parser.add_argument('--numberOfProcessors', '-p', - help='Number of processors to use. The default is ' - 'to use 1. (Default: %(default)s)', - metavar="INT", - type=int, - default=1, - required=False) - parser.add_argument('--samplesLabel', - help='Labels for the samples plotted. The ' - 'default is to use the file name of the ' - 'sample. The sample labels should be separated ' - 'by spaces and quoted if a label itself' - 'contains a space E.g. --samplesLabel label-1 "label 2" ', - nargs='+') - parser.add_argument('--plotTitle', '-T', - help='Title of the plot, to be printed on top of ' - 'the generated image. Leave blank for no title. (Default: %(default)s)', - default='') - parser.add_argument('--maxFragmentLength', - help='The maximum fragment length in the histogram. A value of 0 (the default) indicates to use twice the mean fragment length. (Default: %(default)s)', - default=0, - type=int) - parser.add_argument('--logScale', - help='Plot on the log scale', - action='store_true') - parser.add_argument('--binSize', '-bs', - metavar='INT', - help='Length in bases of the window used to sample the genome. (Default: %(default)s)', - default=1000, - type=int) - parser.add_argument('--distanceBetweenBins', '-n', - metavar='INT', - help='To reduce the computation time, not every possible genomic ' - 'bin is sampled. This option allows you to set the distance ' - 'between bins actually sampled from. Larger numbers are sufficient ' - 'for high coverage samples, while smaller values are useful for ' - 'lower coverage samples. Note that if you specify a value that ' - 'results in too few (<1000) reads sampled, the value will be ' - 'decreased. (Default: %(default)s)', - default=1000000, - type=int) - parser.add_argument('--blackListFileName', '-bl', - help="A BED file containing regions that should be excluded from all analyses. Currently this works by rejecting genomic chunks that happen to overlap an entry. Consequently, for BAM files, if a read partially overlaps a blacklisted region or a fragment spans over it, then the read/fragment might still be considered.", - metavar="BED file", - required=False) - parser.add_argument('--table', - metavar='FILE', - help='In addition to printing read and fragment length metrics to the screen, write them to the given file in tabular format.', - required=False) - parser.add_argument('--outRawFragmentLengths', - metavar='FILE', - required=False, - type=writableFile, - help='Save the fragment (or read if the input is single-end) length and their associated number of occurrences to a tab-separated file. Columns are length, number of occurrences, and the sample label.') - parser.add_argument('--verbose', - help='Set if processing data messages are wanted.', - action='store_true', - required=False) - parser.add_argument('--version', action='version', - version='%(prog)s {}'.format(version('deeptools'))) return parser @@ -126,23 +164,33 @@ def getDensity(lengths, minVal, maxVal): def getFragSize(bam, args, idx, outRawFrags): - fragment_len_dict, read_len_dict = get_read_and_fragment_length(bam, return_lengths=True, - blackListFileName=args.blackListFileName, - numberOfProcessors=args.numberOfProcessors, - verbose=args.verbose, - binSize=args.binSize, - distanceBetweenBins=args.distanceBetweenBins) + fragment_len_dict, read_len_dict = get_read_and_fragment_length( + bam, + return_lengths=True, + blackListFileName=args.blackListFileName, + numberOfProcessors=args.numberOfProcessors, + verbose=args.verbose, + binSize=args.binSize, + distanceBetweenBins=args.distanceBetweenBins, + ) if outRawFrags: label = bam if args.samplesLabel and idx < len(args.samplesLabel): label = args.samplesLabel[idx] if fragment_len_dict: - fragment_len_dict['lengths'] = [int(x) for x in fragment_len_dict['lengths']] - cnts = np.bincount(fragment_len_dict['lengths'], minlength=int(fragment_len_dict['max']) + 1) + fragment_len_dict["lengths"] = [ + int(x) for x in fragment_len_dict["lengths"] + ] + cnts = np.bincount( + fragment_len_dict["lengths"], + minlength=int(fragment_len_dict["max"]) + 1, + ) else: - read_len_dict['lengths'] = [int(x) for x in read_len_dict['lengths']] - cnts = np.bincount(read_len_dict['lengths'], minlength=int(read_len_dict['max']) + 1) + read_len_dict["lengths"] = [int(x) for x in read_len_dict["lengths"]] + cnts = np.bincount( + read_len_dict["lengths"], minlength=int(read_len_dict["max"]) + 1 + ) for idx, v in enumerate(cnts): if v > 0: outRawFrags.write("{}\t{}\t{}\n".format(idx, v, label)) @@ -153,74 +201,98 @@ def getFragSize(bam, args, idx, outRawFrags): print("\n\nBAM file : {}".format(bam)) if fragment_len_dict: - if fragment_len_dict['mean'] == 0: - print("No pairs were found. Is the data from a paired-end sequencing experiment?") + if fragment_len_dict["mean"] == 0: + print( + "No pairs were found. Is the data from a paired-end sequencing experiment?" + ) - print("Sample size: {}\n".format(fragment_len_dict['sample_size'])) + print("Sample size: {}\n".format(fragment_len_dict["sample_size"])) print("Fragment lengths:") - print("Min.: {}\n1st Qu.: {}\nMean: {}\nMedian: {}\n" - "3rd Qu.: {}\nMax.: {}\nStd: {}".format(fragment_len_dict['min'], - fragment_len_dict['qtile25'], - fragment_len_dict['mean'], - fragment_len_dict['median'], - fragment_len_dict['qtile75'], - fragment_len_dict['max'], - fragment_len_dict['std'])) - print("MAD: {}\nLen. 10%: {}\nLen. 20%: {}\nLen. 30%: {}\nLen. 40%: {}\nLen. 60%: {}\nLen. 70%: {}\nLen. 80%: {}\nLen. 90%: {}\nLen. 99%: {}\n".format(fragment_len_dict['mad'], - fragment_len_dict['qtile10'], - fragment_len_dict['qtile20'], - fragment_len_dict['qtile30'], - fragment_len_dict['qtile40'], - fragment_len_dict['qtile60'], - fragment_len_dict['qtile70'], - fragment_len_dict['qtile80'], - fragment_len_dict['qtile90'], - fragment_len_dict['qtile99'])) + print( + "Min.: {}\n1st Qu.: {}\nMean: {}\nMedian: {}\n" + "3rd Qu.: {}\nMax.: {}\nStd: {}".format( + fragment_len_dict["min"], + fragment_len_dict["qtile25"], + fragment_len_dict["mean"], + fragment_len_dict["median"], + fragment_len_dict["qtile75"], + fragment_len_dict["max"], + fragment_len_dict["std"], + ) + ) + print( + "MAD: {}\nLen. 10%: {}\nLen. 20%: {}\nLen. 30%: {}\nLen. 40%: {}\nLen. 60%: {}\nLen. 70%: {}\nLen. 80%: {}\nLen. 90%: {}\nLen. 99%: {}\n".format( + fragment_len_dict["mad"], + fragment_len_dict["qtile10"], + fragment_len_dict["qtile20"], + fragment_len_dict["qtile30"], + fragment_len_dict["qtile40"], + fragment_len_dict["qtile60"], + fragment_len_dict["qtile70"], + fragment_len_dict["qtile80"], + fragment_len_dict["qtile90"], + fragment_len_dict["qtile99"], + ) + ) else: - print("No pairs were found. Is the data from a paired-end sequencing experiment?") + print( + "No pairs were found. Is the data from a paired-end sequencing experiment?" + ) print("\nRead lengths:") - print("Sample size: {}\n".format(read_len_dict['sample_size'])) - print("Min.: {}\n1st Qu.: {}\nMean: {}\nMedian: {}\n" - "3rd Qu.: {}\nMax.: {}\nStd: {}".format(read_len_dict['min'], - read_len_dict['qtile25'], - read_len_dict['mean'], - read_len_dict['median'], - read_len_dict['qtile75'], - read_len_dict['max'], - read_len_dict['std'])) - print("MAD: {}\nLen. 10%: {}\nLen. 20%: {}\nLen. 30%: {}\nLen. 40%: {}\nLen. 60%: {}\nLen. 70%: {}\nLen. 80%: {}\nLen. 90%: {}\nLen. 99%: {}\n".format(read_len_dict['mad'], - read_len_dict['qtile10'], - read_len_dict['qtile20'], - read_len_dict['qtile30'], - read_len_dict['qtile40'], - read_len_dict['qtile60'], - read_len_dict['qtile70'], - read_len_dict['qtile80'], - read_len_dict['qtile90'], - read_len_dict['qtile99'])) + print("Sample size: {}\n".format(read_len_dict["sample_size"])) + print( + "Min.: {}\n1st Qu.: {}\nMean: {}\nMedian: {}\n" + "3rd Qu.: {}\nMax.: {}\nStd: {}".format( + read_len_dict["min"], + read_len_dict["qtile25"], + read_len_dict["mean"], + read_len_dict["median"], + read_len_dict["qtile75"], + read_len_dict["max"], + read_len_dict["std"], + ) + ) + print( + "MAD: {}\nLen. 10%: {}\nLen. 20%: {}\nLen. 30%: {}\nLen. 40%: {}\nLen. 60%: {}\nLen. 70%: {}\nLen. 80%: {}\nLen. 90%: {}\nLen. 99%: {}\n".format( + read_len_dict["mad"], + read_len_dict["qtile10"], + read_len_dict["qtile20"], + read_len_dict["qtile30"], + read_len_dict["qtile40"], + read_len_dict["qtile60"], + read_len_dict["qtile70"], + read_len_dict["qtile80"], + read_len_dict["qtile90"], + read_len_dict["qtile99"], + ) + ) # The read and fragment lists will just eat up memory if not removed! if args.histogram: if fragment_len_dict: - maxVal = fragment_len_dict['mean'] * 2 - minVal = fragment_len_dict['min'] + maxVal = fragment_len_dict["mean"] * 2 + minVal = fragment_len_dict["min"] else: - maxVal = read_len_dict['mean'] * 2 - minVal = read_len_dict['min'] + maxVal = read_len_dict["mean"] * 2 + minVal = read_len_dict["min"] if args.maxFragmentLength > 0: maxVal = args.maxFragmentLength if fragment_len_dict: - fragment_len_dict['lengths'] = getDensity(fragment_len_dict['lengths'], minVal, maxVal) + fragment_len_dict["lengths"] = getDensity( + fragment_len_dict["lengths"], minVal, maxVal + ) if read_len_dict: - read_len_dict['lengths'] = getDensity(read_len_dict['lengths'], minVal, maxVal) + read_len_dict["lengths"] = getDensity( + read_len_dict["lengths"], minVal, maxVal + ) else: if fragment_len_dict: - del fragment_len_dict['lengths'] + del fragment_len_dict["lengths"] if read_len_dict: - del read_len_dict['lengths'] + del read_len_dict["lengths"] return (fragment_len_dict, read_len_dict) @@ -231,11 +303,19 @@ def printTable(args, fragDict, readDict): """ of = open(args.table, "w") of.write("\tFrag. Sampled") - of.write("\tFrag. Len. Min.\tFrag. Len. 1st. Qu.\tFrag. Len. Mean\tFrag. Len. Median\tFrag. Len. 3rd Qu.\tFrag. Len. Max\tFrag. Len. Std.") - of.write("\tFrag. Med. Abs. Dev.\tFrag. Len. 10%\tFrag. Len. 20%\tFrag. Len. 30%\tFrag. Len. 40%\tFrag. Len. 60%\tFrag. Len. 70%\tFrag. Len. 80%\tFrag. Len. 90%\tFrag. Len. 99%") + of.write( + "\tFrag. Len. Min.\tFrag. Len. 1st. Qu.\tFrag. Len. Mean\tFrag. Len. Median\tFrag. Len. 3rd Qu.\tFrag. Len. Max\tFrag. Len. Std." + ) + of.write( + "\tFrag. Med. Abs. Dev.\tFrag. Len. 10%\tFrag. Len. 20%\tFrag. Len. 30%\tFrag. Len. 40%\tFrag. Len. 60%\tFrag. Len. 70%\tFrag. Len. 80%\tFrag. Len. 90%\tFrag. Len. 99%" + ) of.write("\tReads Sampled") - of.write("\tRead Len. Min.\tRead Len. 1st. Qu.\tRead Len. Mean\tRead Len. Median\tRead Len. 3rd Qu.\tRead Len. Max\tRead Len. Std.") - of.write("\tRead Med. Abs. Dev.\tRead Len. 10%\tRead Len. 20%\tRead Len. 30%\tRead Len. 40%\tRead Len. 60%\tRead Len. 70%\tRead Len. 80%\tRead Len. 90%\tRead Len. 99%\n") + of.write( + "\tRead Len. Min.\tRead Len. 1st. Qu.\tRead Len. Mean\tRead Len. Median\tRead Len. 3rd Qu.\tRead Len. Max\tRead Len. Std." + ) + of.write( + "\tRead Med. Abs. Dev.\tRead Len. 10%\tRead Len. 20%\tRead Len. 30%\tRead Len. 40%\tRead Len. 60%\tRead Len. 70%\tRead Len. 80%\tRead Len. 90%\tRead Len. 99%\n" + ) for idx, bam in enumerate(args.bamfiles): if args.samplesLabel and idx < len(args.samplesLabel): @@ -244,57 +324,74 @@ def printTable(args, fragDict, readDict): of.write(bam) if fragDict is not None and fragDict[bam] is not None: d = fragDict[bam] - of.write("\t{}".format(d['sample_size'])) - of.write("\t{}\t{}\t{}\t{}\t{}\t{}\t{}".format(d['min'], - d['qtile25'], - d['mean'], - d['median'], - d['qtile75'], - d['max'], - d['std'])) - of.write("\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}".format(d['mad'], - d['qtile10'], - d['qtile20'], - d['qtile30'], - d['qtile40'], - d['qtile60'], - d['qtile70'], - d['qtile80'], - d['qtile90'], - d['qtile99'])) + of.write("\t{}".format(d["sample_size"])) + of.write( + "\t{}\t{}\t{}\t{}\t{}\t{}\t{}".format( + d["min"], + d["qtile25"], + d["mean"], + d["median"], + d["qtile75"], + d["max"], + d["std"], + ) + ) + of.write( + "\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}".format( + d["mad"], + d["qtile10"], + d["qtile20"], + d["qtile30"], + d["qtile40"], + d["qtile60"], + d["qtile70"], + d["qtile80"], + d["qtile90"], + d["qtile99"], + ) + ) else: of.write("\t0") of.write("\t0\t0\t0\t0\t0\t0\t0") of.write("\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0") d = readDict[bam] - of.write("\t{}".format(d['sample_size'])) - of.write("\t{}\t{}\t{}\t{}\t{}\t{}\t{}".format(d['min'], - d['qtile25'], - d['mean'], - d['median'], - d['qtile75'], - d['max'], - d['std'])) - of.write("\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\n".format(d['mad'], - d['qtile10'], - d['qtile20'], - d['qtile30'], - d['qtile40'], - d['qtile60'], - d['qtile70'], - d['qtile80'], - d['qtile90'], - d['qtile99'])) + of.write("\t{}".format(d["sample_size"])) + of.write( + "\t{}\t{}\t{}\t{}\t{}\t{}\t{}".format( + d["min"], + d["qtile25"], + d["mean"], + d["median"], + d["qtile75"], + d["max"], + d["std"], + ) + ) + of.write( + "\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\n".format( + d["mad"], + d["qtile10"], + d["qtile20"], + d["qtile30"], + d["qtile40"], + d["qtile60"], + d["qtile70"], + d["qtile80"], + d["qtile90"], + d["qtile99"], + ) + ) of.close() def main(args=None): - args = parse_arguments().parse_args(args) - - if len(sys.argv) == 1: - parse_arguments().print_help() - sys.exit() - + parser = parse_arguments() + if args is None: + if len(sys.argv) == 1: + parser.print_help() + return + args = parser.parse_args(args) + print(args) fraglengths = {} readlengths = {} of = None @@ -310,7 +407,7 @@ def main(args=None): printTable(args, fraglengths, readlengths) if args.ggplot: - plt.style.use('ggplot') + plt.style.use("ggplot") if args.histogram: if args.samplesLabel: @@ -330,17 +427,22 @@ def main(args=None): if args.maxFragmentLength > 0: maxVal = args.maxFragmentLength else: - maxVal = d['mean'] * 2 - - plt.bar(d['lengths'][1][:-1], height=d['lengths'][0], - width=d['lengths'][1][1:] - d['lengths'][1][:-1], - align='edge', log=args.logScale, - alpha=0.5, label=labels[i]) + maxVal = d["mean"] * 2 + + plt.bar( + d["lengths"][1][:-1], + height=d["lengths"][0], + width=d["lengths"][1][1:] - d["lengths"][1][:-1], + align="edge", + log=args.logScale, + alpha=0.5, + label=labels[i], + ) i += 1 - plt.xlabel('Fragment Length') - plt.ylabel('Frequency') - plt.legend(loc='upper right') + plt.xlabel("Fragment Length") + plt.ylabel("Frequency") + plt.legend(loc="upper right") plt.title(args.plotTitle) plt.savefig(args.histogram, bbox_inches=0, format=args.plotFileFormat) plt.close() diff --git a/pydeeptools/deeptools/bigwigAverage.py b/pydeeptools/deeptools/bigwigAverage.py index 5228ddf08f..fb60612491 100644 --- a/pydeeptools/deeptools/bigwigAverage.py +++ b/pydeeptools/deeptools/bigwigAverage.py @@ -2,9 +2,10 @@ # -*- coding: utf-8 -*- import argparse import sys + import numpy as np -from deeptools import parserCommon -from deeptools import writeBedGraph_bam_and_bw + +from deeptools import parserCommon, writeBedGraph_bam_and_bw debug = 0 @@ -15,40 +16,49 @@ def parse_arguments(args=None): parser = argparse.ArgumentParser( parents=[parentParser, outputParser], formatter_class=argparse.ArgumentDefaultsHelpFormatter, - description='This tool average multiple bigWig files based on the number ' - 'of mapped reads. To average the bigWig files, the genome is ' - 'partitioned into bins of equal size, then the scores ' - 'in each bigwig file are computed per bin.' - 'These scores are averaged and scaleFactors can be applied before the average.', - usage='bigwigAverage -b sample1.bw sample2.bw -o outfile.bw\n' - 'help: bigwigAverage -h / bigwigAverage --help') + description="This tool average multiple bigWig files based on the number " + "of mapped reads. To average the bigWig files, the genome is " + "partitioned into bins of equal size, then the scores " + "in each bigwig file are computed per bin." + "These scores are averaged and scaleFactors can be applied before the average.", + usage="bigwigAverage -b sample1.bw sample2.bw -o outfile.bw\n" + "help: bigwigAverage -h / bigwigAverage --help", + ) # define the arguments - parser.add_argument('--bigwigs', '-b', - metavar='Bigwig files', - help='Bigwig files separated by space.', - nargs='+', - required=True) - - parser.add_argument('--scaleFactors', - help='Set this parameter to multipy the bigwig values ' - 'by a constant. The format is ' - 'scaleFactor1:scaleFactor2:scaleFactor3 etc. ' - 'For example 0.7:1 to scale the first bigwig file ' - 'by 0.7 while not scaling the second bigwig file', - default=None, - required=False) - - parser.add_argument('--skipNonCoveredRegions', '--skipNAs', - help='This parameter determines if non-covered regions (regions without a score) ' - 'in the bigWig files should be skipped. The default is to treat those ' - 'regions as having a value of zero. ' - 'The decision to skip non-covered regions ' - 'depends on the interpretation of the data. Non-covered regions ' - 'in a bigWig file may represent repetitive regions that should ' - 'be skipped. Alternatively, the interpretation of non-covered regions as ' - 'zeros may be wrong and this option should be used ', - action='store_true') + parser.add_argument( + "--bigwigs", + "-b", + metavar="Bigwig files", + help="Bigwig files separated by space.", + nargs="+", + required=True, + ) + + parser.add_argument( + "--scaleFactors", + help="Set this parameter to multipy the bigwig values " + "by a constant. The format is " + "scaleFactor1:scaleFactor2:scaleFactor3 etc. " + "For example 0.7:1 to scale the first bigwig file " + "by 0.7 while not scaling the second bigwig file", + default=None, + required=False, + ) + + parser.add_argument( + "--skipNonCoveredRegions", + "--skipNAs", + help="This parameter determines if non-covered regions (regions without a score) " + "in the bigWig files should be skipped. The default is to treat those " + "regions as having a value of zero. " + "The decision to skip non-covered regions " + "depends on the interpretation of the data. Non-covered regions " + "in a bigWig file may represent repetitive regions that should " + "be skipped. Alternatively, the interpretation of non-covered regions as " + "zeros may be wrong and this option should be used ", + action="store_true", + ) return parser @@ -84,16 +94,18 @@ def average(tileCoverage, args): nan """ - norm_values = [args['scaleFactors'][i] * cov for i, cov in enumerate(tileCoverage)] + norm_values = [args["scaleFactors"][i] * cov for i, cov in enumerate(tileCoverage)] return np.mean(norm_values) def main(args=None): - args = parse_arguments().parse_args(args) - if len(sys.argv) == 1: - parse_arguments().print_help() - sys.exit() + parser = parse_arguments() + if args is None: + if len(sys.argv) == 1: + parser.print_help() + return + args = parser.parse_args(args) nFiles = len(args.bigwigs) @@ -105,19 +117,26 @@ def main(args=None): raise argparse.ArgumentTypeError( "Format of scaleFactors is factor or factor1:factor2... as many as bigwig files. " "There are {} bigwigs and {} factors." - "The value given ( {} ) is not valid".format(nFiles, len(scaleFactors), args.scaleFactors)) + "The value given ( {} ) is not valid".format( + nFiles, len(scaleFactors), args.scaleFactors + ) + ) else: scaleFactors = [1] * nFiles # the average function is called and receives # the function_args per each tile that is considered FUNC = average - function_args = {'scaleFactors': scaleFactors} + function_args = {"scaleFactors": scaleFactors} writeBedGraph_bam_and_bw.writeBedGraph( [(b, getType(b)) for b in args.bigwigs], - args.outFileName, 0, FUNC, - function_args, tileSize=args.binSize, region=args.region, + args.outFileName, + 0, + FUNC, + function_args, + tileSize=args.binSize, + region=args.region, blackListFileName=args.blackListFileName, verbose=args.verbose, numberOfProcessors=args.numberOfProcessors, @@ -125,4 +144,5 @@ def main(args=None): format=args.outFileFormat, smoothLength=False, missingDataAsZero=not args.skipNonCoveredRegions, - extendPairedEnds=False) + extendPairedEnds=False, + ) diff --git a/pydeeptools/deeptools/computeMatrix2.py b/pydeeptools/deeptools/computeMatrix2.py index a2b123e7e6..4b6081e481 100644 --- a/pydeeptools/deeptools/computeMatrix2.py +++ b/pydeeptools/deeptools/computeMatrix2.py @@ -1,17 +1,17 @@ - import argparse +import signal import sys -from deeptools.parserCommon import writableFile, numberOfProcessors -from deeptools import parserCommon from importlib.metadata import version + +from deeptools import parserCommon from deeptools.hp import r_computematrix -import signal +from deeptools.parserCommon import numberOfProcessors, writableFile + def parse_arguments(args=None): - parser = \ - argparse.ArgumentParser( - formatter_class=argparse.RawDescriptionHelpFormatter, - description=""" + parser = argparse.ArgumentParser( + formatter_class=argparse.RawDescriptionHelpFormatter, + description=""" This tool calculates scores per genome regions and prepares an intermediate file that can be used with ``plotHeatmap`` and ``plotProfiles``. Typically, the genome regions are genes, but any other regions defined in a BED file can be used. @@ -26,329 +26,425 @@ def parse_arguments(args=None): $ computeMatrix scale-regions --help """, - epilog='An example usage is:\n computeMatrix reference-point -S ' - ' -R -b 1000\n \n') + epilog="An example usage is:\n computeMatrix reference-point -S " + " -R -b 1000\n \n", + ) - parser.add_argument('--version', action='version', - version='%(prog)s {}'.format(version('deeptools'))) + parser.add_argument( + "--version", + action="version", + version="%(prog)s {}".format(version("deeptools")), + ) - subparsers = parser.add_subparsers( - title='Commands', - dest='command', - metavar='') + subparsers = parser.add_subparsers(title="Commands", dest="command", metavar="") # scale-regions mode options subparsers.add_parser( - 'scale-regions', + "scale-regions", formatter_class=argparse.ArgumentDefaultsHelpFormatter, parents=[ computeMatrixRequiredArgs(), computeMatrixOutputArgs(), - computeMatrixOptArgs(case='scale-regions'), - parserCommon.gtf_options() + computeMatrixOptArgs(case="scale-regions"), + parserCommon.gtf_options(), ], help="In the scale-regions mode, all regions in the BED file are " "stretched or shrunken to the length (in bases) indicated by the user.", - usage='An example usage is:\n computeMatrix scale-regions -S ' - ' -R -b 1000\n\n') + usage="An example usage is:\n computeMatrix scale-regions -S " + " -R -b 1000\n\n", + ) # reference point arguments subparsers.add_parser( - 'reference-point', + "reference-point", formatter_class=argparse.ArgumentDefaultsHelpFormatter, - parents=[computeMatrixRequiredArgs(), - computeMatrixOutputArgs(), - computeMatrixOptArgs(case='reference-point'), - parserCommon.gtf_options() - ], + parents=[ + computeMatrixRequiredArgs(), + computeMatrixOutputArgs(), + computeMatrixOptArgs(case="reference-point"), + parserCommon.gtf_options(), + ], help="Reference-point refers to a position within a BED region " "(e.g., the starting point). In this mode, only those genomic" "positions before (upstream) and/or after (downstream) of the " "reference point will be plotted.", - usage='An example usage is:\n computeMatrix reference-point -S ' - ' -R -a 3000 -b 3000\n\n') + usage="An example usage is:\n computeMatrix reference-point -S " + " -R -a 3000 -b 3000\n\n", + ) return parser def computeMatrixRequiredArgs(args=None): parser = argparse.ArgumentParser(add_help=False) - required = parser.add_argument_group('Required arguments') - required.add_argument('--regionsFileName', '-R', - metavar='File', - help='File name or names, in BED or GTF format, containing ' - 'the regions to plot. If multiple bed files are given, each one is considered a ' - 'group that can be plotted separately.', - nargs='+', - required=True) - required.add_argument('--scoreFileName', '-S', - help='bigWig file(s) containing ' - 'the scores to be plotted. Multiple files should be separated by spaced. BigWig ' - 'files can be obtained by using the bamCoverage ' - 'or bamCompare tools. More information about ' - 'the bigWig file format can be found at ' - 'http://genome.ucsc.edu/goldenPath/help/bigWig.html ', - metavar='File', - nargs='+', - required=True) + required = parser.add_argument_group("Required arguments") + required.add_argument( + "--regionsFileName", + "-R", + metavar="File", + help="File name or names, in BED or GTF format, containing " + "the regions to plot. If multiple bed files are given, each one is considered a " + "group that can be plotted separately.", + nargs="+", + required=True, + ) + required.add_argument( + "--scoreFileName", + "-S", + help="bigWig file(s) containing " + "the scores to be plotted. Multiple files should be separated by spaced. BigWig " + "files can be obtained by using the bamCoverage " + "or bamCompare tools. More information about " + "the bigWig file format can be found at " + "http://genome.ucsc.edu/goldenPath/help/bigWig.html ", + metavar="File", + nargs="+", + required=True, + ) return parser def computeMatrixOutputArgs(args=None): parser = argparse.ArgumentParser(add_help=False) - output = parser.add_argument_group('Output options') - output.add_argument('--outFileName', '-out', '-o', - help='File name to save the gzipped matrix file ' - 'needed by the "plotHeatmap" and "plotProfile" tools.', - type=writableFile, - required=True) - - output.add_argument('--outFileNameMatrix', - help='If this option is given, then the matrix ' - 'of values underlying the heatmap will be saved ' - 'using the indicated name, e.g. IndividualValues.tab.' - 'This matrix can easily be loaded into R or ' - 'other programs.', - metavar='FILE', - type=writableFile) - output.add_argument('--outFileSortedRegions', - help='File name in which the regions are saved ' - 'after skiping zeros or min/max threshold values. The ' - 'order of the regions in the file follows the sorting ' - 'order selected. This is useful, for example, to ' - 'generate other heatmaps keeping the sorting of the ' - 'first heatmap. Example: Heatmap1sortedRegions.bed', - metavar='BED file', - type=argparse.FileType('w')) + output = parser.add_argument_group("Output options") + output.add_argument( + "--outFileName", + "-out", + "-o", + help="File name to save the gzipped matrix file " + 'needed by the "plotHeatmap" and "plotProfile" tools.', + type=writableFile, + required=True, + ) + + output.add_argument( + "--outFileNameMatrix", + help="If this option is given, then the matrix " + "of values underlying the heatmap will be saved " + "using the indicated name, e.g. IndividualValues.tab." + "This matrix can easily be loaded into R or " + "other programs.", + metavar="FILE", + type=writableFile, + ) + output.add_argument( + "--outFileSortedRegions", + help="File name in which the regions are saved " + "after skiping zeros or min/max threshold values. The " + "order of the regions in the file follows the sorting " + "order selected. This is useful, for example, to " + "generate other heatmaps keeping the sorting of the " + "first heatmap. Example: Heatmap1sortedRegions.bed", + metavar="BED file", + type=argparse.FileType("w"), + ) return parser -def computeMatrixOptArgs(case=['scale-regions', 'reference-point'][0]): +def computeMatrixOptArgs(case=["scale-regions", "reference-point"][0]): parser = argparse.ArgumentParser(add_help=False) - optional = parser.add_argument_group('Optional arguments') - optional.add_argument('--version', action='version', - version='%(prog)s {}'.format(version('deeptools'))) - - if case == 'scale-regions': - optional.add_argument('--regionBodyLength', '-m', - default=1000, - type=int, - help='Distance in bases to which all regions will ' - 'be fit. (Default: %(default)s)') - optional.add_argument('--startLabel', - default='TSS', - help='Label shown in the plot for the start of ' - 'the region. Default is TSS (transcription ' - 'start site), but could be changed to anything, ' - 'e.g. "peak start". Note that this is only ' - 'useful if you plan to plot the results yourself ' - 'and not, for example, with plotHeatmap, which ' - 'will override this. (Default: %(default)s)') - optional.add_argument('--endLabel', - default='TES', - help='Label shown in the plot for the region ' - 'end. Default is TES (transcription end site). ' - 'See the --startLabel option for more ' - 'information. (Default: %(default)s) ') - optional.add_argument('--beforeRegionStartLength', '-b', '--upstream', - default=0, - type=int, - help='Distance upstream of the start site of ' - 'the regions defined in the region file. If the ' - 'regions are genes, this would be the distance ' - 'upstream of the transcription start site. (Default: %(default)s)') - optional.add_argument('--afterRegionStartLength', '-a', '--downstream', - default=0, - type=int, - help='Distance downstream of the end site ' - 'of the given regions. If the ' - 'regions are genes, this would be the distance ' - 'downstream of the transcription end site. (Default: %(default)s)') - optional.add_argument("--unscaled5prime", - default=0, - type=int, - help='Number of bases at the 5-prime end of the ' - 'region to exclude from scaling. By default, ' - 'each region is scaled to a given length (see the --regionBodyLength option). In some cases it is useful to look at unscaled signals around region boundaries, so this setting specifies the number of unscaled bases on the 5-prime end of each boundary. (Default: %(default)s)') - optional.add_argument("--unscaled3prime", - default=0, - type=int, - help='Like --unscaled5prime, but for the 3-prime ' - 'end. (Default: %(default)s)') - - elif case == 'reference-point': - optional.add_argument('--referencePoint', - default='TSS', - choices=['TSS', 'TES', 'center'], - help='The reference point for the plotting ' - 'could be either the region start (TSS), the ' - 'region end (TES) or the center of the region. ' - 'Note that regardless of what you specify, ' - 'plotHeatmap/plotProfile will default to using "TSS" as the ' - 'label. (Default: %(default)s)') + optional = parser.add_argument_group("Optional arguments") + optional.add_argument( + "--version", + action="version", + version="%(prog)s {}".format(version("deeptools")), + ) + + if case == "scale-regions": + optional.add_argument( + "--regionBodyLength", + "-m", + default=1000, + type=int, + help="Distance in bases to which all regions will " + "be fit. (Default: %(default)s)", + ) + optional.add_argument( + "--startLabel", + default="TSS", + help="Label shown in the plot for the start of " + "the region. Default is TSS (transcription " + "start site), but could be changed to anything, " + 'e.g. "peak start". Note that this is only ' + "useful if you plan to plot the results yourself " + "and not, for example, with plotHeatmap, which " + "will override this. (Default: %(default)s)", + ) + optional.add_argument( + "--endLabel", + default="TES", + help="Label shown in the plot for the region " + "end. Default is TES (transcription end site). " + "See the --startLabel option for more " + "information. (Default: %(default)s) ", + ) + optional.add_argument( + "--beforeRegionStartLength", + "-b", + "--upstream", + default=0, + type=int, + help="Distance upstream of the start site of " + "the regions defined in the region file. If the " + "regions are genes, this would be the distance " + "upstream of the transcription start site. (Default: %(default)s)", + ) + optional.add_argument( + "--afterRegionStartLength", + "-a", + "--downstream", + default=0, + type=int, + help="Distance downstream of the end site " + "of the given regions. If the " + "regions are genes, this would be the distance " + "downstream of the transcription end site. (Default: %(default)s)", + ) + optional.add_argument( + "--unscaled5prime", + default=0, + type=int, + help="Number of bases at the 5-prime end of the " + "region to exclude from scaling. By default, " + "each region is scaled to a given length (see the --regionBodyLength option). In some cases it is useful to look at unscaled signals around region boundaries, so this setting specifies the number of unscaled bases on the 5-prime end of each boundary. (Default: %(default)s)", + ) + optional.add_argument( + "--unscaled3prime", + default=0, + type=int, + help="Like --unscaled5prime, but for the 3-prime " + "end. (Default: %(default)s)", + ) + + elif case == "reference-point": + optional.add_argument( + "--referencePoint", + default="TSS", + choices=["TSS", "TES", "center"], + help="The reference point for the plotting " + "could be either the region start (TSS), the " + "region end (TES) or the center of the region. " + "Note that regardless of what you specify, " + 'plotHeatmap/plotProfile will default to using "TSS" as the ' + "label. (Default: %(default)s)", + ) # set region body length to zero for reference point mode - optional.add_argument('--regionBodyLength', help=argparse.SUPPRESS, - default=0, type=int) - optional.add_argument('--unscaled5prime', default=0, type=int, help=argparse.SUPPRESS) - optional.add_argument('--unscaled3prime', default=0, type=int, help=argparse.SUPPRESS) - optional.add_argument('--beforeRegionStartLength', '-b', '--upstream', - default=500, - type=int, - metavar='INT bp', - help='Distance upstream of the reference-point ' - 'selected. (Default: %(default)s)') - optional.add_argument('--afterRegionStartLength', '-a', '--downstream', - default=1500, - metavar='INT bp', - type=int, - help='Distance downstream of the ' - 'reference-point selected. (Default: %(default)s)') - optional.add_argument('--nanAfterEnd', - action='store_true', - help='If set, any values after the region end ' - 'are discarded. This is useful to visualize ' - 'the region end when not using the ' - 'scale-regions mode and when the reference-' - 'point is set to the TSS.') - - optional.add_argument('--binSize', '-bs', - help='Length, in bases, of the non-overlapping ' - 'bins for averaging the score over the ' - 'regions length. (Default: %(default)s)', - type=int, - default=10) - - optional.add_argument('--sortRegions', - help='Whether the output file should present the ' - 'regions sorted. The default (keep) retains order as in -R.' - 'Note that this is only useful if you plan to plot ' - 'the results yourself and not, for example, with ' - 'plotHeatmap, which will override this. (Default: %(default)s)', - choices=["descend", "ascend", "keep"], - default='keep') - - optional.add_argument('--sortUsing', - help='Indicate which method should be used for ' - 'sorting. The value is computed for each row.' - 'Note that the region_length option will lead ' - 'to a dotted line within the heatmap that indicates ' - 'the end of the regions. (Default: %(default)s)', - choices=["mean", "median", "max", "min", "sum", - "region_length"], - default='mean') - - optional.add_argument('--sortUsingSamples', - help='List of sample numbers (order as in matrix), ' - 'that are used for sorting by --sortUsing, ' - 'no value uses all samples, ' - 'example: --sortUsingSamples 1 3', - type=int, nargs='+') - - optional.add_argument('--averageTypeBins', - default='mean', - choices=["mean", "median", "min", - "max", "std", "sum"], - help='Define the type of statistic that should be ' - 'used over the bin size range. The ' - 'options are: "mean", "median", "min", "max", "sum" ' - 'and "std". The default is "mean". (Default: %(default)s)') - - optional.add_argument('--missingDataAsZero', - help='If set, missing data (NAs) will be treated as zeros. ' - 'The default is to ignore such cases, which will be depicted as black areas in ' - 'a heatmap. (see the --missingDataColor argument ' - 'of the plotHeatmap command for additional options).', - action='store_true') - - optional.add_argument('--skipZeros', - help='Whether regions with only scores of zero ' - 'should be included or not. Default is to include ' - 'them.', - action='store_true') - - optional.add_argument('--minThreshold', - default=None, - type=float, - help='Numeric value. Any region containing a ' - 'value that is less than or equal to this ' - 'will be skipped. This is useful to skip, ' - 'for example, genes where the read count is zero ' - 'for any of the bins. This could be the result of ' - 'unmappable areas and can bias the overall results. (Default: %(default)s)') - - optional.add_argument('--maxThreshold', - default=None, - type=float, - help='Numeric value. Any region containing a value ' - 'greater than or equal to this ' - 'will be skipped. The maxThreshold is useful to ' - 'skip those few regions with very high read counts ' - '(e.g. micro satellites) that may bias the average ' - 'values. (Default: %(default)s)') - - optional.add_argument('--blackListFileName', '-bl', - help="A BED file containing regions that should be excluded from all analyses. Currently this works by rejecting genomic chunks that happen to overlap an entry. Consequently, for BAM files, if a read partially overlaps a blacklisted region or a fragment spans over it, then the read/fragment might still be considered.", - metavar="BED file", - required=False) - - optional.add_argument('--samplesLabel', - help='Labels for the samples. This will then be passed to plotHeatmap and plotProfile. The ' - 'default is to use the file name of the ' - 'sample. The sample labels should be separated ' - 'by spaces and quoted if a label itself' - 'contains a space E.g. --samplesLabel label-1 "label 2" ', - nargs='+') - - optional.add_argument('--verbose', - help='Being VERY verbose in the status messages. --quiet will disable this.', - action='store_true') - - optional.add_argument('--scale', - help='If set, all values are multiplied by ' - 'this number. (Default: %(default)s)', - type=float, - default=1) - optional.add_argument('--numberOfProcessors', '-p', - help='Number of processors to use. Type "max/2" to ' - 'use half the maximum number of processors or "max" ' - 'to use all available processors. (Default: %(default)s)', - metavar="INT", - type=numberOfProcessors, - default=1, - required=False) + optional.add_argument( + "--regionBodyLength", help=argparse.SUPPRESS, default=0, type=int + ) + optional.add_argument( + "--unscaled5prime", default=0, type=int, help=argparse.SUPPRESS + ) + optional.add_argument( + "--unscaled3prime", default=0, type=int, help=argparse.SUPPRESS + ) + optional.add_argument( + "--beforeRegionStartLength", + "-b", + "--upstream", + default=500, + type=int, + metavar="INT bp", + help="Distance upstream of the reference-point " + "selected. (Default: %(default)s)", + ) + optional.add_argument( + "--afterRegionStartLength", + "-a", + "--downstream", + default=1500, + metavar="INT bp", + type=int, + help="Distance downstream of the " + "reference-point selected. (Default: %(default)s)", + ) + optional.add_argument( + "--nanAfterEnd", + action="store_true", + help="If set, any values after the region end " + "are discarded. This is useful to visualize " + "the region end when not using the " + "scale-regions mode and when the reference-" + "point is set to the TSS.", + ) + + optional.add_argument( + "--binSize", + "-bs", + help="Length, in bases, of the non-overlapping " + "bins for averaging the score over the " + "regions length. (Default: %(default)s)", + type=int, + default=10, + ) + + optional.add_argument( + "--sortRegions", + help="Whether the output file should present the " + "regions sorted. The default (keep) retains order as in -R." + "Note that this is only useful if you plan to plot " + "the results yourself and not, for example, with " + "plotHeatmap, which will override this. (Default: %(default)s)", + choices=["descend", "ascend", "keep"], + default="keep", + ) + + optional.add_argument( + "--sortUsing", + help="Indicate which method should be used for " + "sorting. The value is computed for each row." + "Note that the region_length option will lead " + "to a dotted line within the heatmap that indicates " + "the end of the regions. (Default: %(default)s)", + choices=["mean", "median", "max", "min", "sum", "region_length"], + default="mean", + ) + + optional.add_argument( + "--sortUsingSamples", + help="List of sample numbers (order as in matrix), " + "that are used for sorting by --sortUsing, " + "no value uses all samples, " + "example: --sortUsingSamples 1 3", + type=int, + nargs="+", + ) + + optional.add_argument( + "--averageTypeBins", + default="mean", + choices=["mean", "median", "min", "max", "std", "sum"], + help="Define the type of statistic that should be " + "used over the bin size range. The " + 'options are: "mean", "median", "min", "max", "sum" ' + 'and "std". The default is "mean". (Default: %(default)s)', + ) + + optional.add_argument( + "--missingDataAsZero", + help="If set, missing data (NAs) will be treated as zeros. " + "The default is to ignore such cases, which will be depicted as black areas in " + "a heatmap. (see the --missingDataColor argument " + "of the plotHeatmap command for additional options).", + action="store_true", + ) + + optional.add_argument( + "--skipZeros", + help="Whether regions with only scores of zero " + "should be included or not. Default is to include " + "them.", + action="store_true", + ) + + optional.add_argument( + "--minThreshold", + default=None, + type=float, + help="Numeric value. Any region containing a " + "value that is less than or equal to this " + "will be skipped. This is useful to skip, " + "for example, genes where the read count is zero " + "for any of the bins. This could be the result of " + "unmappable areas and can bias the overall results. (Default: %(default)s)", + ) + + optional.add_argument( + "--maxThreshold", + default=None, + type=float, + help="Numeric value. Any region containing a value " + "greater than or equal to this " + "will be skipped. The maxThreshold is useful to " + "skip those few regions with very high read counts " + "(e.g. micro satellites) that may bias the average " + "values. (Default: %(default)s)", + ) + + optional.add_argument( + "--blackListFileName", + "-bl", + help="A BED file containing regions that should be excluded from all analyses. Currently this works by rejecting genomic chunks that happen to overlap an entry. Consequently, for BAM files, if a read partially overlaps a blacklisted region or a fragment spans over it, then the read/fragment might still be considered.", + metavar="BED file", + required=False, + ) + + optional.add_argument( + "--samplesLabel", + help="Labels for the samples. This will then be passed to plotHeatmap and plotProfile. The " + "default is to use the file name of the " + "sample. The sample labels should be separated " + "by spaces and quoted if a label itself" + 'contains a space E.g. --samplesLabel label-1 "label 2" ', + nargs="+", + ) + + optional.add_argument( + "--verbose", + help="Being VERY verbose in the status messages. --quiet will disable this.", + action="store_true", + ) + + optional.add_argument( + "--scale", + help="If set, all values are multiplied by this number. (Default: %(default)s)", + type=float, + default=1, + ) + optional.add_argument( + "--numberOfProcessors", + "-p", + help='Number of processors to use. Type "max/2" to ' + 'use half the maximum number of processors or "max" ' + "to use all available processors. (Default: %(default)s)", + metavar="INT", + type=numberOfProcessors, + default=1, + required=False, + ) return parser def process_args(args=None): - args = parse_arguments().parse_args(args) - - if len(sys.argv) == 1: - parse_arguments().print_help() - sys.exit() + parser = parse_arguments() + if args is None: + if len(sys.argv) == 1: + parser.print_help() + return + args = parser.parse_args(args) # Ensure before and after region length is positive if args.beforeRegionStartLength < 0: - print(f"beforeRegionStartLength changed from {args.beforeRegionStartLength} into {abs(args.beforeRegionStartLength)}") + print( + f"beforeRegionStartLength changed from {args.beforeRegionStartLength} into {abs(args.beforeRegionStartLength)}" + ) args.beforeRegionStartLength = abs(args.beforeRegionStartLength) if args.afterRegionStartLength < 0: - print(f"afterRegionStartLength changed from {args.afterRegionStartLength} into {abs(args.afterRegionStartLength)}") + print( + f"afterRegionStartLength changed from {args.afterRegionStartLength} into {abs(args.afterRegionStartLength)}" + ) args.afterRegionStartLength = abs(args.afterRegionStartLength) - if args.command == 'scale-regions': + if args.command == "scale-regions": args.nanAfterEnd = False args.referencePoint = "" - elif args.command == 'reference-point': - if args.beforeRegionStartLength == 0 and \ - args.afterRegionStartLength == 0: - sys.exit("\nUpstrean and downstream regions are both " - "set to 0. Nothing to output. Maybe you want to " - "use the scale-regions mode?\n") + elif args.command == "reference-point": + if args.beforeRegionStartLength == 0 and args.afterRegionStartLength == 0: + sys.exit( + "\nUpstrean and downstream regions are both " + "set to 0. Nothing to output. Maybe you want to " + "use the scale-regions mode?\n" + ) if args.beforeRegionStartLength % args.binSize != 0: - sys.exit("\nThe --beforeRegionStartLength value must be a multiple of the --binSize value.") + sys.exit( + "\nThe --beforeRegionStartLength value must be a multiple of the --binSize value." + ) if args.afterRegionStartLength % args.binSize != 0: - sys.exit("\nThe --afterRegionStartLength value must be a multiple of the --binSize value.") + sys.exit( + "\nThe --afterRegionStartLength value must be a multiple of the --binSize value." + ) if not args.samplesLabel: args.samplesLabel = [] if not args.sortUsingSamples: @@ -364,25 +460,26 @@ def main(args=None): args = process_args(args) - parameters = {'upstream': args.beforeRegionStartLength, - 'downstream': args.afterRegionStartLength, - 'body': args.regionBodyLength, - 'bin size': args.binSize, - 'ref point': args.referencePoint, - 'verbose': args.verbose, - 'bin avg type': args.averageTypeBins, - 'missing data as zero': args.missingDataAsZero, - 'min threshold': args.minThreshold, - 'max threshold': args.maxThreshold, - 'scale': args.scale, - 'skip zeros': args.skipZeros, - 'nan after end': args.nanAfterEnd, - 'proc number': args.numberOfProcessors, - 'sort regions': args.sortRegions, - 'sort using': args.sortUsing, - 'unscaled 5 prime': args.unscaled5prime, - 'unscaled 3 prime': args.unscaled3prime - } + parameters = { + "upstream": args.beforeRegionStartLength, + "downstream": args.afterRegionStartLength, + "body": args.regionBodyLength, + "bin size": args.binSize, + "ref point": args.referencePoint, + "verbose": args.verbose, + "bin avg type": args.averageTypeBins, + "missing data as zero": args.missingDataAsZero, + "min threshold": args.minThreshold, + "max threshold": args.maxThreshold, + "scale": args.scale, + "skip zeros": args.skipZeros, + "nan after end": args.nanAfterEnd, + "proc number": args.numberOfProcessors, + "sort regions": args.sortRegions, + "sort using": args.sortUsing, + "unscaled 5 prime": args.unscaled5prime, + "unscaled 3 prime": args.unscaled3prime, + } signal.signal(signal.SIGINT, signal.SIG_DFL) r_computematrix( args.command, @@ -396,7 +493,7 @@ def main(args=None): args.regionBodyLength, args.binSize, args.missingDataAsZero, - args.keepExons, # --metagene or not. + args.keepExons, # --metagene or not. args.transcriptID, args.exonID, args.transcript_id_designator, @@ -412,5 +509,5 @@ def main(args=None): args.referencePoint, args.numberOfProcessors, args.verbose, - args.outFileName - ) \ No newline at end of file + args.outFileName, + ) diff --git a/pydeeptools/deeptools/multiBamSummary2.py b/pydeeptools/deeptools/multiBamSummary2.py index 25766acdc9..8096c9b292 100644 --- a/pydeeptools/deeptools/multiBamSummary2.py +++ b/pydeeptools/deeptools/multiBamSummary2.py @@ -1,25 +1,27 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +import argparse import os +import signal import sys -import argparse +from importlib.metadata import version + import numpy as np -import signal import deeptools.countReadsPerBin as countR from deeptools import parserCommon from deeptools.utilities import smartLabels -from importlib.metadata import version -old_settings = np.seterr(all='ignore') + +old_settings = np.seterr(all="ignore") from deeptools.hp import r_mbams + def parse_arguments(args=None): - parser = \ - argparse.ArgumentParser( - formatter_class=argparse.RawDescriptionHelpFormatter, - description=""" + parser = argparse.ArgumentParser( + formatter_class=argparse.RawDescriptionHelpFormatter, + description=""" ``multiBamSummary`` computes the read coverages for genomic regions for typically two or more BAM files. The analysis can be performed for the entire genome by running the program in 'bins' mode. @@ -37,167 +39,206 @@ def parse_arguments(args=None): """, - epilog='example usages:\n' - 'multiBamSummary bins --bamfiles file1.bam file2.bam -o results.npz \n\n' - 'multiBamSummary BED-file --BED selection.bed --bamfiles file1.bam file2.bam \n' - '-o results.npz' - ' \n\n', - conflict_handler='resolve') - - parser.add_argument('--version', action='version', - version='%(prog)s {}'.format(version('deeptools'))) + epilog="example usages:\n" + "multiBamSummary bins --bamfiles file1.bam file2.bam -o results.npz \n\n" + "multiBamSummary BED-file --BED selection.bed --bamfiles file1.bam file2.bam \n" + "-o results.npz" + " \n\n", + conflict_handler="resolve", + ) + + parser.add_argument( + "--version", + action="version", + version="%(prog)s {}".format(version("deeptools")), + ) subparsers = parser.add_subparsers( title="commands", - dest='command', - description='subcommands', - help='subcommands', - metavar='') + dest="command", + description="subcommands", + help="subcommands", + metavar="", + ) parent_parser = parserCommon.getParentArgParse(binSize=False) read_options_parser = parserCommon.read_options() # bins mode options subparsers.add_parser( - 'bins', + "bins", formatter_class=argparse.ArgumentDefaultsHelpFormatter, - parents=[bamcorrelate_args(case='bins'), - parent_parser, read_options_parser, - parserCommon.gtf_options(suppress=True) - ], + parents=[ + bamcorrelate_args(case="bins"), + parent_parser, + read_options_parser, + parserCommon.gtf_options(suppress=True), + ], help="The coverage calculation is done for consecutive bins of equal " - "size (10 kilobases by default). This mode is useful to assess the " - "genome-wide similarity of BAM files. The bin size and " - "distance between bins can be adjusted.", + "size (10 kilobases by default). This mode is useful to assess the " + "genome-wide similarity of BAM files. The bin size and " + "distance between bins can be adjusted.", add_help=False, - usage='%(prog)s ' - '--bamfiles file1.bam file2.bam ' - '-o results.npz \n' - 'help: multiBamSummary bins -h / multiBamSummary bins --help\n') + usage="%(prog)s " + "--bamfiles file1.bam file2.bam " + "-o results.npz \n" + "help: multiBamSummary bins -h / multiBamSummary bins --help\n", + ) # BED file arguments subparsers.add_parser( - 'BED-file', + "BED-file", formatter_class=argparse.ArgumentDefaultsHelpFormatter, - parents=[bamcorrelate_args(case='BED-file'), - parent_parser, read_options_parser, - parserCommon.gtf_options() - ], + parents=[ + bamcorrelate_args(case="BED-file"), + parent_parser, + read_options_parser, + parserCommon.gtf_options(), + ], help="The user provides a BED file that contains all regions " - "that should be considered for the coverage analysis. A " - "common use is to compare ChIP-seq coverages between two " - "different samples for a set of peak regions.", - usage='%(prog)s --BED selection.bed --bamfiles file1.bam file2.bam -o results.npz\n' - 'help: multiBamSummary BED-file -h / multiBamSummary bins --help\n', - add_help=False) + "that should be considered for the coverage analysis. A " + "common use is to compare ChIP-seq coverages between two " + "different samples for a set of peak regions.", + usage="%(prog)s --BED selection.bed --bamfiles file1.bam file2.bam -o results.npz\n" + "help: multiBamSummary BED-file -h / multiBamSummary bins --help\n", + add_help=False, + ) return parser -def bamcorrelate_args(case='bins'): +def bamcorrelate_args(case="bins"): parser = argparse.ArgumentParser(add_help=False) - required = parser.add_argument_group('Required arguments') + required = parser.add_argument_group("Required arguments") # define the arguments - required.add_argument('--bamfiles', '-b', - metavar='FILE1 FILE2', - help='List of indexed bam files separated by spaces.', - nargs='+', - required=True) - - required.add_argument('--outFileName', '-out', '-o', - help='File name to save the coverage matrix. This matrix ' - 'can be subsequently plotted using plotCorrelation or ' - 'or plotPCA.', - type=parserCommon.writableFile) - - optional = parser.add_argument_group('Optional arguments') - - optional.add_argument("--help", "-h", action="help", - help="show this help message and exit") - optional.add_argument('--labels', '-l', - metavar='sample1 sample2', - help='User defined labels instead of default labels from ' - 'file names. ' - 'Multiple labels have to be separated by a space, e.g. ' - '--labels sample1 sample2 sample3', - nargs='+') - optional.add_argument('--smartLabels', - action='store_true', - help='Instead of manually specifying labels for the input ' - 'BAM files, this causes deepTools to use the file name ' - 'after removing the path and extension.') - - optional.add_argument('--genomeChunkSize', - type=int, - default=None, - help='Manually specify the size of the genome provided to each processor. ' - 'The default value of None specifies that this is determined by read ' - 'density of the BAM file.') - - if case == 'bins': - optional.add_argument('--binSize', '-bs', - metavar='INT', - help='Length in bases of the window used ' - 'to sample the genome. (Default: %(default)s)', - default=10000, - type=int) - - optional.add_argument('--distanceBetweenBins', '-n', - metavar='INT', - help='By default, multiBamSummary considers consecutive ' - 'bins of the specified --binSize. However, to ' - 'reduce the computation time, a larger distance ' - 'between bins can by given. Larger distances ' - 'result in fewer bins considered. (Default: %(default)s)', - default=0, - type=int) - - required.add_argument('--BED', - help=argparse.SUPPRESS, - default=None) + required.add_argument( + "--bamfiles", + "-b", + metavar="FILE1 FILE2", + help="List of indexed bam files separated by spaces.", + nargs="+", + required=True, + ) + + required.add_argument( + "--outFileName", + "-out", + "-o", + help="File name to save the coverage matrix. This matrix " + "can be subsequently plotted using plotCorrelation or " + "or plotPCA.", + type=parserCommon.writableFile, + ) + + optional = parser.add_argument_group("Optional arguments") + + optional.add_argument( + "--help", "-h", action="help", help="show this help message and exit" + ) + optional.add_argument( + "--labels", + "-l", + metavar="sample1 sample2", + help="User defined labels instead of default labels from " + "file names. " + "Multiple labels have to be separated by a space, e.g. " + "--labels sample1 sample2 sample3", + nargs="+", + ) + optional.add_argument( + "--smartLabels", + action="store_true", + help="Instead of manually specifying labels for the input " + "BAM files, this causes deepTools to use the file name " + "after removing the path and extension.", + ) + + optional.add_argument( + "--genomeChunkSize", + type=int, + default=None, + help="Manually specify the size of the genome provided to each processor. " + "The default value of None specifies that this is determined by read " + "density of the BAM file.", + ) + + if case == "bins": + optional.add_argument( + "--binSize", + "-bs", + metavar="INT", + help="Length in bases of the window used " + "to sample the genome. (Default: %(default)s)", + default=10000, + type=int, + ) + + optional.add_argument( + "--distanceBetweenBins", + "-n", + metavar="INT", + help="By default, multiBamSummary considers consecutive " + "bins of the specified --binSize. However, to " + "reduce the computation time, a larger distance " + "between bins can by given. Larger distances " + "result in fewer bins considered. (Default: %(default)s)", + default=0, + type=int, + ) + + required.add_argument("--BED", help=argparse.SUPPRESS, default=None) else: - optional.add_argument('--binSize', '-bs', - help=argparse.SUPPRESS, - default=10000, - type=int) - - optional.add_argument('--distanceBetweenBins', '-n', - help=argparse.SUPPRESS, - metavar='INT', - default=0, - type=int) - - required.add_argument('--BED', - help='Limits the coverage analysis to ' - 'the regions specified in these files.', - metavar='FILE1.bed FILE2.bed', - nargs='+', - required=True) - - group = parser.add_argument_group('Output optional options') - - group.add_argument('--outRawCounts', - help='Save the counts per region to a tab-delimited file.', - type=parserCommon.writableFile, - metavar='FILE') - - group.add_argument('--scalingFactors', - help='Compute scaling factors (in the DESeq2 manner) ' - 'compatible for use with bamCoverage and write them to a ' - 'file. The file has tab-separated columns "sample" and ' - '"scalingFactor".', - type=parserCommon.writableFile, - metavar='FILE') + optional.add_argument( + "--binSize", "-bs", help=argparse.SUPPRESS, default=10000, type=int + ) + + optional.add_argument( + "--distanceBetweenBins", + "-n", + help=argparse.SUPPRESS, + metavar="INT", + default=0, + type=int, + ) + + required.add_argument( + "--BED", + help="Limits the coverage analysis to " + "the regions specified in these files.", + metavar="FILE1.bed FILE2.bed", + nargs="+", + required=True, + ) + + group = parser.add_argument_group("Output optional options") + + group.add_argument( + "--outRawCounts", + help="Save the counts per region to a tab-delimited file.", + type=parserCommon.writableFile, + metavar="FILE", + ) + + group.add_argument( + "--scalingFactors", + help="Compute scaling factors (in the DESeq2 manner) " + "compatible for use with bamCoverage and write them to a " + 'file. The file has tab-separated columns "sample" and ' + '"scalingFactor".', + type=parserCommon.writableFile, + metavar="FILE", + ) return parser def process_args(args=None): - args = parse_arguments().parse_args(args) - - if len(sys.argv) == 1: - parse_arguments().print_help() - sys.exit() + parser = parse_arguments() + if args is None: + if len(sys.argv) == 1: + parser.print_help() + return + args = parser.parse_args(args) if args.labels and len(args.bamfiles) != len(args.labels): print("The number of labels does not match the number of bam files.") @@ -215,7 +256,7 @@ def process_args(args=None): if not args.region: args.region = "None" if not args.blackListFileName: - args.blackListFileName = 'None' + args.blackListFileName = "None" else: if len(args.blackListFileName) != 1: print("Please only provide one blacklist file.") @@ -257,7 +298,7 @@ def main(args=None): """ args = process_args(args) - + signal.signal(signal.SIGINT, signal.SIG_DFL) r_mbams( args.command, @@ -284,5 +325,5 @@ def main(args=None): args.keepExons, args.transcriptID, args.exonID, - args.transcript_id_designator + args.transcript_id_designator, ) diff --git a/pydeeptools/deeptools/multiBigwigSummary.py b/pydeeptools/deeptools/multiBigwigSummary.py index 3a5bda19ab..bcf277ecc2 100644 --- a/pydeeptools/deeptools/multiBigwigSummary.py +++ b/pydeeptools/deeptools/multiBigwigSummary.py @@ -1,23 +1,24 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -import sys import argparse import os.path +import sys +from importlib.metadata import version + import numpy as np + +import deeptools.getScorePerBigWigBin as score_bw from deeptools import parserCommon from deeptools.utilities import smartLabels -import deeptools.getScorePerBigWigBin as score_bw -from importlib.metadata import version -old_settings = np.seterr(all='ignore') +old_settings = np.seterr(all="ignore") def parse_arguments(args=None): - parser = \ - argparse.ArgumentParser( - formatter_class=argparse.RawDescriptionHelpFormatter, - description=""" + parser = argparse.ArgumentParser( + formatter_class=argparse.RawDescriptionHelpFormatter, + description=""" Given typically two or more bigWig files, ``multiBigwigSummary`` computes the average scores for each of the files in every genomic region. This analysis is performed for the entire genome by running the program in ``bins`` mode, or for certain user selected regions in ``BED-file`` @@ -33,77 +34,87 @@ def parse_arguments(args=None): """, - epilog='example usage:\n multiBigwigSummary bins ' - '-b file1.bw file2.bw -o results.npz\n\n' - 'multiBigwigSummary BED-file -b file1.bw file2.bw -o results.npz\n' - '--BED selection.bed' - ' \n\n', - conflict_handler='resolve') - - parser.add_argument('--version', action='version', - version='%(prog)s {}'.format(version('deeptools'))) - subparsers = parser.add_subparsers( - title="commands", - dest='command', - metavar='') + epilog="example usage:\n multiBigwigSummary bins " + "-b file1.bw file2.bw -o results.npz\n\n" + "multiBigwigSummary BED-file -b file1.bw file2.bw -o results.npz\n" + "--BED selection.bed" + " \n\n", + conflict_handler="resolve", + ) + + parser.add_argument( + "--version", + action="version", + version="%(prog)s {}".format(version("deeptools")), + ) + + subparsers = parser.add_subparsers(title="commands", dest="command", metavar="") parent_parser = parserCommon.getParentArgParse(binSize=False) # bins mode options subparsers.add_parser( - 'bins', + "bins", formatter_class=argparse.ArgumentDefaultsHelpFormatter, parents=[ - multiBigwigSummaryArgs(case='bins'), + multiBigwigSummaryArgs(case="bins"), parent_parser, - parserCommon.gtf_options(suppress=True) + parserCommon.gtf_options(suppress=True), ], help="The average score is based on equally sized bins " - "(10 kilobases by default), which consecutively cover the " - "entire genome. The only exception is the last bin of a chromosome, which " - "is often smaller. The output of this mode is commonly used to assess the " - "overall similarity of different bigWig files.", + "(10 kilobases by default), which consecutively cover the " + "entire genome. The only exception is the last bin of a chromosome, which " + "is often smaller. The output of this mode is commonly used to assess the " + "overall similarity of different bigWig files.", add_help=False, - usage='multiBigwigSummary bins ' - '-b file1.bw file2.bw ' - '-o results.npz\n' - 'help: multiBigwigSummary bins -h / multiBigwigSummary bins --help\n') + usage="multiBigwigSummary bins " + "-b file1.bw file2.bw " + "-o results.npz\n" + "help: multiBigwigSummary bins -h / multiBigwigSummary bins --help\n", + ) # BED file arguments subparsers.add_parser( - 'BED-file', + "BED-file", formatter_class=argparse.ArgumentDefaultsHelpFormatter, parents=[ - multiBigwigSummaryArgs(case='BED-file'), + multiBigwigSummaryArgs(case="BED-file"), parent_parser, - parserCommon.gtf_options() + parserCommon.gtf_options(), ], help="The user provides a BED file that contains all regions " - "that should be considered for the analysis. A " - "common use is to compare scores (e.g. ChIP-seq scores) between " - "different samples over a set of pre-defined peak regions.", - usage='multiBigwigSummary BED-file ' - '-b file1.bw file2.bw ' - '-o results.npz --BED selection.bed\n' - 'help: multiBigwigSummary BED-file -h / multiBigwigSummary BED-file --help\n', - add_help=False) + "that should be considered for the analysis. A " + "common use is to compare scores (e.g. ChIP-seq scores) between " + "different samples over a set of pre-defined peak regions.", + usage="multiBigwigSummary BED-file " + "-b file1.bw file2.bw " + "-o results.npz --BED selection.bed\n" + "help: multiBigwigSummary BED-file -h / multiBigwigSummary BED-file --help\n", + add_help=False, + ) return parser def process_args(args=None): - args = parse_arguments().parse_args(args) - if len(sys.argv) == 1: - parse_arguments().print_help() - sys.exit() + parser = parse_arguments() + if args is None: + if len(sys.argv) == 1: + parser.print_help() + return + args = parser.parse_args(args) if not args.labels and args.smartLabels: args.labels = smartLabels(args.bwfiles) elif not args.labels: args.labels = [] for f in args.bwfiles: - if f.startswith("http://") or f.startswith("https://") or f.startswith("ftp://"): + if ( + f.startswith("http://") + or f.startswith("https://") + or f.startswith("ftp://") + ): args.labels.append(f.split("/")[-1]) else: args.labels.append(os.path.basename(f)) @@ -114,92 +125,116 @@ def process_args(args=None): return args -def multiBigwigSummaryArgs(case='bins'): +def multiBigwigSummaryArgs(case="bins"): parser = argparse.ArgumentParser(add_help=False) - required = parser.add_argument_group('Required arguments') + required = parser.add_argument_group("Required arguments") # define the arguments - required.add_argument('--bwfiles', '-b', - metavar='FILE1 FILE2', - help='List of bigWig files, separated by spaces.', - nargs='+', - required=True) - - required.add_argument('--outFileName', '-out', '-o', - help='File name to save the compressed matrix file (npz format) ' - 'needed by the "plotPCA" and "plotCorrelation" tools.', - type=parserCommon.writableFile, - required=True) - - optional = parser.add_argument_group('Optional arguments') - - optional.add_argument("--help", "-h", action="help", - help="show this help message and exit") - optional.add_argument('--labels', '-l', - metavar='sample1 sample2', - help='User defined labels instead of default labels from ' - 'file names. ' - 'Multiple labels have to be separated by spaces, e.g., ' - '--labels sample1 sample2 sample3', - nargs='+') - optional.add_argument('--smartLabels', - action='store_true', - help='Instead of manually specifying labels for the input ' - 'bigWig files, this causes deepTools to use the file name ' - 'after removing the path and extension.') - - optional.add_argument('--chromosomesToSkip', - metavar='chr1 chr2', - help='List of chromosomes that you do not want to be included. ' - ' Useful to remove "random" or "extra" chr.', - nargs='+') - - if case == 'bins': - optional.add_argument('--binSize', '-bs', - metavar='INT', - help='Size (in bases) of the windows sampled ' - 'from the genome. (Default: %(default)s)', - default=10000, - type=int) - - optional.add_argument('--distanceBetweenBins', '-n', - metavar='INT', - help='By default, multiBigwigSummary considers adjacent ' - 'bins of the specified --binSize. However, to ' - 'reduce the computation time, a larger distance ' - 'between bins can be given. Larger distances ' - 'results in fewer considered bins. (Default: %(default)s)', - default=0, - type=int) - - required.add_argument('--BED', - help=argparse.SUPPRESS, - default=None) + required.add_argument( + "--bwfiles", + "-b", + metavar="FILE1 FILE2", + help="List of bigWig files, separated by spaces.", + nargs="+", + required=True, + ) + + required.add_argument( + "--outFileName", + "-out", + "-o", + help="File name to save the compressed matrix file (npz format) " + 'needed by the "plotPCA" and "plotCorrelation" tools.', + type=parserCommon.writableFile, + required=True, + ) + + optional = parser.add_argument_group("Optional arguments") + + optional.add_argument( + "--help", "-h", action="help", help="show this help message and exit" + ) + optional.add_argument( + "--labels", + "-l", + metavar="sample1 sample2", + help="User defined labels instead of default labels from " + "file names. " + "Multiple labels have to be separated by spaces, e.g., " + "--labels sample1 sample2 sample3", + nargs="+", + ) + optional.add_argument( + "--smartLabels", + action="store_true", + help="Instead of manually specifying labels for the input " + "bigWig files, this causes deepTools to use the file name " + "after removing the path and extension.", + ) + + optional.add_argument( + "--chromosomesToSkip", + metavar="chr1 chr2", + help="List of chromosomes that you do not want to be included. " + ' Useful to remove "random" or "extra" chr.', + nargs="+", + ) + + if case == "bins": + optional.add_argument( + "--binSize", + "-bs", + metavar="INT", + help="Size (in bases) of the windows sampled " + "from the genome. (Default: %(default)s)", + default=10000, + type=int, + ) + + optional.add_argument( + "--distanceBetweenBins", + "-n", + metavar="INT", + help="By default, multiBigwigSummary considers adjacent " + "bins of the specified --binSize. However, to " + "reduce the computation time, a larger distance " + "between bins can be given. Larger distances " + "results in fewer considered bins. (Default: %(default)s)", + default=0, + type=int, + ) + + required.add_argument("--BED", help=argparse.SUPPRESS, default=None) else: - optional.add_argument('--binSize', '-bs', - help=argparse.SUPPRESS, - default=10000, - type=int) - - optional.add_argument('--distanceBetweenBins', '-n', - help=argparse.SUPPRESS, - metavar='INT', - default=0, - type=int) - - required.add_argument('--BED', - help='Limits the analysis to ' - 'the regions specified in this file.', - metavar='file1.bed file2.bed', - nargs='+', - required=True) - - group = parser.add_argument_group('Output optional options') - - group.add_argument('--outRawCounts', - help='Save average scores per region for each bigWig file to a single tab-delimited file.', - type=parserCommon.writableFile, - metavar='FILE') + optional.add_argument( + "--binSize", "-bs", help=argparse.SUPPRESS, default=10000, type=int + ) + + optional.add_argument( + "--distanceBetweenBins", + "-n", + help=argparse.SUPPRESS, + metavar="INT", + default=0, + type=int, + ) + + required.add_argument( + "--BED", + help="Limits the analysis to the regions specified in this file.", + metavar="file1.bed file2.bed", + nargs="+", + required=True, + ) + + group = parser.add_argument_group("Output optional options") + + group.add_argument( + "--outRawCounts", + help="Save average scores per region for each bigWig file to a single tab-delimited file.", + type=parserCommon.writableFile, + metavar="FILE", + ) return parser @@ -214,15 +249,17 @@ def main(args=None): """ args = process_args(args) - if 'BED' in args: + if "BED" in args: bed_regions = args.BED else: bed_regions = None if len(args.bwfiles) == 1 and not args.outRawCounts: - sys.stderr.write("You've input a single bigWig file and not specified " - "--outRawCounts. The resulting output will NOT be " - "useful with any deepTools program!\n") + sys.stderr.write( + "You've input a single bigWig file and not specified " + "--outRawCounts. The resulting output will NOT be " + "useful with any deepTools program!\n" + ) num_reads_per_bin = score_bw.getScorePerBin( args.bwfiles, @@ -235,20 +272,20 @@ def main(args=None): bedFile=bed_regions, chrsToSkip=args.chromosomesToSkip, out_file_for_raw_data=args.outRawCounts, - allArgs=args) + allArgs=args, + ) - sys.stderr.write("Number of bins " - "found: {}\n".format(num_reads_per_bin.shape[0])) + sys.stderr.write("Number of bins found: {}\n".format(num_reads_per_bin.shape[0])) if num_reads_per_bin.shape[0] < 2: - exit("ERROR: too few non zero bins found.\n" - "If using --region please check that this " - "region is covered by reads.\n") + exit( + "ERROR: too few non zero bins found.\n" + "If using --region please check that this " + "region is covered by reads.\n" + ) f = open(args.outFileName, "wb") - np.savez_compressed(f, - matrix=num_reads_per_bin, - labels=args.labels) + np.savez_compressed(f, matrix=num_reads_per_bin, labels=args.labels) f.close() if args.outRawCounts: diff --git a/pydeeptools/deeptools/test/test_bamPEFragmentSize.py b/pydeeptools/deeptools/test/test_bamPEFragmentSize.py index f06ed5da47..92e9287457 100644 --- a/pydeeptools/deeptools/test/test_bamPEFragmentSize.py +++ b/pydeeptools/deeptools/test/test_bamPEFragmentSize.py @@ -1,9 +1,9 @@ -import deeptools.bamPEFragmentSize -from matplotlib.testing.compare import compare_images import os.path -import filecmp from os import unlink -from tempfile import NamedTemporaryFile + +from matplotlib.testing.compare import compare_images + +import deeptools.bamPEFragmentSize ROOT = os.path.dirname(os.path.abspath(__file__)) + "/test_data" @@ -12,34 +12,43 @@ def test_bamPEFragmentSize_histogram(): """ Test histogram plot for bamPEFragmentSize """ - outfile = '/tmp/test_histogram.png' - args = "--bamfiles {}/bowtie2_test1.bam --samplesLabel bowtie2_test1.bam --plotFileFormat png --plotTitle Test-Plot --histogram {}".format(ROOT, outfile).split() + outfile = "/tmp/test_histogram.png" + args = "--bamfiles {}/bowtie2_test1.bam --samplesLabel bowtie2_test1.bam --plotFileFormat png --plotTitle Test-Plot --histogram {}".format( + ROOT, outfile + ).split() deeptools.bamPEFragmentSize.main(args) - res = compare_images(ROOT + '/bamPEFragmentSize_histogram_result1.png', outfile, 10) + res = compare_images(ROOT + "/bamPEFragmentSize_histogram_result1.png", outfile, 10) assert res is None, res unlink(outfile) + def test_bamPEFragmentSize_fr_sizes(): """ Test fragment length information for bamPEFragmentSize """ - out_lengths = '/tmp/test_raw_frag_lengths.txt' - out_metrics = '/tmp/test_metrics_table.txt' - args = "--bamfiles {}/bowtie2_test1.bam --outRawFragmentLengths {} --table {}".format(ROOT, out_lengths, out_metrics).split() + out_lengths = "/tmp/test_raw_frag_lengths.txt" + out_metrics = "/tmp/test_metrics_table.txt" + args = ( + "--bamfiles {}/bowtie2_test1.bam --outRawFragmentLengths {} --table {}".format( + ROOT, out_lengths, out_metrics + ).split() + ) deeptools.bamPEFragmentSize.main(args) - l = open(out_lengths, 'r') + l = open(out_lengths, "r") l_resp = l.readlines() l.close() - l_expected = ['241\t1', '242\t1', '251\t1'] - matches = [expected for expected in l_expected if any(expected in resp for resp in l_resp)] + l_expected = ["241\t1", "242\t1", "251\t1"] + matches = [ + expected for expected in l_expected if any(expected in resp for resp in l_resp) + ] assert matches == l_expected - m = open(out_metrics, 'r') + m = open(out_metrics, "r") m_resp = m.readlines()[1] m.close() - m_expected = '3\t241.0\t241.5\t244.66666666666666\t242.0\t246.5\t251.0\t4.496912521077347\t1.0\t241.2\t241.4\t241.6\t241.8\t243.8\t245.6\t247.4\t249.2\t250.82\t3\t251.0\t251.0\t251.0\t251.0\t251.0\t251.0\t0.0\t0.0\t251.0\t251.0\t251.0\t251.0\t251.0\t251.0\t251.0\t251.0\t251.0\n' + m_expected = "3\t241.0\t241.5\t244.66666666666666\t242.0\t246.5\t251.0\t4.496912521077347\t1.0\t241.2\t241.4\t241.6\t241.8\t243.8\t245.6\t247.4\t249.2\t250.82\t3\t251.0\t251.0\t251.0\t251.0\t251.0\t251.0\t0.0\t0.0\t251.0\t251.0\t251.0\t251.0\t251.0\t251.0\t251.0\t251.0\t251.0\n" assert m_expected in f"{m_resp}" unlink(out_lengths) - unlink(out_metrics) \ No newline at end of file + unlink(out_metrics) diff --git a/pydeeptools/deeptools/test/test_data/bamPEFragmentSize_histogram_result1.png b/pydeeptools/deeptools/test/test_data/bamPEFragmentSize_histogram_result1.png index fd10ccb091903ad91dfbdfcdafe65ea901487774..8268288a32b4e16d0f7aaefee5c86ddf4d314813 100644 GIT binary patch literal 18288 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 literal 14756 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

2cyoTpxdI5P!b$_7cKV;*ST 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 z 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 literal 81892 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�gYQ}Sx&d&ysj)#XU6`6_#pciwhE?dc5m{Oj%(t{|Uk1p%O;2$EFU zG>ia0QL<29mDcyGeIkJqoHR3u)vXYGUxt=Z`Mcgl|^-6b8N{h(fCeZbwR^Z3KyPE6s#ZK(821( z6~0&`#MWY%KvSDX{_6^Q@+*iY!5XS98P7 zT(=p~o&*4m24XM|faZJ+yLa-Gs6gJ29Hcu6Rd*$U2ta?G@cotFJtg3rK%l`7WcWtb zpkrnhX<_uI9>}Hv+=mYnXfd=Oj*!}y8@X*()uFM4?49+h582f7-GV(okP4wxAKc~t zE42CF@ZqJ_k7Ah(5_=ugzz-0Px6_o%Sfcy9eufhaCI{45=tfC(wpn{rVeu6`*S6z$ zZfIX04n;Ix^OkKrI7v_v3dZMDG~@j}pHP_1uVk$tS7?UjGHw!^7mTfz@H+0s#utDD zP~uJYp{(-J<~xZoS-c}Q8s`4xcp5IWz=8ngEl748VM8}IW84t)BrXvV1JR_Uq+k}M zkA=;LfNx3~j@0NflBEz9psW68?a_niXUAv%x@(VJVw8eCBUkCrOvloZ(~5lw0F-?w z*a)OTJll1ZdS4K}-Xl(<|82e@FMD5}IzSk8T1oQ$TMl0D1IwZ`H*f(Q#tT0qA%v$p z3+?4z$Bqb~ev$yaPk6HGU3dT?`87Pbxpokh*Im#ji?1~y@;OUTYqmANQePnCYEJUVz{~d zj0{#ko1q&ZpZrWCErPq~4N#2$;k&0Jn-)=;^A@^3r^ks@^7=KAu&1>KEQiUfaQ(l= z2}Ie{4Cu1&!hG=sKt57K6yUX&hDbO0NRU0K+e| zg`pe>SyeM4z#YAJkKax+6_vEYs*+Y{^jA^O4(FCMTps#rb4xxS4l2J z#I4O+zXpcp1fZ_`H^zVdg%eEK9wBsqeYj$a7i1fXvCf@hrB0YLQVaGB0buuj&f686 z8^LCTU^(JSfIC0ECa@oCWC;W;9Sj0MoW#;N=#bXm*+K?o8S82(V=&^^cXog zNnCW3SbYRcXwvlDT%-So>KtIrsE>}%fb#LJWr~vBOgh*z9Cz~Ft^(ubk1_}(G+#dX zGZ8Q9T*Pqrarxw?W3*yFVZL4g0HRfVZC$jgm6Kywvscy2+j~Td0r7S*Fn~-?`}A1j zKZ^z{uf)=!Wl3I+2%}ODucR3u%HlopC+!Q`e`|h>pKhjo6t7hbtidmL53*N~_OAig z1M3q+ZGuwmYOmuFkVpWXQ_1!qFg%`l@Ct&~qhM9^e-5sNJ$N3iA;;YmYl+;5={fWe zm_#NV}rB9x2`8^Z9})Gm~cvgkf9=Kf8hZhlIEc2c6~55 z!HYTs9xb-ofykPG&zS($U>;`6_*KhP(0{$OhJ6z90lXhfRA4uM6B*2xIXM61!xh|; z%F|E~ld#mJXJ;1rFlrR+sih*;o0q1I(bs2hF?2%;Wm!6LwR;01QtV9!mRId2uuYnP z3IePc2z_Bh=6?#tmbMD9TWPnrMUknd!Z!p#ZbPe+Ksi8x^ zUD=CCHGWl(QRTmls=tTlH)+E2KxRasrM^NwISO%?-HAypJbq^n`h+|M@e%jkm65GG ze>+*1^X{So3C%P4Da@Zg5_&0BJW${s%>q0r<2{&H#Bi8OP%zI4)&qE%i-3=iY(kT+ zR0IULiq{AUqTMGXwBlT63ZC5fOob{Qo6CsTeqU+(F8xI!W!3LMw_-$l!3v|8=)Fn4@ev3oYqW|a0?-CWguWQdO4 zN!DWcq$kua%F6d!q!8qSL&6Lk+HM~K!)V02(=qe;JDSq(yNW1)aFFQQjaQi+7q8M_ zmRrrbSZfHp7LqxFrOlg3NAl4 z_UzFA3K!9KRxrIfo(8}DbOg|%=0SW^%6nn5@}6U~a5IbWO?g4mqg380P`a>FC?JfE z_Y@V_SfCV&-d$g+4o;c=lINP5u1CpdhFiaCtm{+vPo@3jtP?-|cDnWslSS+M=XzhT z6diD=uI}!ZM`hprSFMJ`uD#c{tHIx{$I#RJ9KGg~Ml`J5xD&w~_!_J+AXNZO0IV@f ztW;48loON+TqVd;&soi<4tg*gRG{@#i*-PApZw34$!5o3J(@I{JQ#9Jz1f@b?>BWV zf=D1B>V-c%r3Ugsc@EbCH2VHAzi(25=nPW;G0=_XT@g$c`y{aX7Q;_w7H~BvKdCtB zZq=6-LnezakWalmof_`z*)CktT_G92&ga%QLy(oWv{>QirrLFYy;^{1`fk;;H&dLU zL=WK)!kZx38V%g3>K|j+NIi(DFpG$Y^aGS^?^u+uBCk)KDg^!FG1IA52N&`&xYbcj7Lnsv5gsO3RUCHW$4sm=(PI)EJ5~gjV z0&FvI>F(HvBG6(OZLiSN!I$46DzVWdX`0YxpJc*~tb?o_4B}7c$5Jtw4mt?1{u08+ z=+S=CLp42bhR<@B^H!5TwphSUe9?RTdEuh3<)9xneSB=Oy_X<2ZP}H;{^{As8T#`Ns@u%b-VfltpgpQ1vceR@8A8dYNlEAbhI5Lb+@FQOS?^;n~vv| zs<&kG_XJy7?Uqq)9{Ab%YzTvV$& z|MNs+{r&wN`IW-A1O)}hYn<4CUv1~pJ20RoI$dF*l$^(+?0TbsgY~l4@dlF5^m1~kG{lOry@!|Q z+rD>2+#VYk81z@Y(>L%rUcx5*yU&FHgO`8#lB--dW1*B>Wy)+|z-;!+deQ`MWqKbbkAU3s!3Ngj^a6Qktcc`uG)H**1+xuD zAIQiPh>MHwu?A>yaU-d$PIUrT1O%`JFeKt{ismWmQFuc6;}*lPtw8+u0nD=_g{$sm zCQXnauRB*d*@~&y&0aJcZbQW>;-k*4EaYf2y-Sz_z5P0GJ2vMMyF8+844eipKd`}@ zMi5q+S=iXr{*Wq{M;Y*y0OGjM`qOzNBUHo=h18LH@kD*RaUn_=+9!(n3}_0r+G^q& zg{@QAXneHHa3=r_Zg~qx@OMfy2nrb-t%}hrnXiMf*MAe6#Lr%LMXn@iL&wN8H7Xoq zlZ+2vm#GdTLcxp|4lUK(DHH z2LACWs_lK1N3*Ek-@VFe>~qY5#kMHd-|yf$r5j+B2|!Tu0Z)bI2GvY4kPj2@=~Eam zpeLsl_}bIg+0&ybxZSq4@o@XnhM%AR=;Y+%IOp8_Vn~`SRo3Tz++OMd3BAr+SHT*R zmL35hHMTjH*N0vPPZ20#Tz&RD^lUlA&)T{kXw}bhB?@VPQ+OYMOwWOX0@P22vG06Ez63EU|GItIQHIdR^~uX@;-Mo*X`Pb_jNuw?2XC!hqYz5;s;#P?H)1 zoY5AdTy}#2+V8#gOn6b^&Xb-|_O4O~V@S(X< zx`>Y^Q3;_H)}SMrnRP}GlHC&#;8X0guYQphVJC5~WR^QXgN^K2dIvzN)=jyOeX!=3 zX|*$=yMM4Hn7p_!8Dw@5dfS44`XCbdA0PxQEiJzv&4*hTzcfran#cH$-rcUeDS#ai z!}bvZkYV6lG7pnv@8H3(Tr4*i=?&EVq(l3aZ~?bKzRU;gsI#cY0_v>1MvsuyRn1MB zQxY0crvMftI;nzmTtA4*kTss|5(6ki$iu?}d7t#~t~(lxc}RPY)D-a?QdzOh5cdZC z_7KFbF-_I4E$JPz^3*r2x|CIU+iHiugN~388YcnyJZw^4@gSwa^%V%rdH3M&f>6cn zHq#FeHJa=5NQF^#e0#yc;qfQO(yjSf8fM)=U%*Zqk;BeMOstWHmemo*oeSqM4&g?< zwe;H;XsU}XNs_^Srwc8J0e*P}#Q>0bD{>u*u^|%>z&)Ojs9keOl<(;%bq)43GlnIe zXK25&LM!r1YD(t+5=OD~VMQ_*-;MICsU-m*T4#g;!Ua|9_h*zPsXwm~3lcBxKH&Qq>&jBq=HkXh$dPka4ZNJkUvo-$8vV2CA&kCsPY15}GuR zAH!4hn_EN-Fb%SXNL0Tt31}eWF1*zDqFR4DbAek_bqF-^IncYoya;QR{Y;dY_sJ|^ zl|R4)#Le4~1HUa7U|KeeYXiJIF$Yri;F{b0g>~D`j`y&mh{(FS9N)`}BftY5d7T55 zZ=gtn?cfBA&b$Wm7gXP6gJ6+#!gqi|Vf}dw6yXREr~5(AY;i?7mbViUnb4_xmB{fC zJF=R)%c0Ewsz$kZe>drf+VETk8T0DEvl838pbqW0w3nRg7oOUeg_~fRKc5>eE-n&? zWRS`p;I~7uqgKUb4cPG8s~KXnN3iGIM9|O#Sf&3EermhUIF?Uh-aCs&=HVp5HrHpick(2MBYURsiX0{#XkRwCLz zG=P>lf(U6h`sOu(q@h^)@yQ?Z$?N1VZ_`OeZbA9Ul@S5{b#Aj2Rq$@nGjraHsE}`e zwT?|mJ3DSykh=n4qzHZ3-|t9+yB?bFgBDnVr)xsx1@rh`fNlj=HW+_5M*{w9`VYFH zz{Ym)iSK|M+bv=$ZqB^}?C??-X<|=52&0*Sgw*O(9Y64EEPZ}q1vZc{HtS6jTpcN< z0uoGd?UaBBHO3 zON!X3B~cz3*U%!}a#Q?Gz82Ab%|#Wsb*{3-@zx#LF8LjStROn{i)p)ShokdWz@WMJ zac-JpTucbncAkU?1o;NnOvRrb*choA-pCi-rz7Jx7#O0X#V_tYdGZ9VW;*`$HJs6K zM&U~jt~ZneyW_x~3j)AYs?$%;$L9h+iJ^O8)k=d3#=h$%QPA~Vi$^F5T^%V9adx0+1o2?ZEYP|GRkD3EQ3z?Vz5X>31qucxh`{7oRvoxM!ZhD zU@-8rw;mrcI@`>wr2G6UZaJ@-YrvfaU?(O~&=yjt zQ}Og!641)x=Rx%M@6RG+r#yj>6=lUnxF|81+A4r+25#2lcazUt8bK4{I5nKN=C0eU z;1%BnYqtfAAljb!!$H-<^fOuH`aF`sD27i%)}XLGT#*339yczne1&Mmz2AoEbaQLg zVNFGEqE7R3u7`w_>NblWc$L;HOlN@as86bD)7Dot>06^ba}l_s?F^sMMSu;Jr;re# z5*>4$m{>|`peB^(;|8EgTQAPH*Zz9gHm1$>esOcTZJp4e@83n7H^rz|R*^1+^< zAgbNNhgq`89n}gmA9!VO_-N}v%M`IO?ouMO8iWI>l%@Lz^W)JCJKy>Ca3p3bKsMco5$Vw z=6ZiR1lmu8CaZ`}OuXuLb=(6xG%c+uH?m!C35P!Z*boWkP+dZmw10TMoEHL$pklD+j!trG7-7LWJ|?BLladE1H~e*$p4#3RPeZ8= zGx+=u)ZxeU5c|=B$(O$hm}YTqA$Q9z%z!V7MeR>qH+A-$rs`nYr#9Frcq8uv$g>a4 zMW^%nIr#IHw3z1>a(Dh=G@xeWW^2vQ&vUyOWhg0q`~FRrXu-bWm=%lR5)loa7&{2# zKV!1$q|1Y(G|#SuQ}JlwAA;nN2}pA5fNBKXZfl=N5{1O?hk!p|3BmejD3}bwaw}VH zXkW=63qQyfH0d)2?ut~(jqn&MBr^U8a_dv=Q~1BmM2F8q?ru@+(U2-5z5%$2uB$BR zs+;j;y}dEM1o|ndys0S@NK0bXd1u2Qy4iz-pmo@JY^R{0?f#(q)Bl>%&js4W?HQ*(5>vq``UX79*cLxF~q6BlTGb^)f)i z!R|krtjk?y3wf6)@txLNNDy|4O)b71Y$0DniJAeUoccU{7oR{Mib}ZttgTFwhCK&X zU3Y?0Y6Jmhn;_}p$`utowZ=-I#_#nHr>ysn6Z+CcNl82F0dThUOkI}WLjImtjUW+W zZ@%d--zRt7)mYdhz!|OM*7(0NJqLi)G9&AoMfV-PAxnTltgZ?1@3dW98A|*R+Wvlz z{e4~Le*oeQVbt}EjEo}?oCQC`U_zh3l0@F^WMp(`$cR`WgLzxQ#hNO2&khym&G$Q~ zEn%M@Gsp`<0<((j3X7uhn~O%apsJlce6V8>&FRZ3vVhevym*0I2gEBdX{;;cn3rX6 z@aeCN-KCaskJtPf%@q*raKryF@BI4f;njb*j2d5gOM1@(ZNul(%IkA;SxkHa0u>}t z+yGr|(4iA$x_~(&_7eUFL5HBlAf@!aD4V1z5}_?%P5RluJf*)GuT>&`OD$g@`33{O zTg}9!xFEdSyZbt=2%8~#;O+>5sF4bYwn8cdxz9h$6(%krx5Wo(UaRbYBW(mZRQO?= zVMH4lOg()I>kxu$ou+H8SidHd1-3Hk^OW_vA~)L5ioyAST_ut#bJ0DDr__B!hu)F| zNg$jDmdi}shT-rcmF6ih1n{wecaHm?PP_}mOEWORNF~D42UOE*q=8)ypiE~h{3B+; z>F=Pf59PlM2oER5W?<(nocU+Go`TZxZU`{}3-Yu8zZpP=>EcBl$R~3w2LhvtB|sw* zglN$7=DkMIAu82Jd(1D7w@S7|8tajsL6t$#sZYsd3g$3)`7`8z%ZVOn_3kN^B~(BG4=8U4}>;7ruluU{$ps_kd!*;LZLPSkETw$#UE z6&XQjQ&R4j=>~g#21BHfEy~>?{;UO!@CVtc+aXb4bcaa(=1IF7EPID;~p&1($DXwZ+c>k1RgkpaaS;|Cn+`1 zGlN%yej%WL_ZlJPm4Va$_>lqNbV#UquY&5GcU(@=#tD9ZCQZ=kvGeMy)Y1}eD%3$% zQDC5iwN|ME9U7}F|LP8nk1gAN2!Y`_e|Zsn8Y=X0u5@qDxjDCavNIBP8Df&;>FxTa z!1W&NZb#YCHXpD_pMh+V$ZiMo5xDCynVDr(fIi>C{v?B4&C;D`lojNhhG@cl+J7dM zZmRKp;s_p&QFv__l#d=S#{-HR)^Q-C6##XI|J|hd#?r`ye;qJa0NsatS2BGQMe|d4 zu78*VhOADIl4Rt^`~L`g%cv^buKgES0!pfgG$<$tNJ~g7r6QB=Q8hNlsAsdLS-J^P(*oOQR$Cr^=;-1WYnyx-kGTY!pg1U6V|Ve8m{FEmn~;y>!^dqA6mdKm1NrV)$OTz#T0v$jsWLe-lq zwrFP%DWC6!bJNFWQjN89ZD`80U*SQ#KP>;eKQ|e_j0_DjFy^Ku=rYVKOeY6mXU3fr zID!e1%h@?;?un@U5&7-Sr70t8N&!O}EpV$N$Qd{Q31Ie*0`i3KJ7TKL5W#D4G5ba} zk|I0Eg&B%Li#?3~8@sy5K>~}-iF}eLI<}L%*V^##n)#f@*f@5T40EXNLCP;8xKn(Y zv$xVP3V-hkiWvJVXA*>5cmc06vyyhAvOYI6ngxev=pL*!DwU@QUbYTu2pe+D9z&Cv zxaGH38QiYOnwuRu#R)3yw}clZ6HM=xRxQ_5%!4IG1SRpvZqs;MjaNJfK?>9hKm0v{ z%$!oo{o~QKt%)z(3sK*oh>$5u8%v&NL8^jf`iS5D zm0|YteD6-q%JHACVzTI&9B4=0)@0GQ$mf8@+mct!m_|l8Fnq9O>Sm@vokaH~_HZ?W zl%UjuwQ}zPO4&A3x`}CSQN#x%tLb5DspdWo!uCi?UCzdE)2ztlNFT$!_(n{8+C8RB zDU_;M5FT0HnWr@DGO~T4Wujuq`tQkin@i=>RWX-2K?p_ehT7ink8|*E{kY4eeHF$W ze?BK=L^xw~?=qY9(HZW$J>+j3q>h4rG@1zOXYwoS=r-G*dr_ie)7+91N^f9ivgk=8QQ&4Y`=i!Za) zW~CWr(>MPs^qFzwetGi7ZhylV%tVxMKB*!j@bup@s&XpkxdjYZ*OZ5@w?eL-=A{JoC*NRw@Dj_L|W(%j(9K=-bUg_49P?TO`Lx6~I*mhGw5kL_gR91~qHvh`v( zr)J3BI`=R(^Mb;1mb9wAs(a-#1uK?M2%IGl|Rfi5G6%zY6<=Z*-0it#MLL&GDet<^T~Zg7Pc9G;yFSQwkO z`$w>Y6%*Y{Hx5sRuVvYQUly-Ozc_D6@Iooo!rJc+?!CWr#q2dz+DvOgZ((xZXM6vW zp7tIcv(zK1TibgLCwLMXtYiP3?ZXRz{sHm?FZ7qGa8rK!O>94 z3s#xzhblc&eSOmb7vR5f?!?J-ORkJ+R(|J2^qLs*M->s9@(8^4GWggjg=-Xsf*daze!MlNdV| zUlN+9;e!2P3Emb^a7r+IywM(%=LrY)(iPr<^r?8GfbdN_2j7^YO+N0wQ+@U7 z{-5~fD@)084-eK-E5_EVigU_OPZCz`^NLc^<0J7g2e>{X>l7bEamj+E&GAARtyU;6 zUI_bOV&>Vw6hvM6S=v*`_SN-`*{WK)HSb1YR0S1E`~G(WR^%-mPI?+4W0~F*%n+73-xEJ@0x0=?tEEwEz>#np$*OB z#BuZ{4&ErvIR&3D$Nd#sFq~Uf@;j_}r({>UAf8<*c2*=GZ{G(0JQJ>L_JGi^pOwSy z?s=WW-u{sw80tgS+khus9D3p9T^R2_*41XBAR{Ad>BB%eZx^qM z3w9Kn){S3co267y+sHCTYzw&x!_+xpAu+VH(Xmm1CU#4h^o-}WR_q^-;q1~KEV@TC zJ^wrCko)DEK~J%_d#B<7R&IiC0x5W?GgW`Ca?r4S4W~!5V-yM9D~yG-Y2jN`@T(BH z7~?ZGRcBi^!#owR;5{UxGksi>P<+Z6oZI`|kP%F>+%vWywB& z0eq5~#RWsw%#C*bap`ycDmH}8G7Lj!zF|^JuM#$!y5uUT{m?9R%^)StgnUG^W#^ zX`hdiF!IcEL$g0VtU ztPSFKn~?InDkP-gR752V0pggP_FQ7@!EN;wTSQM6aDX88Uaq-c#aD`{NxXaFY4e!F z()5VeZhlP>XpBOW6-rgNzsM&ebzCwLW>*U$%Gb?}4}SJyQVoeAzLYuh0&|AxIneOv zBA_neyOi0>p2UN=i-VZQz>33znGAKZo(X&z=0D`Zd~VjwPyJ{n@q2CP(g-VRjr=5g zzB*wXKXxenWlblJ4hc?q5K1%z|0ueDp!8oxy#zc+ZvmY6PoD;49M~1e-un5)l!A0H z>gwWD1LxI~feXv&(LF_C;C{UdPd`8~FAa$~(s{Cq*t;}L7vxgE5T<@3@V8-F7k;aKIi zA6xq0z;crr&@0vsANtfz`vZW`?^O3X7Z z-ZdQFcqRCwC{({7Obp6u4AQ%kFFno&c(t_sct z|!bLY-|HwYM?!_YT3T}5C-d|?jcdILy(=_P zn$hK>gVi{1ylN4d>D-DOFXCHUcB=ZPis<;l9s6`V_g>3H% zPY!B)`8L*!MES#`t~;*IjPwlNzkNu*PGPY#ZwVi2W4EDXu2!~v^=*+?Uca&Y6wS5J z^~{25?K5&<*ZzYM^k+qur!ps1V)+W_ z$@A}^0_WUY@NCJ>m!KEBaltmWvAxY%@C35uRmJzBQaYZxEJSUN)KSvouL^qY_6gdDj2gdXBC8wLYm;}KYT}e`hb$@X8m)Qp z30ADeX3uu~445?yKx5h?SZ?>XtXyZ#d;wV``bRf==P3-Pz zy{;9@M)MujSy?3!5gd~VlxXmPuM0aF@Vrd~p`!C+TbqGzM}x0~@hWL?Y3!s| zuU^T1J$Ug#|JUQX>3YAfaCt#)c4eb+0b{@N@X2D85dD0rVBOiIu}`u4dzjF}>Jd|^ z4c~XQnuEA(r8tHmgsge&(Y^ojT25pjMfv#na47p`)3JxgMg+dbQ~mvok!@E0jYyPA z0sn$Ya1`;;0Qd5D@_sVz+1{eC(A>r$JrUj#Q`vVuq^$gqaKnF16aK&E`c!qGNLJ89D3e(af2r*TRoL z$^OycPtiXMjyip(@`d@$2RXmY4SMm9b?}+F#K={v$9&XSPNbmKV0HhdZ+!jmy^8yz z5W%Nq{|;Xi*tQX312TAS>F6WS|5$*J{wHMAB%TM;-vejNVV{vv=FdLdh{*HWoG8_I zaGdFU*%~(U*3w4UDzqAY71&>7A2!-b#`BGv9v^M)n=RMs#XC4TtJw)mp12Y1c~wzV zos?b{_A16_%9Zkcv!L>UrdFOZQ0&Z{IbN=$w5?x&At%i`vo8#3)lQEgIdM->u^yT0 zF^16Jz6g|7APc}X#vDC&x_wZ(BTpfPrVnYaEnat~5>)GZ>nCN~Oz!PPd}UK)V`qnh zKNL9?ml@^T&Ldgxh<+Mc+5n9low`Oj&hsnRy29JqZSyLpxNrZyxcL!~01X}V`}c7r zB}Oo0d(t`e<9xS?q?yiW->%UgyxK>|Mj@acd|3Pa&hLee+T%iVqdDz z%O*yC6&ki^MTsZO5EKy=+HER-!zZHm!Zy?KIfN+bUe#6IBG+UiS-X@hG{sC=^_6O} zl>U+QLrbCRNjsgF;2>EX|6xcunR<2-e0KB+MB0OXLE zIXE7WuDBlW3<6iuV!L_0e1*H;Lp@dxtM_-R+khB*aob*$J@U8mV+CDu3bfpDDN| z!(QPU%o7?A2;(~>I3rB++e`p1lgCQ>3-_ba>U89tF)_?$?)Fco0`$)GtJLXBC4M49 zOL&R@y2V?f?d{hllA39Uwo|#i4k6yxQcN{^^EF-N-#LBJWbn?1(<)cE4?Y*KNuHZL zS19c)dLI24I@m|^dFY*6r{i}?U__gKvbDX9gp+iBHxrOE26=mX>lmu)Z>=sWgJt!e zApO{3KUvD+p{rp3UzMr9T{wgaMuW^#U7A5IhR9P~D5}wL7C;+FAV{6i6;cWpsHwG{ z7WIMMfzPb%(!=Om=k&`R0X#-LwY209QrPE%zvxL1P0HQ`_pSSm*fAO)L#gPi!w8ad zQ?!*bVrMBvi5#bs2793H>XP`}Hd9@6tcn(w+rU=#>JR#v^ID2D*q5)XrdJme3F_p( z#cOs6{_)9>f6ln*FGf(@@D05yw@<7&QzTXr{DR9>{!lyo-On`wB4V6LUM`kWjz4u7 z1wj#4nUf1|i`{-YkyCZy@{|vlzF+NE*v`@M$*Mcj5bH^3R@6)@8LjyJ_YBvjgfkq7 zGTM}_Anci^q@<){|A6N(OYyxSRN}x1PBu0|F*LRTs2`nOt%ohM;A{GHaQk0`Z0SAE zF}wwXEZ44`f!sy|id;OAUv5RmuYyGBo#Pw2;c39t#faMJiZn3if94-ceWTA5@YB(m>HuSLy+dHo>ZYv^^^l6&j!<*ftuBo3|t>IEwR1_8+ zt@BhM=xbmj4VGD(2)hvObM#_XbS!WlQ)>G@qXabDx=WlC#p@0%=6`hrVgmb~5BnUUierK@xW)=guXb9*-PTlH({0(Ckh8 zI{-y4kKL#IUg5NohIMmu%i>1cbqWp|K}I#7uyo9x7$kwL0rmqdf`J9MO>X%_`#%t< zo{EPRFvL1V$50RDHe^8os2CkT#-Tz(*olkb=>;`K5H$Z~QWpPQq`|J*3QsIrD^1NU zdRKi@wG~%BbP31*x%$gGM%~!Ra*1qjNJc$41jI^TtA`7_PuD3FvU2(?m^L ze_YRl;5l>RXJ#{5zwTr*G)*kWaB4Ck0R$V z|G~A))?rjjJKjZ>oU*%cB(cTQ4?iKjE0v&|=$oEtPRt@AiZ?5XGeSyeFW}QCY{~Za zU+0a5N9dnpQ!Vh-{w-~a05N<5X3k%1uuCBf=Gz)Y9(OY00wa5%RSYv%2Z~XfnjRa4% zkmD`6HhO=hdW6r`)~TsK#4i$*O~=W?CerdlBr25KJEqi(ZGhIP4~s+umuaGgRr_;9 zkr+ABK#Y$wfYGSA=JZ5&dL=wOe6w4IJi|k5*l(pf2?hVdyK?#6Hxo6fR5}DMGma{k z)3_(zRUYA)OpFavVwM!wEOWB2O|5K77y6LGNdel&S=Ihf+CqfkEHD{amw^zjP>QLG z2+1XI@)21FwsKqf&)O&zyz}*9>y>YUf=HkU-uKWWI)I;BHH>El$#Ej=>(U8VVg%NN z;GqGrg+k(ze_y$}meZ~xM`Tv+9%R~#!LeyEm>Wl%s}t#)#(Lkk0@5q0C#`sj*D*rx zYA%g2m`u-k>+~{rQ-JR*GtjC&Ok^ka(x`syEAB2@dB^7@=tvKa@@JD#mmJB%Cq>nl zJCxhEM?qx4U2wK~qgoLp;QkyuY8M$94Q4hWqZt|*`OUXC5M1X@{mHjfv@F5bW$9%L z6+Cl@`|x#PmowbA-oAaSxA8YNmR`?gK4RGf1X9&Qf0*Za*LaN|dHn?7LBhk;K&u6t zAHPk`y;>`k`Qq~7IrlxKGFRMEF8s^Ecr)Zya(nl)aPzL1Oe7#Zgk=yuy4>6Gvu2;Z z0S)^|b7NyhQr1WENdSpu8&r*mQ}4h`-u6@bQzgU`-xx?Wi%`Cbx+JrRjyW~5r3Z8M z`+;&|10FK1VvDe4Ps@>Fb_8Gs8Fg)X7n3XyE?Z#QO4OU2WH~d@<}*m-^K2i3PWz*|Sz*lzAIMA#A3uInD{2V6Ds$7*#-)Z`HSJ3bSIP#rgAYLe z-vjC8@9V+#ZGV6Np-LA4J-uRT$)(`D_G`{ISS1PD)4>WDTigRE0oAOVmFBg9FVC(( zpIrNl#b^I4mx1|A*Ju4kP@ZIEHR^@bR0uU2{k}ff!#G~Le^swMFwUqJ- zQKA0vl<+&>48e`(KM00^51A|X4Qc>e2Ojy6BR+C+@}rZ(_4gk>s53l=0$y}mn_X5n(M!N*-MG3|c!=Vi--iF*NeU;c6!6K3?+EQPN|f7aEafM3Ni zQtFY~Ie!mPtK}JzBDi*NLys8=-%hgYgIxYkoa8%CD?$(RDz^guez|UH_!3Cz)ROL) zgWJ!GL!0gK&9p(Leb&DULPwz&n-W#gvo3j0&v8aAiA*aBaeFy2r_&{-UE}p7)7gnJ z9umx~LM_YVijP*UYtr#|TsD!fLX8C)Y0<>6gup$}kY;8A zNi1ES=9BvihRUK-Gx)cbO%E3Q^dM!&NN8W2R10mR5+EYVMGJ1ZaC32WChsAO4Bl=1 z`fy=OE7$#IJM;(YpMu=u=f1a#UuFNJSXU$dE9L46clGesW?yt|zVg+UR?b=v!!=p3 zqubd`q@!#{`PWV{vtGDT6KwV2L2h11hm{Ep;W^-ns<>)IgDw( z8^n7Q@*)V!`iGq|s-zG@?5bDuKnBptu3Q&>NqsTaqDrAhb+w$y@cJJ(8#SKUSDmSzgDl zU*knga%=KFFt2Q&kOV3kM?ji*VZ!pl!n28JVH+~Hxy42AQkx}zp%0aP-Uoiw!|(LI z`lbiuOV)N8;s$fq`Y?I-Kf}C@1x`9?&P6O1+tSunxVgLx zn>G{!BkX?OLXvBABh#M0#-vt%j4xWGEYPEb+%i-2)J190LVaNE>g=U08 zl0d%A^g+tQbR}l9=>4)R)II2Dz4LLn;@@X~Gt83Sad;$_;J4$)6NHoa^xB}ttt@#@ zw)LNre~x?EheoteiG)Lq6YbadB6hvp0BiX-PgDstDs zD6N0RvG5VcyH_qXg_yE3AZC^}n0Ji`Z8eFN{!v@7s~NM$Q~aKAYnRxu0+;&O*V(J9 zwAQW4Tk3=`_7UIi3SyXjk_tj#M}m|g1I~TrZ+epSmoBBmNBU?|us+P+*;D2}=4a?cBKLu&i8B*)U*$>OEIq36z z6wU%|n-`5?;x*R?L46r+4VG4u)m0qDR2l-&rr>7W2cverMGrH*_^b2e;u|>p{QPP! zK70|eOJ06F*xH<0d%E~FB=hcJTLfo+&{djbodl8<`hcZ+h`I}C(${M0CfjoK)E-

_li1<|?VF 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 diff --git a/pydeeptools/deeptools/test/test_plotEnrichment/plotEnrichment_defaults.png b/pydeeptools/deeptools/test/test_plotEnrichment/plotEnrichment_defaults.png index 176e3dc3fac3ea23b7959925023c72cb228897e4..6f0f6f3cafec87946c702e505983360ad0b611ef 100644 GIT binary patch literal 56069 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 literal 37537 zcmeFa2UL~k)-C*kQKMK+V#Fu{N!)@_5NRq>jZw3uSwXsuCQYf*F-DD|q8p_*D=H!g z0)kSkh*YT}%>ryX3Q{-apKIq}&N<&V?mzzjj`58pBHRqaZ?Gu}I zHqM;BU^>GvGuglWx|Lz3NYKAuPr+Xn?G&!Uf0Ufp?{wbgVBzex+tHlS-tBzA*1_4< zde0B8=8jI*4)*fPm6j_={b1$ne86dqjEvpq2P}7Rw3HD$TW^IInRehe11E+Ndqn>V z*q6AdF$`xG``5MG4@Gp0y5FmC$s8Y77ycn|^~EbQuC4xIf7AIztFP=9kk~WpMuXGY zhy}kEEZSC6mw>!9v+#)udm)S+qgwgJnU8?4n>(59`!A*Ba-Rk{|6}-_3h% zlMuOXmJ+L2eSGAX;;$GlSsMXnXNG|gqwzS7j4}SW)r+MUUd*!>S+Psw*i4aBjc9qB z%3BM)K0KVi#<^u)m(!cWQ=60Wmun_lnAQ5%`;L!(YAuu0RqZQRNlV*bv2>p4q204o zKIBXe6JkQt|9*9+r%!$v9Incaigc@YKX+!dFTvL&ZSd8;KyAm)l&a=D$>@TVD${W7 zmDMb^+`i{$7y6ETG#i{RZ&{=@J~rAeEPlT`%X7o2@6Sm_9r}qI?dy}(pORqy`mVK7 zZCXOiu7^8?n4Ho=Lxx#!Y?(yX6SidJ`NCBVD&Y=U?s_IJ6%YDf+qAw;vEfWs zm)}!+?_l+T$1~;kK0D>bt7#~Der{3OHSO?>&TZGU^7?BWqF-L#7`xtIc)qf$ZKZ)_ zWV#yn#j=C~fvF46vWBXQeS-X#XI!uE4>t2r3b#u&P#gL1_*Qb!8hW_lU8_6aH;6Hb z!i?Y5@DzqoP|?@&IESl*HDs5#sn zTh?ah`RV0G?rR5AJtMmm=k`izcF(K50n#s?Ga8eUCT_i;@bnasY9W~in+GyH2fBLe z+=@E!&hhsxn=W}3-8=Zc=b4B@Q-=a2^S&|PU3$n+;uUMsz zRnk=(y3*y6A0*Aa?+~XK-)5>Cxh7?cnx)U!sO>3ty9SGJJC2uL$r{&=dpXgnv7S03 zYt?+XDPF^Q<=ew{2)D{#&uqK3KghaHBL8-VMV4EeXo}eJ^=~W>=B3?JKkkq{>YDm$ zk3Wlje3s|}50$a;Ta%lcyQ3FJyX5E}iGI2`Iwgnm5SM-JW{{1*?n~zi-OX;dmcZs{|?3v1vO6bGA3UlV&qRC#&%n3LgEll;43wJP#qt90AvO8EqD zkM{atYIt{lRMYDeHwB9OjvTCO_sy0{zW5)@#lO7%oQT;s!-AD$LPrLs>PWxf zZeKdrQijnu{qM#%bLFd;u0DU6tkn(P+}f%KK-GL|HY`o&$+sx*yJu=0-t^7t`Dl9|s$ds9z zdaBEc16IHL)7__N%SO=)tWX8(t!I>)L()?N#MRZtM;pc?S#UcpQW{LmiO-&-yy{Zr zBn21Pp_Qr6P*X-j_V^gjCBY0odszO&${XW#t5;dlVcaP0?Oe2`{njZl)itUfpPt{z z6${5AwPB+kVX981NkGIxLoVX4u6?_?ucV$vAWSJedXJF zYwK_Bh%-L)_NdZ_oJsQzHBVOD{pb(cZZ>CC{h>uB8O{b*iqkt2rR9e@KZeTM?Key) zx%lJ8D>1rihh(G;Q}P@|t8}t^qp$a^mJ(F=*UWl4s$_dTyDGcw)?_tH=^Wci0kfH8 z&Xt1ZJB7T8#x0mE!~H`88AeKTOL3JmMAs-hK0aGF+h?@&#)_{HNUaQMuaxxI#{l0e4h>oEV?*5bOm*+!PXuJ&KRcbD zxcjl3RY^<)xCLbCPTtQb>HP3;s%1;b#lCvq-ojPA&EXEsl|~MQho_2#0BTAVhFR+{ zCFlQs4{r3<$zI6a`h>+BhAY$LY+og+j19g|AE@_qdUrz7qS`!In`3<7;bbLVM>2u) zvAzWG65+N+1TVi;fP z@n=FtxP8XYo?YpdoPF)_X+?_yR5;Cr;Z-%<*4XGGTxO)M`l!OP+xPa=dv<5uwfZR`=vx~NtNQyrQ7LI?tFa3;7Y{QUl zxyM4`!@!jd@5UCcEN^J{QnEQbJTjWxm^^E6|A*vzjmg409kFmF-&OQwx5c2c!PxOuRNE1NUYFg|Mb?2M?91MkhlBgC|@q9avhx&Oj-u;uXA2&}`* zVNu3!{bxjXT{mROE*OzZLKU)VnOX-B4pCfLAo#R8S0m09Pzlxh=$RYCrtJ;Ux z$>muV){l{m03;cepA+z#vTp)j@-HUZyFafdUnZJGyD#t5T#(-H-W+Nv=Qa3&m6yfq zGD`F1JoxZP$R**vTen(+x=m5%xKA}VICRDCM_#^}qy05PeeO(-51$^e-aVOWYNQt`-%TeuIrtO5E%awf| z{V~lYA-h9>l`O8u@#@dv9F^tX0gHEMf_W*I)cP)|{r3H4vM42PMBv4B$1QUF1o~1F zGTLq`b>1x_RCd*_CbchBJ4z+J%jLdnXETp01&+!kL4CO8@|2K;jMdkl*`?xXbB=07 ztEpBQI~C4T^J)W;mp9Jy9hWh=?^<~KewU#`jbyaf)`1N3{Gi@ZC!FXV10KMZ#Zrd7D#nQG(%!mj!GqJUeanY{Pfc7isXfxz1~zjC~&X7dR$N7KbbbTF3CU%?M)opq&x}mWXXjq<2*;- z`O8#h*6%tpvw3LjK|#9rXkV4tbprvvW1o)-pZqYqJ2)aMCT~#?(w!CUGu)~Y&<=mQ z#-;5%%YE?eaV~HEqK#*?IL=+QN;bFCn;)GKViZ<1xue-bsuSm3!30>O_Wt zCRsexaqHxwGpjFM%mT0Z{pa)Igu}f0OY^3XpBIR!5ZutzC_8{6%ww%YOmQO7&7gd@0dT$62i)>HG zRwHtx<>lo-7BME3c+KA%{=tNZPb`jxw{(`*JYoHTt~w`p7<2LiyzcC1c)LYzwFh%m z2I>yxiaNbNy{gEmX1-;_IkyJyRq!|FQE(3fOghOL0u4k_+U(+-Vb~g~+ljt=_|?3;g%3yQQ0YM^0H3 zhM6O-%~$g}M4JH8>ne=6wfx35`t^QS##<&jeYnWT@_it%+T(Si#DA4 z4VAjGtD3=gp;bUdiH%?7_dNOYmj;H}xo`sO?6Rgho0Q%1dvAVUh%9et@O=OX2b80< zLRS1p)i=P_1sNsPpEP4PL#s5+6+;;;N5_QgJS=)-iwHaxouZkSb}l zmDT$K7Xla=cy^}9`-}{Z6pxSSQi?faz8p(*jq`In$DqSgfD!sT;S2pI*>LsY=s-hs zx6iBcB{rHb*bCQPJ;w0Jihu)udZY?!Gr^ZcvoLbPBmTUR! z?hWhAUydJJcY8fp zehE`hwo|h?yx1R%iMF=%xT%|onLx5d;R{{g;WAd<1`)gS$d7&AzFU-M>>t3IuX5-B zFweQhJF2$fYbnV+_D8X;HE z_7@g%n;QTBCYpG+=X=I#!DlSeH*L=3THG|7v*{|w#I^cr*C;zsqUma|>5D7uz-G^p zxP+`Qn7}eNEgkCc)iv1OLK2|(%PKM@oB!>VPAyPe%1%O=+5(!6eDSdl$Gv*P8wyY_ zjj*rFFmJk`UqtE++7=>wjB~U9oo4{SW*6fCifPv0phd{7^9Lcj%3B8RAD_+(WD(0S zOMT=6Rc@U+SJ~IzTj>4iB}qt#z_@kq-AR`k39XRL1H<`Z8gjhdi}NgJOBsCcG^W(s z1K=)G&J|$jaNH%CN&2)or#oQs&q1K zGphZs=)cO~?LHaY@a5T)N=qX606`vQ!$!S^ahJGNss?4#* zK;2RxKZ5Ah5JV)EZd!I#JA7re{r%3KoJq6yT|T{X69-2|+8tb7o9HSdQe*JADf=sK zcJ%=oiL}`;jQ{5|_?K=2UZRRON{k?os>AJ3FbIM2MXN7&{kW4LVk%xQU2QLjm)_Cd z<_Gi4!&lk~@2`}(|D?Awt)WQR$o9_W=xL0m^2EC55R#^6Rq#duJx7l6y6%?g(6J$V zjE(Zx9~J%4Ja~7JyTr3#llr0VtPZscOwJ=(RlZWFpfEmSfdM2W1Oqb~io1PIg9a+1 zk~7O4;+MAiXs6vD%x7N;>+P5_aO^9;*MC1%8m7u{vzdadDqRS-zE!N`Vz|DpZ{3vX6-o_^fy!x^3|7Y~P&&!$C&&Lyty5oCHBs z#>&I18x8ne-O5HSo#W-&{P_Bo%i!+ty{+g}OI3myBxieyXE9Q06Dz6V{peQ#qG3xx zr?K)#8V1zud)u3I2_RP0*riG4`7;)-POR?-S@2U~_$pn_j0FlyaG~*O-k_c4D_Cvj z6fYl80n@Nx_}?}kl+Bjspd^#uom^&tGXiGU#1UA&2?SIgxBw?CmL)jj1W&&TkT`nX zoI+MBY~_sFa0`nbPlP zD!p1hpDv3RrWBL-tV~xub4%7FCb8x3S9f~)>snRM{(|0O_2@vIH9w2k-Q5xdO$Z%B zBIj}rPwM?trptvb@*cepSF{NtE^zR}+g2<+kwih#Mzq89Ygb15ZHg&{VM7UXnXsQG zHYCT=Sa!=R@=1ZZYDysbdVccV5Uu7-$NiYdbY{utxbx=ZKjjKPe32_4N%|ipQT!w> z8zfth!!d=9X0n>a$lynpTv8KjM?*2J@N>ofl$L||Rl@*E;tv-#-`Kuil|&_p3`8co zPV_@SB*_j!NL!#wf0p_hduZh-{Hg7Dfcn_#dBz9Ua`u6Xw=Xz{|LZs9-OuM3jlx?g zm4>}uzEG+b$>mGQH|&ko4i6$843T@&)vbB6eLfs{_Wd__hSe^-?PmD|uv*65JK`!H zKz%3Frvw4v4iZ022_x0Fl@|X&P$XR+;31N(fhG&AmW`hA!KX4Rw;_N9>)VPdM=DAU z9rxa!5%Zaer)ko)UJs4CopH0iI{~sGRvz(jBq9@DL`!g53$mH8Q*=VuJt+y^@y`PB zSLXD3{-3M));iestpwvI5pNjZ3^i09qB)1JzeE+HDfC-BI`I$w16sky6+NA27I9q6 zV+rxXnRZ~(3uh^JoQ)psuxzcn?{->(wA#Y!lMQDx%!=5bw_R&Iu0FDRxW6;}?c?KI z5R#Oi4YZT^5wzn4Ec)V6-azy+W4bEsV90;`B=*8RAxYB}191&kO3Yw2JV)|VVWWK& zJM_V^_7*9-x7~qSyN1#2mP)QDp*}$tGAdM~D zyL%K5^@ebzmY5@sP#be!ZWJ#>8WR>h_9^zLBq{ENgN&2}80}{$mqfCvk;TX(V~{!Z zExR<`i3_JGTD`|#8q%-!Gn4V?u$BBbqbw1rk=e+*c@TQ#2mcKJTnz7O;3kC!m3*2u zhtUX><<0*Fx+$YKdx>`S$R&f*4kt66ZgQw-f&>#(EBaMZmza zQw$3gtBjL#a#4#=M8&TfNu9_+IeOGZXyr8m55C%c+`LSCRiR6jN$~hk^!QNes4udr zMkt^QCBkhv#4vxH%HJU)fBp{DJUKB(o|MOq&wnJ5E$Nb}U_$rY3v-di%5^{J)uCi( zqkm`If3Ba{pOUe;dlDXMHj_?bE%H3!HgEj?Chl_Hu@exL|BND#wiqPZ zS`n*d5jhG~2WkTe7T8AvYBi!rQ4BqAII^UyV`YDd)`TwQ9X$c()I{_%OgI=nSJV|< zL_H2>+t*K}jbs#NuRwI|4(L_}^D;a&gHbqpZqY^wHng)L*vqtMWek&|;NH{t0MH{; z#of`OC}QX;&jEG8$zZV;{1PZM=lDX$->4je149)L6!~22Gg_~?chw+RId{HRg#R(5 zzbu4Q^l0p4W8+#!`33(hERFm(NK~Vis(|fnE`d zY(yQ9Pn$E+rl0)+_8J69=qMorT1>^3bQq+fJUym&sPiv(*130yP{V=K^Gy=U7zj7O`8- z#GE4Qnh$|Fbf;U}w=jN>mS=t{twr^c&Do)EqDYl>D2;>qJ8NPMk|kVB7c+?=VcSCv zjeN{Sg5j7WFjeYTAYIO1tg+5pwH%u(JGvY`#>o7Uy0ti}9L_gP#2xufJ3N(1$mt=F4BJe9thG zPm3zA#G#RlIPm)t0mkg0_EIgXF0wf&sXH7FKxyHO*Kt5kO z%@}o>bMnP16etYi;TWbHLWE9{s^ocCd3*#(EpeE9^B^ogYntgHT_Q`+o@0CO?XlBJ z3z*G0cmOoDYTh0ax=|5xbXNa}i}-~k2y^v~W#Np*AMIUsVbik!akKr~nV7@zh%fH_ z)t2(srB@6C1aY<`=1RCCM^hR7RF>Xy$)D5(GT!$p=nZ#2K6VvB2t~)E*S=yF7}O+HjY3Jdj9aFsm(~U@+jSc2>1GjyNt#<>d1)S$T0gG6Ccmw!$f1p zyv3~z*}l}_VHofgqrkycQ+t82N9)xgFa*UUX+2ot2@q^5Zj;WfgkC=X@n zWQ|SGq#h{Ka{)!O%4>`>9~pft@m+0{;?$sHPbp;l4}~YH4Q_3$Gc* z^WDIvW$~Y`^3og{)YM1b&Zbry!WEMx_<<>y9}AIq9a?%}6ItVAwPw!-o@w13+_Xkn z70aPX!L{QR$*HNXjoMzqzMjTBl$VVi{A;`Q4gBV3ex$`b^wYfu8*<*^u-g<`CSE+$W z32GXu-aeWm$oR*>bg)9o8%15VbBb^Ky~6P)>Bv?11MA8HlUM{B`wKht@@gEiBT-LX z48csRplC1dku}sYV-vG0uYb5bflKvM93u6Gz`2szVds;J)s(3w>;z$XtY+}?$+2HC z!uo;J=Ny?jTc@Wwbaq;Uk0-p#mYTzi-=&pct{xy^N=Iu!GAZ9nWTEsn;WUag3~tza zW(xcO>2P53MexiKtX8NLrp#IxBAr$%ho%}s&c1g~PEZ$#Jj6nz{%~)-8cc{)1vP18 z;q1|6vzT3KVddsu6FfvJ3@O8sO-#<#>(o!67nhFQi)zO{tz)Zd53I9CHi4Mj0la)# z{RgJRieyB0_U2yOdZQ6*=@JE{3_(m{JxCuy1ZPAI8P{y8Zez3Uk_uPWT*1$DJx(xidW-=m zQzrxg>S#+56K8hL0C@{F(O|B+>6^W?&_BS+gJY^%A}_$4z6>)GA9*tsvIQ~ETa?hJ zB%#}fOOg>v^FZw3AF>GIg?i9P*C;+dxUr5$OmN%yn`Sj=Hc2`~r_~rsM9q3StRuUqyIW92o=seR9 zHSgha4=E;QgGXQ61;n}vj~PsipZ2Oc1%$lk>*txAhs*Lle1;+jqP(#x2&oW?UdYWM z+Gt$?vJVTS{`};!+mu1A0#1qSzJs_t(BSKPLKeu#Z%S&h8gJi|KfiHrxp=&Xh&n=g z1Owf>l;P9pJ}9HvdSiPMOh!0L7-Tu3xe7oA481yVzORS zfWsT9Lv~_8p~)~{5~JXUGbcm6iDM&Nb#7Z+0v`a8)B!C-=G57T0NY3cBXIZUsMm(y z_;qDtfEY!a{VJ+V;tFIouW$~&n!@ZnnTh-*9S#dhC>cq;ox6{E)KE`MN9I61h4nx$ z*WZ5u_e7_H(wVCW8w)n$I3gyWLqxDBzrMwtnk`?hpVxHBe|eZq1FVKs4ce7N9~Z>t z!an|azbRq@%=L@l`IP|utO&V`bXcm#rJ=pjnqVKKW*0Ji=OZIrEb4A@6(cqJhygM3?zdvQ$BxdFfB-lek#lBIbwsc4P z9?65W!W4eavn;+c@@!SsIW&P)9)c%5$cIcH2eQXi*+~_8MujPzvwa8GarWVL3*yu2 z!&pS7Q2?risilJ=0$DJ45)k~o;QFtNqrUQ6tQnYHe-N59V#G+82ve@~SO^qT=<}y} z@N$#3Om&EShzo|{O%?Y#kZGq5IcFftcPQWN#f)i;!b$3n#LXMFyf=m8v4zm<^onno zlAU4uLPC(|Qy`~iAcMW96_Y?*H!C*`>ChuRc-RA%YNX&KXsfW=%EbJL_Nh@bPJv58 z%a+R64f*&Pqm!HXx^r`#98Y!M)KeTl~xd`hbZ1I(t+>4D=|;P z6q%GQkb)8%I!Q2FheQ;0afVfA?MONMv z5!n1#{=JIrwO!kN)c?QIZMMPc_0XQU9hM>1SZbz`4V2-{9{2PLc z(@;||m!r8nFGO~)WBHbiP4H&FaXO%tbP|>4Reu|)?6!Q(GNvRE*ej75z=oPvWryP2 z!3QiR>esQsdtfmeO}RmoEmIJtT!2O5ND^{Uk>plW3zPH9{;dNl_Yg@5G78&LmOn206%H6f?Lb>t@HN+2L^BzQ5H`2j#tuFiNVw@z-!4IP`*T zx~dl_-9gq+L>kd<-*FywrS-O44zR$X#p<-yraO_zM7qAdQMm{U6vH-=l|?$n$^-TP z0Ere5C|k{Urv#JOXt?|6T)G{iB;q}bwj&Ft$|R+;w@1g(7TpYe<0j6hwu-n<2oZ~{ zs*}t~v`HB_y%8i|7oY~d)HVGDN-B$dA%OgK8ng3v#T&~cKuY62)dwBdYK5^%WnG0lOQt%L@3dFTe8W$+d8MI2t9#MnQ38 z163r{#U9xMNFhQAsv&t?cpyih8Y|KZXDLsN5~QtB2j4$yB3(DtNC2*zAqFg1S!4U& zJrG>o{;j+B;AA0XEo=%li=yI(=72ct-{i?F%V_Tfo+^0pm~-Gq=2RoUp)?LS;})So z$ZmV$%tn_IM1s0Cj2q>-95$$fmm&rSD(^;69C3Yr8DMe9V8Hlb07;pLP=gMlJES(s ztntzAD!T;4NdEwId~?CBYr+-L<|CJ^I^YOrMUBnqJ1iy?sss*jaSIQcgQ(zkT|Xqs_tY6BTHqpu{95 zB2-#|NF+b;siT^Ys*z*`-?ghDe9lh7`6A%pGW)@8y*Mf{JHal>9c@wFQH6C4(XDyt z>*~c-$kh7wpAbr}LX$Yhnvyj{J0i_KwO2W0@x~Ad^O60Zr}$2uovMq!Y!hT=UL>SA zME(C*_LXRWeKB)Y?OC|md-gTp?(_#Tu-!oWFBS(IbI4-~U&gaKz_1n|ERAZRYZfL% z*(6ple1hSax(V356R>vvO52^(hCcbVZ)RU*J_<{YNcWn3$GE-=+}B`@71LLo;}f}b zk|R(zr$wXlfq<6Q)p3I64yX@4oK0D^VZd}oA%^G&bolZG$uEA6CD5%2h4g+^VbBXm zxiU*~?^?b538i`q_~)9h=O7!s%070Yx^m~<)BKd6?|Vk$$Jr_$G~iyS_)1LCO(3V7 zZ!aN{p*&*e*V=19(`g1%hQuz-_8lkMy_}j+d)^$G-AtlZVkMD+MI3xKpE&P2HL$zI z0BeMaA!4{m{F;y^pTeFcx~37~dK1c&`&Fkin-@V-Y)Re~p1Hl$GQaJOd(WXc4nw#Xgp{<#ao+e?cIkV-KVlAWMs`Q} zpPpQCX}!PggOAUuVeN!BEJDqLtaIRdp1A_mHV62Q>?M!dfw)GPN_q$5x8YN%rc4v0 z67GK`DU>Lam>VfiZ*4Xd4MV6yhJej$ModE^o<-tzM zUj0ReL>@zRdUi7*>S>Y@XK7Le8i-#29E3W+Ww(}GT*qmogpg{C2vW`1tQRPihEg6v zEGk7xB!e`%1H`Zvc+o%{m&)oOxU$uVkbx|eoY!~3;BVb|wxG2lPCvt~I|`86r}ZP= zZO`5SFpeC=^dE4nH!eK*M6ltSd!$Pxn}g*QA!e*3C#*dC4w^+elc_g=#%=(&I3h=m zMN!2Ggsl&+2^7H#YD&k5izO5RkzZZ#869pS2uf)f*&^|fx6w#I9nXq`D^bK=g9ey( z`}UnTwv(QlDg*p5({c!$a*#15FMyxB`*MSjS3$>AQ{7OxtHc*9*cg~`p$zQh1)~1Y z(L>bms^TTGMks*W($kYf&V}}SvVr&Qu))@I?Uws1%51A-P9}&l2 zDQ68+w7J87wW3I6Nj7ElU|x{rX>+L5MRaA!YC0`g1I`t&40KQ4W>9f^bc0eFW^<6y zDV8`BOS6|m-OcXr-p=En0`LR42uiGN8)4zcDDVL^aT~A8DG!i6RT1s zN8|{cy75Q` z^S~d(q1xQKvtgzr1T}i7n5>AUOoY@QWRDA7%C`)mDAJv=Onj^kV)wA|;e_!Q#Czh& zs1798_Y=XwPNL4F;aXfp&O2p*X*u8~;xP%mIU+l%Q2mYvBJoB|f?>P_`wS)|kOxr= z1p;#h0^`3=1I8l|14wKFog)ie1u@@xZcUF7OoH+DYcMfjZ=GF4rKxAJM;{$RxW~1<;PfRri()Lz}Wfa`t**Z{2p|W6gg#sv27xL_Tq7|HC3Ha6r&=X zOWBK`0SK2&^xuGz(8f(sy9W&n(lNJ^cl9%ME?tk2nZ^@83D@}M|WRe+r_7fk@J_@y3% zGCtP~pV2$gTg-*o{>CBl*M+AB;Kk2B2s^3|zYK5$MNzrm76!EIM}@o%Ji(c9 zSX6%H_WSw{nq$(6BZ7|wCiJ9(*Awwpqc{A>FTs8E9Ut&zt9hE1+r}HF-1Ho!Fzuoh zAg0P;%~l^d@O~DxPblz9=W&2L zITXBadOCphWTTW4$U^4&$~c!w5Nr-48p0v}z!P>F^9zeKv`B}8mcNX89=zf?Y$OM)=%as<&J2eL?OopV zgenu0gIKe9(R7775AmM|TUt)MV-nDzImrsT2cUYPsDrnb0QE|g2-O<+cq9)tP3+>t zPTjrUhnGrDLB=^-^;3yTS|qr)YFIiYj|3`+tLBp_T;DNEA2^^O(eLQZ_u zha`pMm+i<;?N2cr7$b@jm`~9%;@}2i`WEPX%}Cu^ETOepS&+#Z?ni`xJ1|COjLSJo zgcR}CI2;7cF-d0M)4BQu)MH5_)~zo0)?yzTg!*|~ z29Hwd@f{O0Z8iKLIrv=lF ziWnv_{Ys|TkL;LO_1?M!%EWN1*#~&wd^V?v!^2%S2sz*i?MXMK#FWPH$uQ9MRm2ya zqPb^;dwaL9Zc|Tq(vtV8RAE(mXX2rQ)!o(=1UU z8@ETcP)r&I=k9vdhViihCzvxA&X4q&ZK{^U2~c%1d$=M&4p|35Cn98ezzr0pH2fSJ zK?klGfh`~GWE4?^K<|aH*I+s-7$8I~%{od==X=ZqVWf&ebBfL|%$Nz<7nAEf+MAHF z8nT zU`wcAjgw?g!_SbjEhqUg$qA8(EQ7tft*mn{Ti_$Y?Al!+#kbc%H>iBNs0A^ zLO4X zAup@a9 zRYs`B{G9Y0bSl8)7ksmEA+2atr07RbSWW2YEQFbzovXL=N0PvK^micn*xH@|MG0wO zf=p=y9ztj+#Et5NLCHdBd-&ub_0>k^;M@=GcU>0in+8gmOZd}ww91zT%{kT8TlZIg zL#!`}vWZ3_5@*>axTzfd-_ZH#h(&2cg!>I+r<{<-$AXR0WmASrDLEmm~2 z=tmNRG>mq+wTt3=a7_{W(;J$?}rUizElj# zK~r*tV9vLe#jvQyVGkf;)_+N}PUzsp24A_RZ=WN0W=s{Klb!OU>KFKTtwm zW$J0y1(Zh@NFxUMB{b1Aq}Y~di|2Q)(osV;%m+|3@QRv_x5Xt)Vx)eD*rljD)j(VJR!G0jW`tkU}(h`8)(_tMWAKj{}aH$gwNBG~sft zf^Hyy0xgytS}#0m>H%8`4PYHm&EyJtn}WkwuvZIVqrBrJ-}5`ET~9)39r#KMmkF;+ z>A=5<25BC`x0ivHTFSTS7E)&f<^MEljbDs}n4SoHDok18(9>WqQcCeTq2I%fo`_QQ zYz7-qfQT22G*Sw3nj1CE{J?GtdJQs2G`T+q@4xxb0w(4>6%;5bqN*_{d$jf2xu;V3T%uZWYVMQ%lK+{1U;_DEb<&% zlKH8{n}&FVQ#zJQtokFr75-#D4UTDD;iF&Q;ri%n=j(C>Efz&8eED5v^QDROvy>{b zQ2P4MhMvLk6u0h&dciK^<7PHTME)^DK6$m()=j@ny?kEk>mHRnli#M!u89A+sdnJJ z^*KY=dxh(c%j&+|SNFSXh<(Y6yR34#+3fGP8ZP+9hW&r8wrW0cS){T%;MnK|@#*26 z^;O4Hs@}`KFK|pKHZgbd`G-Iv<`}s`IML_ou*}q&`U^ zzF{64H?s83fwzx{CpEyFO&#^oPsF}azsSn_UHN8Xj)q1?PI-%i_n~N7j6R?qx-J?} z0$iJX=;J$@2}`1q{P7=gU4C{FbX_gbniYWxsKxCnK^l{^>*4SH0d5{Zi!}+J`9}2| z%AOw|o0)%d?lL*g{*HnOC3(UruV26J0e8BFdNS%qnpf!$#^OSmH8 z*v5?anufthMmlfBQUtQ930Py|t}3=Z+L0*Mhrdsz!MR=-WdW$V1n+gd0G(cPs9({H zk6vzZF@#^iL%m!}u#n_~Xkk;#l+i0Ug5;nGhk`V5+G_PTV2O{^=?ElB6PEoJ#6~{p z5Ti6X9r?0|HAcmv{9!!uK%LQw*Ubb@+^u&Kel1G{GdW=1z5QcO(!M-?+f%rTI*M1ccQh(E&fo_;yoA3WatLXK z@1FW&lyXEZHkGeeLW)Qynpj+Ts|rp2m4yIiZr}fY;5X+__gQ$p-?Qd?B+vBIml>3_ z3`?%@Jq~_~xh0Z4C~h#?czK7+k>w>0Z}Od9DOK&rJY`3|8ea;b6}oC+7Xp?S9!quE zA#-%z#j9>M6`C#IVF&RQGtJJ*DA-azK`Z{Lk>@0JBqd9zf9(VStc9UY;6C zI*>#2B@>XpSRy^sl723-9_Nk2N!es2!Dts%{3b~#`iWIMp{$^SnFZg%1jZM3r z8TEq2#>Y#usi;9!&Ok1WeW8LRyR@>BKL*@ie_D;8*gfs zQ00V<0tq(xdQ60Q#9KxzMA&ei|Vl$b^h%!Jp497Q4{SKL!P%3MKqS(e^ zk%y&%k86vIkg$}MuL|6_v?;HaJ8!vh2=vS@hrEfFL%(2_m;3PsA?8)Y#7m8#udsz; zAC;#;<~q0d$FKD0+O-1ULE7{_60kIN(+uayZo#AyBo4cKO#Fz?i9k)kA8k%aW}2+62Z0*Pkp1ReW*NE z?E)%LeKntkA#lB`Zf|E-_bvtGjkWIs@Z)yFT-(l7KL^Q}MFD?0lz9p=76OcwE55xt zk0DbOn57KwE+I6HvhbK?xLE`E`TkrCbgp>^lyKY5w-(Gd|8-n9GcisDkek=yTjI~+ zP346kZO$k7^u@6`&^FmSYMO6EElQ^|Ak9^z`Nf50HR2AP{W?qx4<^dD(_KzoAuSf9 z0YK+qus)b315Ct%;vv0Sk(9%{_YFv8{+dTcgk%}0G;N=~Z_~{V^?5~k)?Af|7xZiU z`_&%(x~k@oP!o|^MDZDAj)5Mt_Vps6E5aXy6Z?3@xX8OttJDXEklR`s1q(6GvJ+-$ zTeMM0(GPoV{^89-Hiw!b{HyB0Xt6oK+WU}gc6418U?xwTvli<=PT2Qnc6-b8d3gK# zst))k5DC*C?Xd6%gbeD#Y;4FLIsmAp(yiVO;@xVz@K21_zNQ!F(k(uVdA0QOTkC{a z{evh?Dr2yeka;EJC+#S+Ob=p*t6 zEALxC??80*vYnz#N!{mXeAg9X^@FsuG_?+p=!V9HW4)~H>Aw($rtTRDm34&w`#33?EBVl3IQsH*<6m~!ris+MY*BZi$jZUI=nh7I=mxu zdJOf7;p;nn8*6sMVVMMv`Oc3Ph(DeD;I||N`X9`f50K$6!~cS6`1091SfMW;IK(%T zFCWB2%kae*z8J&*ik$ub=P`d3AhL<3v69N0T52IekV9dHcrxnXBh{*%M>g7*EFo^_ z>{bNuAUz6-PF>g31(*+eCQ{a2+cM)!HFRmb%}9S*c3lS-xqUwISU@Q<)b-Av@&PEN z32Y~nRRyBh5eh9W?p-S#CQ)_8KQVAl^N9YVGd@W5MWy2v5>|X3yABX~k<=Ds&pDCk> z)*zkQ#?WV$xPBsueHEcBkx@-G*2`zs>`#8X_cFA9io|K7kcRFQ_xg5H8sAMx0X)}< ze68kXdly=A3(Q+#b5c`NNp)m$$BTKhej?$`Y5wCxXAThRtFc3QoW9N z-Nih$sS6KinDSl&8{b9`P!E4Wc|6t10vrM0Onb4JtMB} zM+e%7UO?BxVRd_Vd-evUJupwUAz@a3E)?>w-tqb-aBtcAxUZND|9|3M zKa0jQC#KgyurdTObvUcqF0IZHm3Xyo7wEsOeQRI8&UiY|0j7rc9>Oq(GLO{$@b6F( zD2AvstyNXPZyu;a6ggr)b#H-*i&{|mtHSK%qFD&-7Lshg!JOKqe|88Eb zOhH>!Lc_{04>e>b6at$_$VDKIstXW7$Q&94HY*=HWRtf0 zwsCsW=*LQ$IdOCM#1#;OL8pbdX3{Ul>cur-iZ+Rw(+0!1W6vHrWq)WJQW;3qG&7vc z)QC^4;n#E4qr9@0qz1hM)R#o`3yoqk@~%TWRgJg|sV>Go0qY9b;d=J&PqegkAzu{B}N{9PXUi%v>F(q>+ z3@P#F-Iv0lD_>5uT7;4lhZP&)xQQwuc0SRhIzq8^6Njc#8{j92VpJ>Epr+%g^bHLej&?Ma>?n2%vRJpVJ5?BOg`tI#u5vm|fwY{izd3hx?ebP$NE$ z-kdyi#XgfZ9lxocxs;^cy=p+#T=S)Q6)yJq|fI3*DrN>ePHFWn)*ih_&++SD4RkfRpMM2X1 zD@j6^`za@CBRFDts{p z{wn+*Zww08A;DZhpEQj6CAIzW#r2SGI$_q6C6vWGWM(rh789s!fdM1~IjOv-GCt?f z!Sa}NKd*gLk((AotE&@y29A^iJfM&BoqPLRre*o(r$#DEEGVD`F8Tlrn#l?!!dc9W zli|y5(QwnWSDd$#v+v`(r!b2U(0#4IZ5|pVV+35ZWZUg}! zov{J+vx(%h<>x<6OmT!J_O7}bbPiDiVL?GbgaFtaYOJG4vM2tnUd4Yr>b#O{`V8!} z2Tjs4hw27DzONB44wa9sslq45PNbtTvHy@*@chwHp+FWS{rVmQK5rAI;&Z2-SU~Qu zAbJ9dMLh~OTlFW3jWk?AlY`2*vwszdinK8`I@z)51=N3cACI3RRf~VI`amX%kM(Z{ zM#nunLR}2f_j|vtwEHc(-Y(Kd{AP-4-?2}o*=jb?25A-J-HF~w^F$i_>y8(z=GVL) z@!jQVDZI;b&#adD9Z#QG3R__VQzb19M?EyP^*XI0^!1#X@6haQ@2di01jX)y45V3> zYetG+f!$E{>IC+~_aN!^O9K}d*l=nijbDDmn`Gim^s71^(+B6EGucvK>QDPU!n=5T zXSEpMeawZegz-M=c%P@Hw#KKGga(nN-$C80KNq4Nqs%Nc-=W((PT#F2jPY}v05qRi zsFM8yXwuI20SdIZ9)NQe4R@t0dfgcbQ_O>Cspq8rgP$m^PaAX(DzpW{?#xz_bEtm+ zmCN;abJzCXnXP;cxRey_oW_|Bht@rf+ig=Ic>3}DuPTyfD?gJe+4=Wx*IpRp_^w^> zgpWAyE#f0iId-mncdeC8^p?;Oo=|GbJ$!(SON+054DZ!(qvk~-3yvGa$SNI)@#udW z6gv4|f7_wRzuA{40YB(4m(fh>ler8b&RB(-pKU&Oogh;q^Vxn+tazzG3V9X@2U4Fp zu+8pTZQ;F#@&0#ag(ls=5uR%S4RnG9qNnHe*dZ`Aby=9<_L(G5J&G5lVLSb~5J)}k zHBClomgclTz<{;`8aALQHIrGAGXcbPf7DVqi^?`vwENIT4$aI9Rd(yLsG?6KBfS%+ zk;o`?`)+nV&1eiva7iWGJ^?M-hSTT<%+bligaJO1r#5*Se2mRS&wS`m1A0kVd64f> zv+;j=fE6!yZ8*K)0*N1KJasQLbxnAI+Kw(NRfRCy$vOQG zMdxfTfmo&&8g6--4t6RY}H#y8^)v??NYgOmWlFm<+L8g{I%JyBM!d?aDOmg)@?!senU7 zoFm4#9i$NhmJq!edCTzrah)Uo^%{^jpS~;lp=DvRM)BJ-)0hR1&`Z<{-L*OxLY++0 zVw!e{1|1oPLytvBP7lhBTEw5DKPZAej=rr46i~rmmRFJtjhn(B{2_IS8{6V4_`^KF ztrU?dIfUUjivCdNYx{c}$}f(+|amnH5n=?itDk;Wux zhV1l~S$39Y{hY9;=*!^`+{7ql*tI=K6pJdpRD7!1hr|3iLlygnUgfFy4>L zyHP_JbsSUsC3OSPoPPS?=HAERV=JVk?Z5qMO|cYH0ol_IIsSgD`mYeEf%6q`ug*8E zY^_qKzC<+3Rv%sVdo#74EM`M;5iM;xKu!f6I&Fs%PrSkc6T z44Z@fNPcudqt^rCt594i4bnA8cQik4rVpdTm;%0*7cYi+1Q`b}Xy}^rFUM~w|85UQ ztq<{=bqM_$5yW$YouvI#9#tdxBk6WA!R>*N{?x*^=w5S!Dd^oc4n?<$bGVr=$$K@; zhPUFht-3X$~epa6*e@Af1Cj6gG(g&E{wGGYg(ys2~#4Iy@q;bWm8kRov-MJch$!=E<~)| ztoqjpzG*4Ga=CcZSCQpl%%CBKCy~SlxOJ4+1W6fi&|9LMVkq5SmC)Th_m^Tzalsvq zQ`Yu%tc%%H^uzTi?^pL~X{r~#fDJX)A{etd^eJEOu(nCF4=?4%!yh*31E;#Xj}XG<~LsnA4|KXd_%na(J>p z5|Lx_r*hEOs!`rwZ_ne$@PEGB?&7!k2^Wv7^a(B6Ad*((Tf6q?(M zvC02=aUDut=jYfS@yM(n(~sBFjMuAaw3PXzPhF~XSk{RTpItZGl=XShCayOMPPv3F zBGgG^Y0*)mm$}etQ~$&*e|58Q#_w&_$4}?O!%B7{w}a3a3ZHn7pG)q3Ud4$!5D8Y6 z;4h}%9L@)H(=WYh+UyVh1>9jbdN>wz0gLa`|p2 zjn!UEThmG{Z^Ywbp3-6n@HQi=C+GEcdsN+br1=o(Mz=tiXOHu;d*dCv<32fF-1y(T zQdfwdP6j$Yw?bivo@IO27PyIJBr)euUr?xm^;ViAh!X{KSD?KA=1#d!tN-hIXyS#2 z5eGtGayUZ{{k1eShee}OpykhQgs-=z&L-SB(n5SX$Xt_UpSJ(^uVVZ_sM!+t49A9t9$>gL`>jHAN#szlMY;_dRShz`u(mQ2_6*^#df!n zae`zLe`y)|Z}uD;eD~vK9=gi1VcgJ!UeSxAw$JcP8p@)}d4RUJ?y44fNI4l~=VUa*weISitS(>WTlK0Cv4bSEWh7MAv_udIYBiEXysYSYiFGd+4B9OF%^|m;MUwkDQ zlSfF2MMfc{IMNoUe6cV?M4@~s!o}z6aIervP(M~MQVC%Epl+$6$#_Eoy%%^_iI!Vb zBi04)A5-K1C+>bDT~S-NX*FU&gqWzWPC2vA@u}X4h4?6)qu>Kl4d?JvnMSKB#M>?F zpt6CjOP92IPFZ!!hh{uUU@{-D632Eqe@Fj~t{;HE4#56QO57mH!UPYk=rx$;+;=e! zz^dCa4Z@#J^m=uCDa_3+O>b6WLenWt=&;~Dd)|Hb8eg8HlwmV4G0NDD6evMDFgZCD!Rd(Gz zSKIl)i8d|EhEa>EM+%VkD_Cbv&J+?N*#MF=v6EhKk z(aCqPQ>DFwm|)z5O@(qDy=z1unyB3v80M}{Q_jwd^>&c>Ln-qebRUI+Px$GC8*Ws@ z;0OAd(u-grjuhMsLqMDbhyQ2st+XC--QhvYlG<#)nP*Y7-JX$YlpH&M=(~`!UCqN6 zI`+A%ZR?Z>T7{J`h*Sru@aa4%g0_l+Fm8H&7^ znJ3CA^AzgBQun-dD{M^u67-8`r}z~cuDGY3GZW@*|8 z5KV(%ea2lG8Y_8taB6`P55(WSKkuJqX%CuB(lcJ;tUA5p?SWO-Cr3|Gv{Ajl&}@I0 ztL4USbNd(8z<{pO4iIuNYd^B#IviV2DwH?>@T*U;QTN<>p-v0}3;|j~ZxynU`kFlj zkv+TXWf?fuwmLdsSe+V+`-BHQJFF<~=6X@C3jIqy^_RR%TBrnh{nziC@PYra;P|Je Xw7-AYIsaSR`Cwhpl6hAG*QEXehw>ik diff --git a/pydeeptools/deeptools/test/test_plotHeatmap/plotHeatmap_default.png b/pydeeptools/deeptools/test/test_plotHeatmap/plotHeatmap_default.png index fedc808fd1f92ebcc87af48a788a8d0dec45e4a8..606c1b4e225a615fffe2c91408e050cef81c46c6 100644 GIT binary patch literal 53038 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

&l1f(g2qE7b8*w@jl!=4 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 UVTE7-1OH>L+oBPrzWez91!#i6HUIzs diff --git a/pydeeptools/deeptools/test/test_plotProfile/plotProfile_default.png b/pydeeptools/deeptools/test/test_plotProfile/plotProfile_default.png index 338357505fe68cf26089e7830851805ca4c66dec..f7ba808a38e05b7c6a55490de854d105bd55718d 100644 GIT binary patch literal 36166 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 literal 37052 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 From ef56909bd03a7e377ec82f44db5c74e590dd72ef Mon Sep 17 00:00:00 2001 From: WardDeb Date: Tue, 23 Jun 2026 09:09:57 +0200 Subject: [PATCH 04/10] python version 10 - 14 --- .github/workflows/test_pytest.yml | 192 +++++++++++++++--------------- 1 file changed, 96 insertions(+), 96 deletions(-) diff --git a/.github/workflows/test_pytest.yml b/.github/workflows/test_pytest.yml index 4e9322f40e..0d44db2bf0 100644 --- a/.github/workflows/test_pytest.yml +++ b/.github/workflows/test_pytest.yml @@ -2,101 +2,101 @@ name: tests_pytest on: [push, pull_request, workflow_dispatch] defaults: - run: - shell: bash -l {0} + run: + shell: bash -l {0} jobs: - check_versions_matches: - name: Check deeptools version matches galaxy tools - runs-on: ubuntu-latest - if: github.base_ref == 'master' - steps: - - uses: actions/checkout@v4 - - name: Check path - run: find /home/runner/work/deepTools/deepTools -name "pyproject.toml" - - name: Get Version of Deeptools - run: echo "deeptools_version=$(grep "version" /home/runner/work/deepTools/deepTools/pyproject.toml | awk '{print substr($NF, 2, length($NF) - 2)}')" >> $GITHUB_ENV - - name: Get Version of Galaxy tools - run: echo "galaxy_deeptools_version=$(grep "token.*TOOL_VERSION" /home/runner/work/deepTools/deepTools/galaxy/wrapper/deepTools_macros.xml | awk -F '>|<' '{print $3}')" >> $GITHUB_ENV - - name: Versions - run: | - echo deeptools version=${deeptools_version} - echo deeptools version in galaxy=${galaxy_deeptools_version} - - name: Fail PR if versions not matching - run: | - if [ -z $galaxy_deeptools_version ]; then - echo "galaxy_deeptools_version not defined change the github action" - exit 1 - fi - if [ -z $deeptools_version ]; then - echo "deeptools_version not defined change the github action" - exit 1 - fi - if [ "$galaxy_deeptools_version" != "$deeptools_version" ]; then - echo "versions do not match" - exit 1 - fi - build-linux: - name: Test on Linux - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ['3.9','3.10', '3.11', '3.12', '3.13'] - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - cache: 'pip' - - name: Install Rust - uses: actions-rust-lang/setup-rust-toolchain@v1 - - name: build deeptools - run: | - python -m venv venv - source venv/bin/activate - pip install maturin - maturin develop --release --extras actions - - name: test deeptools - run: | - source venv/bin/activate - pytest -v - - name: build wheel - run: | - source venv/bin/activate - python -m build - - name: test wheel - run: | - source venv/bin/activate - pip install dist/*whl - build-osx: - name: Test on OSX - runs-on: macOS-latest - strategy: - matrix: - python-version: ['3.9','3.10', '3.11', '3.12', '3.13'] - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - cache: 'pip' - - name: Install Rust - uses: actions-rust-lang/setup-rust-toolchain@v1 - - name: build deeptools - run: | - python -m venv venv - source venv/bin/activate - pip install maturin - maturin develop --release --extras actions - - name: test deeptools - run: | - source venv/bin/activate - pytest -v - - name: build wheel - run: | - source venv/bin/activate - python -m build - - name: test wheel - run: | - source venv/bin/activate - pip install dist/*whl \ No newline at end of file + check_versions_matches: + name: Check deeptools version matches galaxy tools + runs-on: ubuntu-latest + if: github.base_ref == 'master' + steps: + - uses: actions/checkout@v4 + - name: Check path + run: find /home/runner/work/deepTools/deepTools -name "pyproject.toml" + - name: Get Version of Deeptools + run: echo "deeptools_version=$(grep "version" /home/runner/work/deepTools/deepTools/pyproject.toml | awk '{print substr($NF, 2, length($NF) - 2)}')" >> $GITHUB_ENV + - name: Get Version of Galaxy tools + run: echo "galaxy_deeptools_version=$(grep "token.*TOOL_VERSION" /home/runner/work/deepTools/deepTools/galaxy/wrapper/deepTools_macros.xml | awk -F '>|<' '{print $3}')" >> $GITHUB_ENV + - name: Versions + run: | + echo deeptools version=${deeptools_version} + echo deeptools version in galaxy=${galaxy_deeptools_version} + - name: Fail PR if versions not matching + run: | + if [ -z $galaxy_deeptools_version ]; then + echo "galaxy_deeptools_version not defined change the github action" + exit 1 + fi + if [ -z $deeptools_version ]; then + echo "deeptools_version not defined change the github action" + exit 1 + fi + if [ "$galaxy_deeptools_version" != "$deeptools_version" ]; then + echo "versions do not match" + exit 1 + fi + build-linux: + name: Test on Linux + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: "pip" + - name: Install Rust + uses: actions-rust-lang/setup-rust-toolchain@v1 + - name: build deeptools + run: | + python -m venv venv + source venv/bin/activate + pip install maturin + maturin develop --release --extras actions + - name: test deeptools + run: | + source venv/bin/activate + pytest -v + - name: build wheel + run: | + source venv/bin/activate + python -m build + - name: test wheel + run: | + source venv/bin/activate + pip install dist/*whl + build-osx: + name: Test on OSX + runs-on: macOS-latest + strategy: + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: "pip" + - name: Install Rust + uses: actions-rust-lang/setup-rust-toolchain@v1 + - name: build deeptools + run: | + python -m venv venv + source venv/bin/activate + pip install maturin + maturin develop --release --extras actions + - name: test deeptools + run: | + source venv/bin/activate + pytest -v + - name: build wheel + run: | + source venv/bin/activate + python -m build + - name: test wheel + run: | + source venv/bin/activate + pip install dist/*whl From 3ea7dadaa98a81562db163d6d889053a673ebb0d Mon Sep 17 00:00:00 2001 From: WardDeb Date: Tue, 23 Jun 2026 09:10:55 +0200 Subject: [PATCH 05/10] action version updater --- .github/dependabot.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..fd59a97bbf --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,10 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly + groups: + dependencies: + patterns: + - "*" From ac68269d7f671e7baf218172106b2733287f26f7 Mon Sep 17 00:00:00 2001 From: WardDeb Date: Tue, 23 Jun 2026 09:25:00 +0200 Subject: [PATCH 06/10] lock update --- .github/workflows/test_pytest.yml | 10 +-- pixi.lock | 109 +++++++++++++++++------------- pyproject.toml | 6 +- 3 files changed, 68 insertions(+), 57 deletions(-) diff --git a/.github/workflows/test_pytest.yml b/.github/workflows/test_pytest.yml index 0d44db2bf0..404e1fa093 100644 --- a/.github/workflows/test_pytest.yml +++ b/.github/workflows/test_pytest.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest if: github.base_ref == 'master' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Check path run: find /home/runner/work/deepTools/deepTools -name "pyproject.toml" - name: Get Version of Deeptools @@ -43,8 +43,8 @@ jobs: matrix: python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 + - uses: actions/checkout@v7 + - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} cache: "pip" @@ -75,8 +75,8 @@ jobs: matrix: python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 + - uses: actions/checkout@v7 + - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} cache: "pip" diff --git a/pixi.lock b/pixi.lock index e5f37ef660..7836598766 100644 --- a/pixi.lock +++ b/pixi.lock @@ -159,7 +159,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/8e/b4/23f8462c72e514563f5fd949e38a9e45bcc86fb59bf4b88240ba0ef02026/cwl_utils-0.42-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8e/fb/2c4c618185be2bda327f9dacd16b3122cc938809f19df7be840595d0e584/prov-1.5.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/7a/8017d45e513c720ee82bf062b1be3ae39087db3024571b4a00773e17c235/galaxy_job_config_init-0.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/95/7f522393c88313336b20d70fc849555757b2e5febc22b83b3a3f0fd4bce9/matplotlib-3.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/96/9a/982e48afcffcd727a9144506720ffd4224b6b7e355c98641866f38b7c043/jaraco_functools-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/97/1b/295bf2fa3e740131778065e5ffa2c481f0e7210182d408e9a2c244ff5b0c/readme_renderer-45.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl @@ -171,6 +170,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/b2/d872fc3d753516870d520595ddd8ce4dd44fa797a240999f125f58521ad7/matplotlib-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ac/1f/d10d6ad23c86c62d90d867d0506881a392ec6ef06885b858eaab868dd356/deeptoolsintervals-0.1.9.tar.gz - pypi: https://files.pythonhosted.org/packages/ac/3e/61d11b779e4e83ee8661439af070f6f138060cd41f0346a0a70432f9e55c/cwl_upgrader-1.2.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl @@ -300,6 +300,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/44/a0/c815bea63117fa63e4e1c01f8a1110d2112fa003f838e6467094ec2432ce/fonttools-4.63.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/44/c7/6b2d8cb7cc251d53c976799cacd3200add56351c175ba89ab9cbd7c1e68a/matplotlib-3.10.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/46/3b/9dedd2e35cebcd4eb3539514b5ac674fd45654404839e6f9eff6e25d67c7/py2bit-1.0.1.tar.gz - pypi: https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl @@ -374,7 +375,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/a5/bbbc3b74a94fbdbd7915e7ad030f16539bfdc1362f7e9003b594f0537950/glob2-0.7.tar.gz - pypi: https://files.pythonhosted.org/packages/d9/b0/1e05aa4e0124cbc6509641353f513fc29c2b5e5197dbd5dfade810a521cf/galaxy_tool_util_models-26.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/17/f5276b496c61477a6c4fc5e7401f4bfe1c2e5ef7c6cd67896f2ade3809cb/matplotlib-3.11.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl @@ -516,6 +516,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/63/b1/4260d67d6bd85e58a66b72d54ce15d5de789b6f3870cc6bedf8ff9667401/propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/68/dd/fa2e1a45fce2d09f4aea3cee169760e672c8262325aa5796c49d543dc7e6/matplotlib-3.10.0.tar.gz - pypi: https://files.pythonhosted.org/packages/6a/b7/9366ed44ced9b7ef357ab48c94205280276db9d7f064aa3012a97227e966/h5py-3.16.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/72/65/a4559d4ff4a210d2a26d7ca0712e4e738cbfc963135f86e8ae807ca420eb/pysam-0.24.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl @@ -525,7 +526,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/03/b8cdb625a21f710dfa11bbca1f48fb4057d2c0286975f8b415bf80942c99/matplotlib-3.11.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/7e/32/a7125fb28c4261a627f999d5fb4afff25b523800faed2c30979949d6facd/pydot-4.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl @@ -3064,6 +3064,7 @@ packages: - twine ; extra == 'actions' - build ; extra == 'actions' - planemo ; extra == 'actions' + - matplotlib==3.10 ; extra == 'actions' requires_python: '>3.9' - pypi: https://files.pythonhosted.org/packages/00/01/4001033457f25ecdc2b1ffd513ca0b76200b9ea009dd64f6c1aad2dde133/boltons-26.0.0-py3-none-any.whl name: boltons @@ -3772,6 +3773,25 @@ packages: - skia-pathops>=0.5.0 ; extra == 'all' - uharfbuzz>=0.45.0 ; extra == 'all' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/44/c7/6b2d8cb7cc251d53c976799cacd3200add56351c175ba89ab9cbd7c1e68a/matplotlib-3.10.0-cp312-cp312-macosx_10_13_x86_64.whl + name: matplotlib + version: 3.10.0 + sha256: 4659665bc7c9b58f8c00317c3c2a299f7f258eeae5a5d56b4c64226fca2f7c59 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.23 + - packaging>=20.0 + - pillow>=8 + - pyparsing>=2.3.1 + - python-dateutil>=2.7 + - meson-python>=0.13.1,<0.17.0 ; extra == 'dev' + - pybind11>=2.13.2,!=2.13.3 ; extra == 'dev' + - setuptools-scm>=7 ; extra == 'dev' + - setuptools>=64 ; extra == 'dev' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/46/3b/9dedd2e35cebcd4eb3539514b5ac674fd45654404839e6f9eff6e25d67c7/py2bit-1.0.1.tar.gz name: py2bit version: 1.0.1 @@ -4154,6 +4174,25 @@ packages: - xlsxwriter>=3.2.0 ; extra == 'all' - zstandard>=0.23.0 ; extra == 'all' requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/68/dd/fa2e1a45fce2d09f4aea3cee169760e672c8262325aa5796c49d543dc7e6/matplotlib-3.10.0.tar.gz + name: matplotlib + version: 3.10.0 + sha256: b886d02a581b96704c9d1ffe55709e49b4d2d52709ccebc4be42db856e511278 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.23 + - packaging>=20.0 + - pillow>=8 + - pyparsing>=2.3.1 + - python-dateutil>=2.7 + - meson-python>=0.13.1,<0.17.0 ; extra == 'dev' + - pybind11>=2.13.2,!=2.13.3 ; extra == 'dev' + - setuptools-scm>=7 ; extra == 'dev' + - setuptools>=64 ; extra == 'dev' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/6a/19/ca10ead60b0acc80b2b833c2c4a4f2ff753d0f58b811f70d911c7e94a25c/scipy-1.18.0-cp312-cp312-macosx_10_15_x86_64.whl name: scipy version: 1.18.0 @@ -4421,21 +4460,6 @@ packages: version: 1.5.3 sha256: 5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/7c/03/b8cdb625a21f710dfa11bbca1f48fb4057d2c0286975f8b415bf80942c99/matplotlib-3.11.0-cp314-cp314-macosx_11_0_arm64.whl - name: matplotlib - version: 3.11.0 - sha256: 25c2e5455efd8d99f41fb79871a31feb7d301569642e332ec58d72cfe9282bc3 - requires_dist: - - contourpy>=1.0.1 - - cycler>=0.10 - - fonttools>=4.22.0 - - kiwisolver>=1.3.1 - - numpy>=1.25 - - packaging>=20.0 - - pillow>=9 - - pyparsing>=3 - - python-dateutil>=2.7 - requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/7e/32/a7125fb28c4261a627f999d5fb4afff25b523800faed2c30979949d6facd/pydot-4.0.1-py3-none-any.whl name: pydot version: 4.0.1 @@ -4695,21 +4719,6 @@ packages: - pyyaml - backports-strenum ; python_full_version < '3.11' requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/94/95/7f522393c88313336b20d70fc849555757b2e5febc22b83b3a3f0fd4bce9/matplotlib-3.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - name: matplotlib - version: 3.11.0 - sha256: be5f93a1d21981bfb802ded0d77a0caa92d4342a47d45754fac77e314a506344 - requires_dist: - - contourpy>=1.0.1 - - cycler>=0.10 - - fonttools>=4.22.0 - - kiwisolver>=1.3.1 - - numpy>=1.25 - - packaging>=20.0 - - pillow>=9 - - pyparsing>=3 - - python-dateutil>=2.7 - requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/96/9a/982e48afcffcd727a9144506720ffd4224b6b7e355c98641866f38b7c043/jaraco_functools-4.5.0-py3-none-any.whl name: jaraco-functools version: 4.5.0 @@ -4933,6 +4942,25 @@ packages: - humanfriendly>=9.1 - capturer>=2.4 ; extra == 'cron' requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' +- pypi: https://files.pythonhosted.org/packages/a7/b2/d872fc3d753516870d520595ddd8ce4dd44fa797a240999f125f58521ad7/matplotlib-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: matplotlib + version: 3.10.0 + sha256: 9b0558bae37f154fffda54d779a592bc97ca8b4701f1c710055b609a3bac44c8 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.23 + - packaging>=20.0 + - pillow>=8 + - pyparsing>=2.3.1 + - python-dateutil>=2.7 + - meson-python>=0.13.1,<0.17.0 ; extra == 'dev' + - pybind11>=2.13.2,!=2.13.3 ; extra == 'dev' + - setuptools-scm>=7 ; extra == 'dev' + - setuptools>=64 ; extra == 'dev' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/ac/1f/d10d6ad23c86c62d90d867d0506881a392ec6ef06885b858eaab868dd356/deeptoolsintervals-0.1.9.tar.gz name: deeptoolsintervals version: 0.1.9 @@ -5481,21 +5509,6 @@ packages: - typing-extensions - pytest ; extra == 'test' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/da/17/f5276b496c61477a6c4fc5e7401f4bfe1c2e5ef7c6cd67896f2ade3809cb/matplotlib-3.11.0-cp312-cp312-macosx_10_13_x86_64.whl - name: matplotlib - version: 3.11.0 - sha256: 06b5872e9cf11adc8f589ded3ce11bc3e1061ad498259664fabc1f6615beb918 - requires_dist: - - contourpy>=1.0.1 - - cycler>=0.10 - - fonttools>=4.22.0 - - kiwisolver>=1.3.1 - - numpy>=1.25 - - packaging>=20.0 - - pillow>=9 - - pyparsing>=3 - - python-dateutil>=2.7 - requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl name: future version: 1.0.0 diff --git a/pyproject.toml b/pyproject.toml index e6135bf295..2e63155ba7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,7 +53,8 @@ actions = [ "pytest", "twine", "build", - "planemo" + "planemo", + "matplotlib == 3.10", # pin matplotlib version to avoid plots changing in pytests (font size defaults etc.) ] [project.urls] homepage = "https://pypi.python.org/pypi/deepTools/" @@ -98,9 +99,6 @@ platforms = ["linux-64", "osx-arm64", "osx-64"] [tool.pixi.dependencies] libclang = "<22" clangdev = "<22" -#compilers = "*" -#gcc = "*" -#gxx = "*" htslib = "<=1.19" zlib = "*" [tool.pixi.pypi-dependencies] From 5a8ef7d1d69b1bc91393594bf9a03d7300567857 Mon Sep 17 00:00:00 2001 From: WardDeb Date: Tue, 23 Jun 2026 09:35:37 +0200 Subject: [PATCH 07/10] pin mpl in action extra --- pixi.lock | 110 ++++++++++++++++++++++--------------------------- pyproject.toml | 2 +- 2 files changed, 50 insertions(+), 62 deletions(-) diff --git a/pixi.lock b/pixi.lock index 7836598766..a1fdc4e40e 100644 --- a/pixi.lock +++ b/pixi.lock @@ -159,6 +159,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/8e/b4/23f8462c72e514563f5fd949e38a9e45bcc86fb59bf4b88240ba0ef02026/cwl_utils-0.42-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8e/fb/2c4c618185be2bda327f9dacd16b3122cc938809f19df7be840595d0e584/prov-1.5.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/7a/8017d45e513c720ee82bf062b1be3ae39087db3024571b4a00773e17c235/galaxy_job_config_init-0.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/95/7f522393c88313336b20d70fc849555757b2e5febc22b83b3a3f0fd4bce9/matplotlib-3.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/96/9a/982e48afcffcd727a9144506720ffd4224b6b7e355c98641866f38b7c043/jaraco_functools-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/97/1b/295bf2fa3e740131778065e5ffa2c481f0e7210182d408e9a2c244ff5b0c/readme_renderer-45.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl @@ -170,7 +171,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a7/b2/d872fc3d753516870d520595ddd8ce4dd44fa797a240999f125f58521ad7/matplotlib-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ac/1f/d10d6ad23c86c62d90d867d0506881a392ec6ef06885b858eaab868dd356/deeptoolsintervals-0.1.9.tar.gz - pypi: https://files.pythonhosted.org/packages/ac/3e/61d11b779e4e83ee8661439af070f6f138060cd41f0346a0a70432f9e55c/cwl_upgrader-1.2.15-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl @@ -300,7 +300,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/44/a0/c815bea63117fa63e4e1c01f8a1110d2112fa003f838e6467094ec2432ce/fonttools-4.63.0-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/44/c7/6b2d8cb7cc251d53c976799cacd3200add56351c175ba89ab9cbd7c1e68a/matplotlib-3.10.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/46/3b/9dedd2e35cebcd4eb3539514b5ac674fd45654404839e6f9eff6e25d67c7/py2bit-1.0.1.tar.gz - pypi: https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl @@ -375,6 +374,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d7/a5/bbbc3b74a94fbdbd7915e7ad030f16539bfdc1362f7e9003b594f0537950/glob2-0.7.tar.gz - pypi: https://files.pythonhosted.org/packages/d9/b0/1e05aa4e0124cbc6509641353f513fc29c2b5e5197dbd5dfade810a521cf/galaxy_tool_util_models-26.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/17/f5276b496c61477a6c4fc5e7401f4bfe1c2e5ef7c6cd67896f2ade3809cb/matplotlib-3.11.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl @@ -516,7 +516,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/63/b1/4260d67d6bd85e58a66b72d54ce15d5de789b6f3870cc6bedf8ff9667401/propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/68/dd/fa2e1a45fce2d09f4aea3cee169760e672c8262325aa5796c49d543dc7e6/matplotlib-3.10.0.tar.gz - pypi: https://files.pythonhosted.org/packages/6a/b7/9366ed44ced9b7ef357ab48c94205280276db9d7f064aa3012a97227e966/h5py-3.16.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/72/65/a4559d4ff4a210d2a26d7ca0712e4e738cbfc963135f86e8ae807ca420eb/pysam-0.24.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl @@ -526,6 +525,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7c/03/b8cdb625a21f710dfa11bbca1f48fb4057d2c0286975f8b415bf80942c99/matplotlib-3.11.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/7e/32/a7125fb28c4261a627f999d5fb4afff25b523800faed2c30979949d6facd/pydot-4.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl @@ -3064,7 +3064,7 @@ packages: - twine ; extra == 'actions' - build ; extra == 'actions' - planemo ; extra == 'actions' - - matplotlib==3.10 ; extra == 'actions' + - matplotlib==3.11 ; extra == 'actions' requires_python: '>3.9' - pypi: https://files.pythonhosted.org/packages/00/01/4001033457f25ecdc2b1ffd513ca0b76200b9ea009dd64f6c1aad2dde133/boltons-26.0.0-py3-none-any.whl name: boltons @@ -3773,25 +3773,6 @@ packages: - skia-pathops>=0.5.0 ; extra == 'all' - uharfbuzz>=0.45.0 ; extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/44/c7/6b2d8cb7cc251d53c976799cacd3200add56351c175ba89ab9cbd7c1e68a/matplotlib-3.10.0-cp312-cp312-macosx_10_13_x86_64.whl - name: matplotlib - version: 3.10.0 - sha256: 4659665bc7c9b58f8c00317c3c2a299f7f258eeae5a5d56b4c64226fca2f7c59 - requires_dist: - - contourpy>=1.0.1 - - cycler>=0.10 - - fonttools>=4.22.0 - - kiwisolver>=1.3.1 - - numpy>=1.23 - - packaging>=20.0 - - pillow>=8 - - pyparsing>=2.3.1 - - python-dateutil>=2.7 - - meson-python>=0.13.1,<0.17.0 ; extra == 'dev' - - pybind11>=2.13.2,!=2.13.3 ; extra == 'dev' - - setuptools-scm>=7 ; extra == 'dev' - - setuptools>=64 ; extra == 'dev' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/46/3b/9dedd2e35cebcd4eb3539514b5ac674fd45654404839e6f9eff6e25d67c7/py2bit-1.0.1.tar.gz name: py2bit version: 1.0.1 @@ -4174,25 +4155,6 @@ packages: - xlsxwriter>=3.2.0 ; extra == 'all' - zstandard>=0.23.0 ; extra == 'all' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/68/dd/fa2e1a45fce2d09f4aea3cee169760e672c8262325aa5796c49d543dc7e6/matplotlib-3.10.0.tar.gz - name: matplotlib - version: 3.10.0 - sha256: b886d02a581b96704c9d1ffe55709e49b4d2d52709ccebc4be42db856e511278 - requires_dist: - - contourpy>=1.0.1 - - cycler>=0.10 - - fonttools>=4.22.0 - - kiwisolver>=1.3.1 - - numpy>=1.23 - - packaging>=20.0 - - pillow>=8 - - pyparsing>=2.3.1 - - python-dateutil>=2.7 - - meson-python>=0.13.1,<0.17.0 ; extra == 'dev' - - pybind11>=2.13.2,!=2.13.3 ; extra == 'dev' - - setuptools-scm>=7 ; extra == 'dev' - - setuptools>=64 ; extra == 'dev' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/6a/19/ca10ead60b0acc80b2b833c2c4a4f2ff753d0f58b811f70d911c7e94a25c/scipy-1.18.0-cp312-cp312-macosx_10_15_x86_64.whl name: scipy version: 1.18.0 @@ -4460,6 +4422,21 @@ packages: version: 1.5.3 sha256: 5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713 requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/7c/03/b8cdb625a21f710dfa11bbca1f48fb4057d2c0286975f8b415bf80942c99/matplotlib-3.11.0-cp314-cp314-macosx_11_0_arm64.whl + name: matplotlib + version: 3.11.0 + sha256: 25c2e5455efd8d99f41fb79871a31feb7d301569642e332ec58d72cfe9282bc3 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.25 + - packaging>=20.0 + - pillow>=9 + - pyparsing>=3 + - python-dateutil>=2.7 + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/7e/32/a7125fb28c4261a627f999d5fb4afff25b523800faed2c30979949d6facd/pydot-4.0.1-py3-none-any.whl name: pydot version: 4.0.1 @@ -4719,6 +4696,21 @@ packages: - pyyaml - backports-strenum ; python_full_version < '3.11' requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/94/95/7f522393c88313336b20d70fc849555757b2e5febc22b83b3a3f0fd4bce9/matplotlib-3.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: matplotlib + version: 3.11.0 + sha256: be5f93a1d21981bfb802ded0d77a0caa92d4342a47d45754fac77e314a506344 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.25 + - packaging>=20.0 + - pillow>=9 + - pyparsing>=3 + - python-dateutil>=2.7 + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/96/9a/982e48afcffcd727a9144506720ffd4224b6b7e355c98641866f38b7c043/jaraco_functools-4.5.0-py3-none-any.whl name: jaraco-functools version: 4.5.0 @@ -4942,25 +4934,6 @@ packages: - humanfriendly>=9.1 - capturer>=2.4 ; extra == 'cron' requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' -- pypi: https://files.pythonhosted.org/packages/a7/b2/d872fc3d753516870d520595ddd8ce4dd44fa797a240999f125f58521ad7/matplotlib-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: matplotlib - version: 3.10.0 - sha256: 9b0558bae37f154fffda54d779a592bc97ca8b4701f1c710055b609a3bac44c8 - requires_dist: - - contourpy>=1.0.1 - - cycler>=0.10 - - fonttools>=4.22.0 - - kiwisolver>=1.3.1 - - numpy>=1.23 - - packaging>=20.0 - - pillow>=8 - - pyparsing>=2.3.1 - - python-dateutil>=2.7 - - meson-python>=0.13.1,<0.17.0 ; extra == 'dev' - - pybind11>=2.13.2,!=2.13.3 ; extra == 'dev' - - setuptools-scm>=7 ; extra == 'dev' - - setuptools>=64 ; extra == 'dev' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/ac/1f/d10d6ad23c86c62d90d867d0506881a392ec6ef06885b858eaab868dd356/deeptoolsintervals-0.1.9.tar.gz name: deeptoolsintervals version: 0.1.9 @@ -5509,6 +5482,21 @@ packages: - typing-extensions - pytest ; extra == 'test' requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/da/17/f5276b496c61477a6c4fc5e7401f4bfe1c2e5ef7c6cd67896f2ade3809cb/matplotlib-3.11.0-cp312-cp312-macosx_10_13_x86_64.whl + name: matplotlib + version: 3.11.0 + sha256: 06b5872e9cf11adc8f589ded3ce11bc3e1061ad498259664fabc1f6615beb918 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.25 + - packaging>=20.0 + - pillow>=9 + - pyparsing>=3 + - python-dateutil>=2.7 + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl name: future version: 1.0.0 diff --git a/pyproject.toml b/pyproject.toml index 2e63155ba7..19f230a8c4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,7 +54,7 @@ actions = [ "twine", "build", "planemo", - "matplotlib == 3.10", # pin matplotlib version to avoid plots changing in pytests (font size defaults etc.) + "matplotlib == 3.11", # pin matplotlib version to avoid plots changing in pytests (font size defaults etc.) ] [project.urls] homepage = "https://pypi.python.org/pypi/deepTools/" From 8c254c72793da77245c402733b7066b542b86d5f Mon Sep 17 00:00:00 2001 From: WardDeb Date: Tue, 23 Jun 2026 09:39:56 +0200 Subject: [PATCH 08/10] minimal python 3.12 --- .github/workflows/test_pytest.yml | 4 ++-- pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test_pytest.yml b/.github/workflows/test_pytest.yml index 404e1fa093..e4c624e909 100644 --- a/.github/workflows/test_pytest.yml +++ b/.github/workflows/test_pytest.yml @@ -41,7 +41,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python-version: ["3.12", "3.13", "3.14"] steps: - uses: actions/checkout@v7 - uses: actions/setup-python@v6 @@ -73,7 +73,7 @@ jobs: runs-on: macOS-latest strategy: matrix: - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python-version: ["3.12", "3.13", "3.14"] steps: - uses: actions/checkout@v7 - uses: actions/setup-python@v6 diff --git a/pyproject.toml b/pyproject.toml index 19f230a8c4..b63f4a15a4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ authors = [ {name="Thomas Manke"}, {email="bioinfo-core@ie-freiburg.mpg.de"} ] -requires-python = "> 3.9" +requires-python = ">= 3.12" dependencies = [ "numpy >= 2.0", "scipy >= 1.13", From 435067b3ba99da5ae5e998f311772297fa44d11d Mon Sep 17 00:00:00 2001 From: WardDeb Date: Tue, 23 Jun 2026 10:25:36 +0200 Subject: [PATCH 09/10] simplify dependencies --- Cargo.toml | 2 +- pixi.lock | 174 +------------------------------------------------ pyproject.toml | 1 - 3 files changed, 2 insertions(+), 175 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 80c33a3d36..67ef0af27c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,9 +13,9 @@ openssl-sys = { version = "*", features = ["vendored"] } pyo3 = { version = "*", features = ["extension-module"] } rust-htslib = "*" rayon = "*" +tokio = "*" itertools = "*" bigtools = "*" -tokio = "*" flate2 = "*" tempfile = "*" ndarray = "*" diff --git a/pixi.lock b/pixi.lock index a1fdc4e40e..13d75d908f 100644 --- a/pixi.lock +++ b/pixi.lock @@ -77,9 +77,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/00/01/4001033457f25ecdc2b1ffd513ca0b76200b9ea009dd64f6c1aad2dde133/boltons-26.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/08/f6/af32e23e563971ffb0fb86be52bc5be5c2c118858ffc119bf6a9039b173d/lxml-6.1.1-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl @@ -97,13 +95,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/20/9c/d445818389df371f56d141d881153ba23183c4735a03f7356ffb43f7757d/aiohttp-3.14.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/7f/a946aa4f8752b37102b41e64dca18a1976ac705c3a0d1dfe74d820a02552/mistune-3.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/02/3623e6169bed617ed1e2d372f7c69f92ec28d54c4dfc997055c8578ec148/virtualenv-21.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/8e/b94ec25fcd4384de2a1f5e0403284f005ec743c04bafdb6698c851df5c6d/tuspy-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/37/aa/111610d8bf5b1bb7a295a048fc648cec346347a8b0be5881defd2d1b4a52/oyaml-1.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl @@ -114,18 +110,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/53/78/ddd0affa881b1e09bc59f11ab829a7904f4bca29d25c34cbb9395e8e0061/allure_python_commons-2.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/55/0f/e7f1ff3a1cabc6c4486a7ee1b0506aedf2f5f8329760ac1f4e8032feef2b/pysam-0.24.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/58/9d/40b6267367182187139a4000b82a3b287d84d745bccd808e75d916920e9d/bleach-6.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5b/67/314f6151bad77a93d751978a344033e1fc890822f05f0416079338e34231/nh3-0.3.6-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5f/fc/a7bf5b6e4e617b45f90f2d9d2a68519c249c81dd4fc2658c7a2a61c4f4b7/aiohappyeyeballs-2.6.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl @@ -134,10 +125,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/6b/67/6ea73b2173bcb1abe3a947fbd090cf96ee1b0a75f3f690e8902dc8ffdbfa/py2bit-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6b/b2/d17b2722c636d64b4e77ddc68d8d0625719d39f94021be8719a218af4c0a/backports_zstd-1.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6c/c2/63fdda36c56437eeb44aaf9493c8bcd62ce230ab1598924fc626ffbfa943/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/74/f5/9373290775639cb67a2fce7f629a1c240dce9f12fe927bc32b2736e16dfc/argcomplete-3.6.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/c7/2342da9830e3e9d4870305ca5d2091d2a83284f2953079b7bdd3b5e029d8/fonttools-4.63.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl @@ -146,7 +135,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/7a/f6/51d8a97116de23c9280c1fa3b813bc088f8571ce5936ba84af1ecf13ed45/pybigwig-0.3.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/32/a7125fb28c4261a627f999d5fb4afff25b523800faed2c30979949d6facd/pydot-4.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/59/208f71d70ddc6184f79b8c6d87d46eb7d7b12c19186a817dec9c9c3f3693/tifffile-2026.6.1-py3-none-any.whl @@ -184,7 +172,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/bb/6b/f4a3d0637692c49da8ef99d72d52526f92e0a8d6ac4f0ca9f31441b9d9ea/numpy-2.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c4/13/680c54afe3e65767bed7ec1a15571e1a2f1257128733851ade24abcefbcc/kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl @@ -265,8 +252,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/00/01/4001033457f25ecdc2b1ffd513ca0b76200b9ea009dd64f6c1aad2dde133/boltons-26.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl @@ -286,13 +271,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/7f/a946aa4f8752b37102b41e64dca18a1976ac705c3a0d1dfe74d820a02552/mistune-3.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/02/3623e6169bed617ed1e2d372f7c69f92ec28d54c4dfc997055c8578ec148/virtualenv-21.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/8e/b94ec25fcd4384de2a1f5e0403284f005ec743c04bafdb6698c851df5c6d/tuspy-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/37/aa/111610d8bf5b1bb7a295a048fc648cec346347a8b0be5881defd2d1b4a52/oyaml-1.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/6b/72e5f22f3c5069bd950f107110cd17468cdb43abda3c55b48c4013e7b667/bioblend-1.9.0-py3-none-any.whl @@ -302,30 +285,22 @@ environments: - pypi: https://files.pythonhosted.org/packages/44/a0/c815bea63117fa63e4e1c01f8a1110d2112fa003f838e6467094ec2432ce/fonttools-4.63.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/46/3b/9dedd2e35cebcd4eb3539514b5ac674fd45654404839e6f9eff6e25d67c7/py2bit-1.0.1.tar.gz - pypi: https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/53/78/ddd0affa881b1e09bc59f11ab829a7904f4bca29d25c34cbb9395e8e0061/allure_python_commons-2.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/58/9d/40b6267367182187139a4000b82a3b287d84d745bccd808e75d916920e9d/bleach-6.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/58/be/7482c8a5ebebbc6470b3eb791812fff7d5e0216c2be3827b30b8bb6603ed/pillow-12.2.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/fc/a7bf5b6e4e617b45f90f2d9d2a68519c249c81dd4fc2658c7a2a61c4f4b7/aiohappyeyeballs-2.6.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/19/ca10ead60b0acc80b2b833c2c4a4f2ff753d0f58b811f70d911c7e94a25c/scipy-1.18.0-cp312-cp312-macosx_10_15_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/74/f5/9373290775639cb67a2fce7f629a1c240dce9f12fe927bc32b2736e16dfc/argcomplete-3.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/32/a7125fb28c4261a627f999d5fb4afff25b523800faed2c30979949d6facd/pydot-4.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/59/208f71d70ddc6184f79b8c6d87d46eb7d7b12c19186a817dec9c9c3f3693/tifffile-2026.6.1-py3-none-any.whl @@ -361,7 +336,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/bf/1d/fcefb70922ea2268a8971d8e5874d9a8218644200fb8465f1dcad55e6851/yarl-1.24.2-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/bf/d9/405320f8077e8e1c5c4bd6adc45e1e6edf6d727b6da7f2e2533cf58bff71/kiwisolver-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/82/280619e0bd7bf2454987e19282616e84762255dd9c8468f62382e8c191f1/aiohttp-3.14.1-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c8/c0/5d4119dba94093bbafede500d3defd2f5eab7897732998c04b54021e530b/h5py-3.16.0-cp312-cp312-macosx_10_13_x86_64.whl @@ -465,8 +439,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/00/01/4001033457f25ecdc2b1ffd513ca0b76200b9ea009dd64f6c1aad2dde133/boltons-26.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl @@ -481,14 +453,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/d2/23d25e3f247b328be58d04a4c9f894178a0d1eda7d42867cfb388adaf416/fonttools-4.63.0-cp314-cp314-macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/2a/7f/a946aa4f8752b37102b41e64dca18a1976ac705c3a0d1dfe74d820a02552/mistune-3.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/02/3623e6169bed617ed1e2d372f7c69f92ec28d54c4dfc997055c8578ec148/virtualenv-21.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/8e/b94ec25fcd4384de2a1f5e0403284f005ec743c04bafdb6698c851df5c6d/tuspy-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/37/aa/111610d8bf5b1bb7a295a048fc648cec346347a8b0be5881defd2d1b4a52/oyaml-1.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl @@ -500,34 +470,26 @@ environments: - pypi: https://files.pythonhosted.org/packages/46/3b/9dedd2e35cebcd4eb3539514b5ac674fd45654404839e6f9eff6e25d67c7/py2bit-1.0.1.tar.gz - pypi: https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/49/b2/97980f3ad4fae37dd7fe31626e2bf75fbf8bdf5d303950ec1fab39a12da8/kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/53/78/ddd0affa881b1e09bc59f11ab829a7904f4bca29d25c34cbb9395e8e0061/allure_python_commons-2.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/58/9d/40b6267367182187139a4000b82a3b287d84d745bccd808e75d916920e9d/bleach-6.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/5d/39/b72e168daf9c00fb20c9fc996d00437ccecdef3102387775d29d7a62576d/numpy-2.5.0-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/fc/a7bf5b6e4e617b45f90f2d9d2a68519c249c81dd4fc2658c7a2a61c4f4b7/aiohappyeyeballs-2.6.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/5c/15b4c7a0182f75ffa90751958ba36a9c01cafee367d49a3edc10ed140b01/msgpack-1.2.1-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/b1/4260d67d6bd85e58a66b72d54ce15d5de789b6f3870cc6bedf8ff9667401/propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/6a/b7/9366ed44ced9b7ef357ab48c94205280276db9d7f064aa3012a97227e966/h5py-3.16.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/72/65/a4559d4ff4a210d2a26d7ca0712e4e738cbfc963135f86e8ae807ca420eb/pysam-0.24.0-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/74/f5/9373290775639cb67a2fce7f629a1c240dce9f12fe927bc32b2736e16dfc/argcomplete-3.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7c/03/b8cdb625a21f710dfa11bbca1f48fb4057d2c0286975f8b415bf80942c99/matplotlib-3.11.0-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/7e/32/a7125fb28c4261a627f999d5fb4afff25b523800faed2c30979949d6facd/pydot-4.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl @@ -567,7 +529,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/2f/7229e91cfa37459622808002bec6eb019c7189bfc59788b3eaba5f273671/conda_package_streaming-0.13.0-py3-none-any.whl @@ -3052,7 +3013,6 @@ packages: - scipy>=1.13 - matplotlib>=3.9 - pysam>=0.23 - - numpydoc>=1.8 - pybigwig>=0.3 - py2bit>=0.3 - pandas>=2.2 @@ -3065,7 +3025,7 @@ packages: - build ; extra == 'actions' - planemo ; extra == 'actions' - matplotlib==3.11 ; extra == 'actions' - requires_python: '>3.9' + requires_python: '>=3.12' - pypi: https://files.pythonhosted.org/packages/00/01/4001033457f25ecdc2b1ffd513ca0b76200b9ea009dd64f6c1aad2dde133/boltons-26.0.0-py3-none-any.whl name: boltons version: 26.0.0 @@ -3080,11 +3040,6 @@ packages: version: 0.22.4 sha256: d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - name: roman-numerals - version: 4.1.0 - sha256: 647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7 - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/08/f6/af32e23e563971ffb0fb86be52bc5be5c2c118858ffc119bf6a9039b173d/lxml-6.1.1-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl name: lxml version: 6.1.1 @@ -3095,18 +3050,6 @@ packages: - beautifulsoup4 ; extra == 'htmlsoup' - lxml-html-clean ; extra == 'html-clean' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl - name: sphinxcontrib-htmlhelp - version: 2.1.0 - sha256: 166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8 - requires_dist: - - ruff==0.5.5 ; extra == 'lint' - - mypy ; extra == 'lint' - - types-docutils ; extra == 'lint' - - sphinx>=5 ; extra == 'standalone' - - pytest ; extra == 'test' - - html5lib ; extra == 'test' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl name: rich-argparse version: 1.8.0 @@ -3452,18 +3395,6 @@ packages: version: 0.7.0 sha256: 6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e requires_python: '>=3.6' -- pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - name: sphinxcontrib-qthelp - version: 2.0.0 - sha256: b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb - requires_dist: - - ruff==0.5.5 ; extra == 'lint' - - mypy ; extra == 'lint' - - types-docutils ; extra == 'lint' - - sphinx>=5 ; extra == 'standalone' - - pytest ; extra == 'test' - - defusedxml>=0.7.1 ; extra == 'test' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/27/d2/23d25e3f247b328be58d04a4c9f894178a0d1eda7d42867cfb388adaf416/fonttools-4.63.0-cp314-cp314-macosx_10_15_universal2.whl name: fonttools version: 4.63.0 @@ -3544,17 +3475,6 @@ packages: version: 3.6.0 sha256: 43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - name: sphinxcontrib-devhelp - version: 2.0.0 - sha256: aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2 - requires_dist: - - ruff==0.5.5 ; extra == 'lint' - - mypy ; extra == 'lint' - - types-docutils ; extra == 'lint' - - sphinx>=5 ; extra == 'standalone' - - pytest ; extra == 'test' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/37/aa/111610d8bf5b1bb7a295a048fc648cec346347a8b0be5881defd2d1b4a52/oyaml-1.0-py2.py3-none-any.whl name: oyaml version: '1.0' @@ -3809,22 +3729,6 @@ packages: version: 3.4.7 sha256: 5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl - name: snowballstemmer - version: 3.1.1 - sha256: 7e207fa178741da09cdee59d3ecec3827ad5f92b1fc5c9ff3755b639f71f5752 - requires_python: '>=3.3' -- pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - name: sphinxcontrib-serializinghtml - version: 2.0.0 - sha256: 6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331 - requires_dist: - - ruff==0.5.5 ; extra == 'lint' - - mypy ; extra == 'lint' - - types-docutils ; extra == 'lint' - - sphinx>=5 ; extra == 'standalone' - - pytest ; extra == 'test' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/53/78/ddd0affa881b1e09bc59f11ab829a7904f4bca29d25c34cbb9395e8e0061/allure_python_commons-2.16.0-py3-none-any.whl name: allure-python-commons version: 2.16.0 @@ -3911,22 +3815,6 @@ packages: version: 2.5.0 sha256: 28e7137057d551e4a83c4ae414e3451f50568409db7569aacc7f9811ee06a446 requires_python: '>=3.12' -- pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - name: sphinxcontrib-applehelp - version: 2.0.0 - sha256: 4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5 - requires_dist: - - ruff==0.5.5 ; extra == 'lint' - - mypy ; extra == 'lint' - - types-docutils ; extra == 'lint' - - sphinx>=5 ; extra == 'standalone' - - pytest ; extra == 'test' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl - name: imagesize - version: 2.0.0 - sha256: 5667c5bbb57ab3f1fa4bc366f4fbc971db3d5ed011fd2715fd8001f782718d96 - requires_python: '>=3.10,<3.15' - pypi: https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: pydantic-core version: 2.46.4 @@ -3944,14 +3832,6 @@ packages: version: 1.2.1 sha256: 810b916696c86ef0deb3b74588480224df4c1b071136c34183e4a2a4284d7ac7 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/62/5e/3a6a3e90f35cea3853c45e5d5fb9b7192ce4384616f932cf7591298ab6e1/numpydoc-1.10.0-py3-none-any.whl - name: numpydoc - version: 1.10.0 - sha256: 3149da9874af890bcc2a82ef7aae5484e5aa81cb2778f08e3c307ba6d963721b - requires_dist: - - sphinx>=6 - - tomli>=1.1.0 ; python_full_version < '3.11' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl name: jinja2 version: 3.1.6 @@ -4296,29 +4176,6 @@ packages: version: 0.24.0 sha256: f6f95d44efb4ee1dcfd18fcd11b26ba00bc1afaba9128a1b56c4c8887208fb07 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl - name: sphinx - version: 9.1.0 - sha256: c84fdd4e782504495fe4f2c0b3413d6c2bf388589bb352d439b2a3bb99991978 - requires_dist: - - sphinxcontrib-applehelp>=1.0.7 - - sphinxcontrib-devhelp>=1.0.6 - - sphinxcontrib-htmlhelp>=2.0.6 - - sphinxcontrib-jsmath>=1.0.1 - - sphinxcontrib-qthelp>=1.0.6 - - sphinxcontrib-serializinghtml>=1.1.9 - - jinja2>=3.1 - - pygments>=2.17 - - docutils>=0.21,<0.23 - - snowballstemmer>=2.2 - - babel>=2.13 - - alabaster>=0.7.14 - - imagesize>=1.3 - - requests>=2.30.0 - - roman-numerals>=1.0.0 - - packaging>=23.0 - - colorama>=0.4.6 ; sys_platform == 'win32' - requires_python: '>=3.12' - pypi: https://files.pythonhosted.org/packages/74/f5/9373290775639cb67a2fce7f629a1c240dce9f12fe927bc32b2736e16dfc/argcomplete-3.6.3-py3-none-any.whl name: argcomplete version: 3.6.3 @@ -4364,21 +4221,6 @@ packages: - skia-pathops>=0.5.0 ; extra == 'all' - uharfbuzz>=0.45.0 ; extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - name: babel - version: 2.18.0 - sha256: e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35 - requires_dist: - - pytz>=2015.7 ; python_full_version < '3.9' - - tzdata ; sys_platform == 'win32' and extra == 'dev' - - backports-zoneinfo ; python_full_version < '3.9' and extra == 'dev' - - freezegun~=1.0 ; extra == 'dev' - - jinja2>=3.0 ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - pytest>=6.0 ; extra == 'dev' - - pytz ; extra == 'dev' - - setuptools ; extra == 'dev' - requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/78/17/853354204e1ca022d6b7d011ca7f3206c4f8faa3cc743e92609b49c1d83f/tinydb-4.8.2-py3-none-any.whl name: tinydb version: 4.8.2 @@ -4456,11 +4298,6 @@ packages: - pytest-xdist[psutil] ; extra == 'tests' - zest-releaser[recommended] ; extra == 'release' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - name: alabaster - version: 1.0.0 - sha256: fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl name: urllib3 version: 2.7.0 @@ -5278,15 +5115,6 @@ packages: version: 3.4.0 sha256: f742a7dbd0d9cb9ea41e9a24a918996e8170c799fa528688d40dd582c8265f4f requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - name: sphinxcontrib-jsmath - version: 1.0.1 - sha256: 2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 - requires_dist: - - pytest ; extra == 'test' - - flake8 ; extra == 'test' - - mypy ; extra == 'test' - requires_python: '>=3.5' - pypi: https://files.pythonhosted.org/packages/c2/82/280619e0bd7bf2454987e19282616e84762255dd9c8468f62382e8c191f1/aiohttp-3.14.1-cp312-cp312-macosx_10_13_x86_64.whl name: aiohttp version: 3.14.1 diff --git a/pyproject.toml b/pyproject.toml index b63f4a15a4..ffc2e8c6da 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,6 @@ dependencies = [ "scipy >= 1.13", "matplotlib >= 3.9", "pysam >= 0.23", - "numpydoc >= 1.8", "pyBigWig >= 0.3", "py2bit >= 0.3", "pandas >= 2.2", From 957aaa16a22749d9fb679b1dea6b0ff35401d04c Mon Sep 17 00:00:00 2001 From: WardDeb Date: Tue, 23 Jun 2026 12:34:10 +0200 Subject: [PATCH 10/10] weekly cargo build --- .github/workflows/test_rust.yml | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/.github/workflows/test_rust.yml b/.github/workflows/test_rust.yml index 47728e18b5..438148ba11 100644 --- a/.github/workflows/test_rust.yml +++ b/.github/workflows/test_rust.yml @@ -1,14 +1,19 @@ name: tests_rust -on: [push, pull_request, workflow_dispatch] +on: + push: + pull_request: + workflow_dispatch: + schedule: + - cron: "0 0 * * 0" jobs: - cargo_test: - name: run cargo test - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - run: rustup update stable && rustup default stable - - name: cargo build - run: cargo build --verbose - - name: cargo test - run: cargo test --verbose \ No newline at end of file + cargo_test: + name: run cargo test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - run: rustup update stable && rustup default stable + - name: cargo build + run: cargo build --verbose + - name: cargo test + run: cargo test --verbose