diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 65e1d3d..25dc581 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -39,7 +39,7 @@ jobs: run: | if [[ "$RUNNER_OS" == "Linux" ]]; then sudo apt-get update - sudo apt-get install -y build-essential zlib1g-dev + sudo apt-get install -y build-essential cmake zlib1g-dev fi - name: Setup conda (macOS only) @@ -51,10 +51,15 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install dependencies + env: + # Force pytantan to build from sdist so all Python versions get the + # same AVX2-off baseline. The published cp3x wheels have caused + # import-time failures on 3.9/3.10/3.11 in this matrix. + PIP_NO_BINARY: pytantan run: | if [[ "${{ matrix.use_conda }}" == "true" ]]; then # Use conda for macOS to avoid mappy build issues - conda install -c conda-forge -c bioconda mappy numpy pytest pytest-cov -y + conda install -c conda-forge -c bioconda mappy numpy pytest pytest-cov cmake -y # Install funannotate2 in editable mode - this will install all dependencies from pyproject.toml pip install -e . else diff --git a/Dockerfile b/Dockerfile index 03c6cb1..4a0ab29 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ ARG PIXI_VERSION=0.67.0 ARG UBUNTU_VERSION=22.04 -ARG PYTANTAN_VERSION=0.1.3 +ARG PYTANTAN_VERSION=0.1.4 # --------------------------------------------------------------------------- # Stage 1: build — resolve + install the pixi environment from pixi.lock diff --git a/pixi.lock b/pixi.lock index 135aa3d..3c36f81 100644 --- a/pixi.lock +++ b/pixi.lock @@ -15,7 +15,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.13.5-py311h55b9665_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/astunparse-1.6.3-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/bioconda/linux-64/augustus-3.5.0-pl5321h9716f88_9.conda @@ -34,7 +33,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/blinker-1.9.0-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/boost-cpp-1.85.0-h44aadfe_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py311h66f275b_1.conda - - conda: https://conda.anaconda.org/bioconda/noarch/buscolite-26.1.26-pyhdfd78af_0.conda + - conda: https://conda.anaconda.org/bioconda/noarch/buscolite-26.4.22-pyhdfd78af_0.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/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda @@ -185,7 +184,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.12.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-26.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/bioconda/linux-64/pytantan-0.1.3-py311hc84137b_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.15-hd63d673_0_cpython.conda - conda: https://conda.anaconda.org/bioconda/linux-64/python-edlib-1.3.9.post1-py311hf552afe_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-flatbuffers-25.9.23-pyh1e1bc0e_0.conda @@ -198,7 +196,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/rsa-4.9.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.1-h1cbb8d7_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.22.1-h96c455f_0.tar.bz2 - - conda: https://conda.anaconda.org/bioconda/linux-64/scoring-matrices-0.3.4-py311haab0aaa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/bioconda/linux-64/snap-2017_03_01-h7b50bb2_0.tar.bz2 @@ -233,13 +230,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/2c/2f/51d27f44689aa1ee000bb145811570002d420c7dfa0b153a992c28e0e297/annorefine-2026.2.22-cp311-cp311-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d2/8d/2733707a9daf4df14cb6ae251691cfc49fcce888234ec6484364d8319b46/archspec-0.2.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/89/2e3f29c41cb86273dcd8f3ec2df5b4e87ae0d554cbb268ae7c3092940cae/funannotate2_addons-26.3.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/f8/65d52c1383a1832761f80bad6206de6e9e675adb67aaa8673cc709fe84c2/helixerlite-25.5.27-cp311-cp311-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/9f/a0/b1266b0d852d10ac8339540d09fb90e38c198b6a2bcdeb3a881338d4a8fc/keras-layer-normalization-0.16.0.tar.gz - pypi: https://files.pythonhosted.org/packages/54/4b/195ac84cc8f6077b4f0f421e8daee21b7f1bd88cb7716414234379fe68ec/numcodecs-0.16.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/df/3e/6211c83f41a8d68e7002c615e8fa1b1da4d7a7a2c1fa0779f826871aa577/pytantan-0.1.4-cp311-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/36/4d/4a67f30778a45d542bbea5db2dbfa1e9e100bf9ba64aefe34215ba9f11f6/scikit_learn-1.8.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1d/9c/9111e1e0fa82a8f48dd9d59853d7706cc3e04b01948fa6687e676fcf012d/scoring_matrices-0.3.4-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/24/94/80165946ec4986505cbfac29b5ae79544bfe2200d9d7883e1ad7c7342a55/tensorflow_addons-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/bb/d43e5c75054e53efce310e79d63df0ac3f25e34c926be5dffb7d283fb2a8/typeguard-2.13.3-py3-none-any.whl @@ -327,16 +327,11 @@ packages: - mypy ; extra == 'dev' - pre-commit ; extra == 'dev' requires_python: '>=3.9' -- conda: https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.5-pyhd8ed1ab_0.conda - sha256: eb68e1ce9e9a148168a4b1e257a8feebffdb0664b557bb526a1e4853f2d2fc00 - md5: 845b38297fca2f2d18a29748e2ece7fa - depends: - - python >=3.9 - license: MIT OR Apache-2.0 - purls: - - pkg:pypi/archspec?source=hash-mapping - size: 50894 - timestamp: 1737352715041 +- pypi: https://files.pythonhosted.org/packages/d2/8d/2733707a9daf4df14cb6ae251691cfc49fcce888234ec6484364d8319b46/archspec-0.2.5-py3-none-any.whl + name: archspec + version: 0.2.5 + sha256: 604bd4115cb4c18e50a22a9b4a1e516706712263790d7d2994aaa595e70082f6 + requires_python: '!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=3.6' - conda: https://conda.anaconda.org/conda-forge/noarch/astunparse-1.6.3-pyhd8ed1ab_3.conda sha256: 7304f265f146235c34e24db310a94648aa306ca0b2a4a12042bf96da1881f99c md5: d3f195dfdbbf736e4ec178bbec2a975c @@ -619,9 +614,9 @@ packages: - pkg:pypi/brotli?source=hash-mapping size: 367573 timestamp: 1764017405384 -- conda: https://conda.anaconda.org/bioconda/noarch/buscolite-26.1.26-pyhdfd78af_0.conda - sha256: fc63cf6293135f48aab41f590ac0ec4ac4bd98aa81e2a845075cbb9847ab2050 - md5: e286dc0c30c95ff9807edd94c7ccecb9 +- conda: https://conda.anaconda.org/bioconda/noarch/buscolite-26.4.22-pyhdfd78af_0.conda + sha256: e8e65402edf740ef445dde1f11afdb774626da4662dbe63e6d1d4df64b9bbe0d + md5: 87665555e8c53c63de12e64178e92f75 depends: - augustus >=3.5.0 - miniprot @@ -634,8 +629,8 @@ packages: license_family: BSD purls: - pkg:pypi/buscolite?source=hash-mapping - size: 143758 - timestamp: 1770583392184 + size: 146187 + timestamp: 1776846150347 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 md5: d2ffd7602c02f2b316fd921d39876885 @@ -808,21 +803,21 @@ packages: timestamp: 1752167340913 - pypi: ./ name: funannotate2 - version: 26.2.12 - sha256: 73ae21ea6a9a5edad01116a3a34a8d25b126e794283bd701ef650db129b93b6d + version: 26.4.22 + sha256: 3433921df6b78d529c556af8edb76725db5a7abdfd6fdb1d0ea6cc41b30f7468 requires_dist: - natsort - numpy - mappy - gfftk>=26.2.12 - - buscolite>=26.1.26 + - buscolite>=26.4.22 - gapmm2>=25.8.12 - pyhmmer>=0.12.0 - pyfastx>=2.0.0 - requests - gb-io>=0.3.2 - json-repair - - pytantan + - pytantan>=0.1.4 - psutil - annorefine>=2026.2.9 requires_python: '>=3.9.0,<3.14' @@ -2640,24 +2635,14 @@ packages: - pkg:pypi/pysocks?source=hash-mapping size: 21085 timestamp: 1733217331982 -- conda: https://conda.anaconda.org/bioconda/linux-64/pytantan-0.1.3-py311hc84137b_1.tar.bz2 - sha256: 6e39555316cd6aa55fe7980575c20ce498f99c9ae523c9a990bcf323febcdd52 - md5: 1546f5c62ba6c422c4a827cb6b197f48 - depends: - - archspec >=0.2 - - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - python >=3.11,<3.12.0a0 - - python_abi 3.11.* *_cp311 - - scoring-matrices >=0.3.2 - - scoring-matrices >=0.3.2,<0.4.0a0 - license: GPL-3.0-or-later - license_family: GPL3 - purls: - - pkg:pypi/pytantan?source=hash-mapping - size: 276866 - timestamp: 1752626721522 +- pypi: https://files.pythonhosted.org/packages/df/3e/6211c83f41a8d68e7002c615e8fa1b1da4d7a7a2c1fa0779f826871aa577/pytantan-0.1.4-cp311-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: pytantan + version: 0.1.4 + sha256: 6273c806b2a3e106967136af616d55254263ffab225fd3e1147a3696e413a428 + requires_dist: + - archspec~=0.2 ; os_name != 'nt' + - scoring-matrices~=0.3.0 + requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.15-hd63d673_0_cpython.conda sha256: bf6a32c69889d38482436a786bea32276756cedf0e9805cc856ffd088e8d00f0 md5: a5ebcefec0c12a333bcd6d7bf3bddc1f @@ -2924,19 +2909,13 @@ packages: - ruff>=0.12.0 ; extra == 'dev' - cython-lint>=0.12.2 ; extra == 'dev' requires_python: '>=3.11' -- conda: https://conda.anaconda.org/bioconda/linux-64/scoring-matrices-0.3.4-py311haab0aaa_0.conda - sha256: 83b017942cc60f23c31ebec6ef8c1be3f3f43f32c3e86223aba183406b2d9067 - md5: 5c5703643ddc677df737cee6a1e931cd - depends: - - libgcc >=13 - - python >=3.11,<3.12.0a0 - - python_abi 3.11.* *_cp311 - license: MIT - license_family: MIT - purls: - - pkg:pypi/scoring-matrices?source=hash-mapping - size: 113554 - timestamp: 1768763699481 +- pypi: https://files.pythonhosted.org/packages/1d/9c/9111e1e0fa82a8f48dd9d59853d7706cc3e04b01948fa6687e676fcf012d/scoring_matrices-0.3.4-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: scoring-matrices + version: 0.3.4 + sha256: fc0d2345e9b075eed40a1d9f3dca60053bb39232411d92b3d2d1c8536446e3bf + requires_dist: + - importlib-resources ; python_full_version < '3.9' and extra == 'test' + requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda sha256: 82088a6e4daa33329a30bc26dc19a98c7c1d3f05c0f73ce9845d4eab4924e9e1 md5: 8e194e7b992f99a5015edbd4ebd38efd diff --git a/pixi.toml b/pixi.toml index c178636..62f36e8 100644 --- a/pixi.toml +++ b/pixi.toml @@ -23,11 +23,10 @@ table2asn = "*" # funannotate2 python deps available via bioconda / conda-forge gfftk = ">=26.2.12" gapmm2 = ">=25.8.12" -buscolite = ">=26.1.26" +buscolite = ">=26.4.22" pyhmmer = ">=0.12.0" pyfastx = ">=2.0.0" gb-io = ">=0.3.2" -pytantan = "*" mappy = "*" # general python + scientific libs from conda-forge @@ -50,4 +49,6 @@ funannotate2 = { path = ".", editable = false } "funannotate2-addons" = "*" helixerlite = "*" annorefine = ">=2026.2.9" +# pytantan: bioconda lags at 0.1.3; pull 0.1.4+ from PyPI +pytantan = ">=0.1.4" diff --git a/pyproject.toml b/pyproject.toml index c81f7bd..6238813 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ dependencies = [ "numpy", "mappy", "gfftk>=26.2.12", - "buscolite>=26.2.22", + "buscolite>=26.4.22", "gapmm2>=25.8.12", "pyhmmer>=0.12.0", "pyfastx>=2.0.0",