From 755e42c750a9efd6a3240f2894a8bd7562415f83 Mon Sep 17 00:00:00 2001 From: Alex Rubinsteyn Date: Tue, 6 Oct 2026 16:49:30 -0400 Subject: [PATCH 1/2] Require current annotation dependencies and test pandas 3 explicitly --- .github/workflows/tests.yml | 20 +++++++++++++++++--- CHANGELOG.md | 7 +++++++ docs/getting_started.md | 10 ++++++++++ requirements.txt | 5 +++-- tests/README.md | 4 +++- varcode/version.py | 2 +- 6 files changed, 41 insertions(+), 7 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3a48456..37c7822 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -17,7 +17,17 @@ 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" + - python-version: "3.10" + pandas: "pandas>=2.2.2,<3" + - python-version: "3.11" + pandas: "pandas>=2.2.2,<3" + - python-version: "3.11" + pandas: "pandas>=3,<4" + - python-version: "3.12" + pandas: "pandas>=3,<4" steps: - name: Checkout repository @@ -29,10 +39,12 @@ jobs: cache: pip cache-dependency-path: requirements.txt - name: Install dependencies + env: + PANDAS_REQUIREMENT: ${{ matrix.pandas }} 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" - name: Verify, build and install the source distribution run: | python -m pytest -q tests/test_source_distribution.py @@ -42,6 +54,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 +100,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..cebee5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Change Log +## [v10.11.8](https://github.com/openvax/varcode/tree/v10.11.8) (2026-10-06) + +- Require PyEnsembl 2.24.1+ and gtfparse 3.0.2+ for the current annotation + stack. Support pandas 2.2.2+ and 3.x, retaining Python 3.9/3.10 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..eafb4d4 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -10,6 +10,16 @@ use Python 3.9 or later. pip install varcode ``` +Varcode requires PyEnsembl 2.24.1+ and gtfparse 3.0.2+, 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 'pandas>=3,<4' +``` + +Python 3.9 and 3.10 remain supported with pandas 2. + ## Reference data Varcode uses [PyEnsembl](https://github.com/openvax/pyensembl) for gene annotations diff --git a/requirements.txt b/requirements.txt index 09ec848..b38b8eb 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>=3.0.2,<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..e34587a 100644 --- a/tests/README.md +++ b/tests/README.md @@ -32,7 +32,9 @@ 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. 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" From 128d42a24e1e8ed1cbd7c51b920d708b5b32619f Mon Sep 17 00:00:00 2001 From: Alex Rubinsteyn Date: Tue, 6 Oct 2026 16:51:52 -0400 Subject: [PATCH 2/2] Keep Topiary compatibility while exercising gtfparse 3 in CI --- .github/workflows/tests.yml | 8 +++++++- CHANGELOG.md | 5 +++-- docs/getting_started.md | 6 ++++-- requirements.txt | 2 +- tests/README.md | 4 +++- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 37c7822..313b1ee 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -20,14 +20,19 @@ jobs: 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 @@ -41,10 +46,11 @@ jobs: - 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' - python -m pip install -r requirements.txt "$PANDAS_REQUIREMENT" + 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 diff --git a/CHANGELOG.md b/CHANGELOG.md index cebee5a..67b82dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,9 @@ ## [v10.11.8](https://github.com/openvax/varcode/tree/v10.11.8) (2026-10-06) -- Require PyEnsembl 2.24.1+ and gtfparse 3.0.2+ for the current annotation - stack. Support pandas 2.2.2+ and 3.x, retaining Python 3.9/3.10 compatibility. +- 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. diff --git a/docs/getting_started.md b/docs/getting_started.md index eafb4d4..d6efd77 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -10,15 +10,17 @@ use Python 3.9 or later. pip install varcode ``` -Varcode requires PyEnsembl 2.24.1+ and gtfparse 3.0.2+, and supports pandas +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 'pandas>=3,<4' +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 diff --git a/requirements.txt b/requirements.txt index b38b8eb..dbc8fd8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ numpy>=2.0.0,<3.0.0 pandas>=2.2.2,<4.0.0 pyensembl>=2.24.1 -gtfparse>=3.0.2,<4.0.0 +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 e34587a..e4cfe6b 100644 --- a/tests/README.md +++ b/tests/README.md @@ -34,7 +34,9 @@ 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/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. To reproduce this +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: