From 3bdecc937afc19d72d3610f6a5cc15950f597d8c Mon Sep 17 00:00:00 2001 From: Kevin Detry <206546615+kevindetry-milaboratories@users.noreply.github.com> Date: Thu, 1 Oct 2026 15:12:20 +0200 Subject: [PATCH] Pin pgen runenv to the Generation Probability set The Generation Probability block installs its `requirements.txt` with `pip --no-index --find-links ` on a backend without Docker. Every pin must exist as a wheel in the run environment. - Pin `olga`, `numba`, `llvmlite`, `numpy`, `polars`, `polars-runtime-32` and `polars-runtime-compat` to the block versions. - Remove `polars-lts-cpu`. `polars[rtcompat]` replaces it upstream. - Put `olga` and `numba` under `noDeps`, so their loose requirements do not add newer duplicate wheels. - Turn on `strictMissing`, so a missing wheel fails the build. --- .changeset/pgen-polars-rtcompat.md | 11 +++++++++++ python-3.12.10-pgen/README.md | 8 ++++++-- python-3.12.10-pgen/config.json | 15 +++++++++++++-- python-3.12.10-pgen/package.json | 2 +- 4 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 .changeset/pgen-polars-rtcompat.md diff --git a/.changeset/pgen-polars-rtcompat.md b/.changeset/pgen-polars-rtcompat.md new file mode 100644 index 0000000..634f1fc --- /dev/null +++ b/.changeset/pgen-polars-rtcompat.md @@ -0,0 +1,11 @@ +--- +"@platforma-open/milaboratories.runenv-python-3.12.10-pgen": minor +--- + +Update the `3.12.10-pgen` run environment to the pins of the Generation Probability block: `numpy==2.4.6`, `numba==0.66.0`, `llvmlite==0.48.0`, `olga==1.3.0`, `polars==1.43.0`, `polars-runtime-32==1.43.0` and `polars-runtime-compat==1.43.0`. + +The block installs its `requirements.txt` with `pip --no-index --find-links `. A pin that the run environment does not ship cannot resolve. The old set (`numpy==2.2.6`, `polars-lts-cpu==1.33.1`) did not match the block. + +`polars-lts-cpu` is removed. `polars[rtcompat]` replaces it upstream, and `polars-runtime-compat` is that runtime. + +`olga` and `numba` are declared under `noDeps`. Without it, their loose requirements pull the newest `numba`, `llvmlite` and `numpy` next to the pinned versions. `strictMissing` is on, so a missing wheel fails the build. diff --git a/python-3.12.10-pgen/README.md b/python-3.12.10-pgen/README.md index 29a6b49..68fb5c7 100644 --- a/python-3.12.10-pgen/README.md +++ b/python-3.12.10-pgen/README.md @@ -1,3 +1,7 @@ -Python 3.12.10 run environment for the Generation Probability block (`generation-probability`): `olga` (V(D)J generation-probability computation for CDR3s, including its 10 bundled recombination models) plus `numpy` and `polars-lts-cpu` for Parquet I/O, and transitives. +Python 3.12.10 run environment for the Generation Probability block (`generation-probability`): `olga` (V(D)J generation-probability computation for CDR3s, including its 10 bundled recombination models) plus `numpy` and `polars` for Parquet I/O. -Note: olga declares `numba` as a hard dependency (pulling `llvmlite`/LLVM), so these are bundled even though the block only uses olga's pure-NumPy `compute_aa_CDR3_pgen` path, not olga's numba fast-path. macOS-Intel (`macosx-x64`) is intentionally not built — `llvmlite` ships no cp312 wheel for that platform. +The set is pinned flat and matches the block's `requirements.txt`: `olga`, `numba`, `llvmlite`, `numpy`, `polars`, `polars-runtime-32` and `polars-runtime-compat`. The block installs it with `pip --no-index --find-links `, so each pin in the block must exist here as a wheel. Change the pins here and in the block together. + +`polars-runtime-compat` is the `polars[rtcompat]` extra. It replaces `polars-lts-cpu`. `olga` and `numba` are declared under `noDeps`. Their loose requirements otherwise pull the newest `numba`, `llvmlite` and `numpy` next to the pinned versions. + +The block uses olga's `FastPgen`, which runs numba kernels. numpy 2.4.6 has only `manylinux_2_28` wheels on Linux, so the host needs glibc 2.28 or newer. macOS-Intel (`macosx-x64`) is intentionally not built — `llvmlite` ships no cp312 wheel for that platform. diff --git a/python-3.12.10-pgen/config.json b/python-3.12.10-pgen/config.json index 7e34f1c..1627821 100644 --- a/python-3.12.10-pgen/config.json +++ b/python-3.12.10-pgen/config.json @@ -2,12 +2,23 @@ "packages": { "dependencies": [ "olga==1.3.0", - "polars-lts-cpu==1.33.1", - "numpy==2.2.6" + "numba==0.66.0", + "llvmlite==0.48.0", + "numpy==2.4.6", + "polars==1.43.0", + "polars-runtime-32==1.43.0", + "polars-runtime-compat==1.43.0" + ], + "noDeps": [ + "olga", + "numba" ], "skip": {}, "overrides": {}, "platformSpecific": {}, + "resolution": { + "strictMissing": true + }, "buildWheel": {} } } diff --git a/python-3.12.10-pgen/package.json b/python-3.12.10-pgen/package.json index bc508b7..e96ebe6 100644 --- a/python-3.12.10-pgen/package.json +++ b/python-3.12.10-pgen/package.json @@ -1,7 +1,7 @@ { "name": "@platforma-open/milaboratories.runenv-python-3.12.10-pgen", "version": "0.2.0", - "description": "Python 3.12.10 run environment for the Generation Probability block (olga for CDR3 generation probability + numpy + polars-lts-cpu)", + "description": "Python 3.12.10 run environment for the Generation Probability block (olga for CDR3 generation probability + numpy + polars with the rtcompat runtime)", "scripts": { "cleanup": "rm -rf ./pkg-*.tgz ./pydist ./dist/ ./build/", "reset": "pnpm run cleanup && rm -rf ./node_modules ./.turbo",