diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3a48456..313b1ee 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -17,7 +17,22 @@ jobs: strategy: fail-fast: true matrix: - python-version: ["3.9", "3.10", "3.11"] + include: + - python-version: "3.9" + pandas: "pandas>=2.2.2,<3" + gtfparse: "gtfparse>=3.0.2,<4" + - python-version: "3.10" + pandas: "pandas>=2.2.2,<3" + gtfparse: "gtfparse>=3.0.2,<4" + - python-version: "3.11" + pandas: "pandas>=2.2.2,<3" + gtfparse: "gtfparse==2.9.1" + - python-version: "3.11" + pandas: "pandas>=3,<4" + gtfparse: "gtfparse>=3.0.2,<4" + - python-version: "3.12" + pandas: "pandas>=3,<4" + gtfparse: "gtfparse>=3.0.2,<4" steps: - name: Checkout repository @@ -29,10 +44,13 @@ jobs: cache: pip cache-dependency-path: requirements.txt - name: Install dependencies + env: + PANDAS_REQUIREMENT: ${{ matrix.pandas }} + GTFPARSE_REQUIREMENT: ${{ matrix.gtfparse }} run: | python -m pip install --upgrade pip python -m pip install flake8 pytest pytest-cov coveralls ruff build 'setuptools>=64' - pip install -r requirements.txt + python -m pip install -r requirements.txt "$PANDAS_REQUIREMENT" "$GTFPARSE_REQUIREMENT" - name: Verify, build and install the source distribution run: | python -m pytest -q tests/test_source_distribution.py @@ -42,6 +60,8 @@ jobs: # Osteosarc 0.14.x supports every Python version in this matrix; # run native adapter checks against the bundled historical snapshot. python -m pip install "$RUNNER_TEMP/varcode-sdist[test-data]" + python -m pip check + python -m pip show pandas pyensembl gtfparse - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names @@ -86,7 +106,7 @@ jobs: # the shared point-edit domain; the full suite above separately checks # SV refusal, partial plugins, and explicit dual-annotator regressions. - name: Cross-annotator parity gate (shared point-edit domain) - if: matrix.python-version == '3.11' + if: matrix.python-version == '3.11' && matrix.pandas == 'pandas>=3,<4' working-directory: ${{ runner.temp }}/varcode-sdist env: COVERAGE_FILE: .coverage.parity diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a309db..67b82dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Change Log +## [v10.11.8](https://github.com/openvax/varcode/tree/v10.11.8) (2026-10-06) + +- Require PyEnsembl 2.24.1+ and gtfparse 2.9.1+, with explicit coverage of + gtfparse 3.0.2+. Support pandas 2.2.2+ and 3.x, retaining Python 3.9/3.10 + and existing Topiary dependency compatibility. +- Explicitly test pandas 2 and 3 on Python 3.11, plus pandas 3 on Python 3.12, + including the installed source distribution and cross-annotator parity. + ## [v10.11.7](https://github.com/openvax/varcode/tree/v10.11.7) (2026-10-06) - Cache RNA variant support counts under the variant key, keeping it separate diff --git a/docs/getting_started.md b/docs/getting_started.md index 2c7bfa1..d6efd77 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -10,6 +10,18 @@ use Python 3.9 or later. pip install varcode ``` +Varcode requires PyEnsembl 2.24.1+ and gtfparse 2.9.1+, and supports pandas +2.2.2+ and 3.x. To upgrade an existing environment to pandas 3, use Python +3.11 or later and run: + +```bash +pip install --upgrade varcode pyensembl 'gtfparse>=3.0.2,<4' 'pandas>=3,<4' +``` + +Python 3.9 and 3.10 remain supported with pandas 2. +Environments shared with Topiary can keep gtfparse 2.9.1 until its +[gtfparse 3 migration](https://github.com/openvax/topiary/issues/484) ships. + ## Reference data Varcode uses [PyEnsembl](https://github.com/openvax/pyensembl) for gene annotations diff --git a/requirements.txt b/requirements.txt index 09ec848..dbc8fd8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,7 @@ numpy>=2.0.0,<3.0.0 -pandas>=2.0.0,<4.0.0 -pyensembl>=2.6.4 +pandas>=2.2.2,<4.0.0 +pyensembl>=2.24.1 +gtfparse>=2.9.1,<4.0.0 memoized_property>=1.0.2 serializable>=1.1.0 sercol>=1.0.3 diff --git a/tests/README.md b/tests/README.md index a2979ce..e4cfe6b 100644 --- a/tests/README.md +++ b/tests/README.md @@ -32,7 +32,11 @@ uses the installed backend without downloading build dependencies. CI builds and unpacks the source distribution outside the checkout, installs that source with the `test-data` extra, and runs the full suite and parity -checks from the unpacked directory on Python 3.9/3.10/3.11. To reproduce this +checks from the unpacked directory on Python 3.9/3.10/3.11/3.12. Python 3.11 +tests both pandas 2 and 3; Python 3.12 and the parity gate use pandas 3. +Python 3.9/3.10 use pandas 2. The Python 3.11/pandas 2 job also checks the +gtfparse 2.9.1 compatibility floor; other jobs require gtfparse 3.0.2+. +To reproduce this locally, first install the development tools and reference releases from [CONTRIBUTING.md](../CONTRIBUTING.md), then: diff --git a/varcode/version.py b/varcode/version.py index 12c43bc..5a16b3f 100644 --- a/varcode/version.py +++ b/varcode/version.py @@ -1 +1 @@ -__version__ = "10.11.7" +__version__ = "10.11.8"