From 0b29fa02f85b7af2688c7b90c492e6d37cc0da2a Mon Sep 17 00:00:00 2001 From: Robrecht Cannoodt Date: Thu, 13 Aug 2026 10:55:48 +0200 Subject: [PATCH 01/11] fix kbet_pg and kbet_pg_label failing to build pandas<2.0 and numpy<2.0 no longer resolve to anything that builds on the base image, and pegasuspy doesn't ask for them -- it wants pandas>=1.2.0 and declares zarr<3 itself, so all three bounds can go. That gets the image building again, but pegasus imports pkg_resources, which setuptools dropped in 81, so pin setuptools under that. * drop zarr, pandas and numpy bounds from both components * add setuptools<81 --- src/metrics/kbet_pg/config.vsh.yaml | 4 +--- src/metrics/kbet_pg_label/config.vsh.yaml | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/metrics/kbet_pg/config.vsh.yaml b/src/metrics/kbet_pg/config.vsh.yaml index 6f35a94c5..50feeddda 100644 --- a/src/metrics/kbet_pg/config.vsh.yaml +++ b/src/metrics/kbet_pg/config.vsh.yaml @@ -39,9 +39,7 @@ engines: - type: python pypi: - pegasuspy - - zarr<3.0 - - pandas<2.0 - - numpy<2.0 + - setuptools<81 runners: - type: executable - type: nextflow diff --git a/src/metrics/kbet_pg_label/config.vsh.yaml b/src/metrics/kbet_pg_label/config.vsh.yaml index f5fbf1f62..2434133ff 100644 --- a/src/metrics/kbet_pg_label/config.vsh.yaml +++ b/src/metrics/kbet_pg_label/config.vsh.yaml @@ -39,9 +39,7 @@ engines: - type: python pypi: - pegasuspy - - zarr<3.0 - - pandas<2.0 - - numpy<2.0 + - setuptools<81 runners: - type: executable - type: nextflow From 61e00457eaeac305fc480bcbf73fa7af4aa59c5a Mon Sep 17 00:00:00 2001 From: Robrecht Cannoodt Date: Thu, 13 Aug 2026 10:55:48 +0200 Subject: [PATCH 02/11] fix harmonypy writing a transposed embedding harmonypy 2.0 returns Z_corr as cells x pcs, where it used to be the other way around, so the transpose we were doing now hands anndata a (50, 600) array for a 600 cell dataset and it refuses it. * drop the transpose * require harmonypy>=2 --- src/methods/harmonypy/config.vsh.yaml | 2 +- src/methods/harmonypy/script.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/methods/harmonypy/config.vsh.yaml b/src/methods/harmonypy/config.vsh.yaml index 14b02e73f..8b1a66265 100644 --- a/src/methods/harmonypy/config.vsh.yaml +++ b/src/methods/harmonypy/config.vsh.yaml @@ -26,7 +26,7 @@ engines: setup: - type: python pypi: - - harmonypy + - harmonypy>=2 runners: - type: executable - type: nextflow diff --git a/src/methods/harmonypy/script.py b/src/methods/harmonypy/script.py index ec8519538..b5a98cc85 100644 --- a/src/methods/harmonypy/script.py +++ b/src/methods/harmonypy/script.py @@ -38,7 +38,7 @@ obs=adata.obs[[]], var=adata.var[[]], obsm={ - "X_emb": out.Z_corr.transpose() + "X_emb": out.Z_corr }, shape=adata.shape, uns={ From 994d1c58bc62202fbbb7af3b54f76986b067bfd5 Mon Sep 17 00:00:00 2001 From: Robrecht Cannoodt Date: Thu, 13 Aug 2026 10:58:57 +0200 Subject: [PATCH 03/11] fix stacas erroring on a defunct GetAssayData argument STACAS 2.3.0 calls GetAssayData(slot = ), which SeuratObject made defunct in 5.0.0, so Run.STACAS dies while preparing the PCA embeddings. Upstream fixed this in carmonalab/STACAS@9a85ec4c but hasn't cut a release since, so track master until they do. --- src/methods/stacas/config.vsh.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/methods/stacas/config.vsh.yaml b/src/methods/stacas/config.vsh.yaml index 7e0c9735a..e7c8079dd 100644 --- a/src/methods/stacas/config.vsh.yaml +++ b/src/methods/stacas/config.vsh.yaml @@ -29,7 +29,7 @@ engines: image: openproblems/base_r:1 setup: - type: r - github: carmonalab/STACAS@2.3.0 + github: carmonalab/STACAS runners: - type: executable - type: nextflow From 9cd163135cb992c68a949f6e590565a85f4761e4 Mon Sep 17 00:00:00 2001 From: Robrecht Cannoodt Date: Thu, 13 Aug 2026 11:22:36 +0200 Subject: [PATCH 04/11] fix scalex failing to build numpy<1.24 and torch<2.1 contradict what scalex 1.0.4 asks for (numpy>=1.26.4, torch>=2.2.2), so pip fell back to building an ancient numpy from source and gave up on setuptools.build_meta. Dropping both gets it building, but scalex still calls np.Inf, which numpy 2 removed and upstream hasn't fixed, so it needs numpy<2 rather than no bound at all. --- src/methods/scalex/config.vsh.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/methods/scalex/config.vsh.yaml b/src/methods/scalex/config.vsh.yaml index 7761592f1..59c1aed46 100644 --- a/src/methods/scalex/config.vsh.yaml +++ b/src/methods/scalex/config.vsh.yaml @@ -28,8 +28,7 @@ engines: - type: python pypi: - scalex - - numpy<1.24 - - torch<2.1 + - numpy<2 runners: - type: executable - type: nextflow From a0de7399c28da8864f4f993debaea5e76fb4efc5 Mon Sep 17 00:00:00 2001 From: Robrecht Cannoodt Date: Thu, 13 Aug 2026 11:25:47 +0200 Subject: [PATCH 05/11] update changelog --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a515e17f..6205814fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,13 @@ * Update scPRINT to use latest stable version (PR #70) * Fix kbet dependencies to numpy<2 and scipy<=1.13 (PR #78). * Fix `render_readme` crashing on `comp_process_integration.yaml`'s absolute `__merge__` paths. +* Fix `metrics/kbet_pg` and `metrics/kbet_pg_label` failing to build: drop the zarr, pandas and numpy bounds pegasuspy + doesn't ask for, and pin `setuptools<81` so `pkg_resources` is still there. +* Fix `methods/harmonypy` writing a transposed embedding: harmonypy 2.0 returns `Z_corr` as cells x pcs. +* Fix `methods/stacas` erroring on `GetAssayData(slot = )`, defunct since SeuratObject 5.0.0. Tracks STACAS master + until upstream cuts a release containing the fix. +* Fix `methods/scalex` failing to build: its numpy and torch bounds contradicted what scalex asks for. Keeps + `numpy<2`, since scalex still calls `np.Inf`. * Split Scanorama into two methods/scores - Split Scanorama into embedding (integrate) and count-correction (correct) modes, instead of running both together. From c971679b2e0a1954e149ba5007fbc904fd779095 Mon Sep 17 00:00:00 2001 From: Robrecht Cannoodt Date: Thu, 13 Aug 2026 11:29:30 +0200 Subject: [PATCH 06/11] fix pyliger failing to build pyliger pulls in louvain, which has no wheel for python 3.12 and so builds igraph's C core from source. That needs cmake, which isn't in the base image, so the wheel build gave up. --- CHANGELOG.md | 1 + src/methods/pyliger/config.vsh.yaml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6205814fa..c8cd4ea62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ until upstream cuts a release containing the fix. * Fix `methods/scalex` failing to build: its numpy and torch bounds contradicted what scalex asks for. Keeps `numpy<2`, since scalex still calls `np.Inf`. +* Fix `methods/pyliger` failing to build: louvain has no python 3.12 wheel and needs cmake to build igraph from source. * Split Scanorama into two methods/scores - Split Scanorama into embedding (integrate) and count-correction (correct) modes, instead of running both together. diff --git a/src/methods/pyliger/config.vsh.yaml b/src/methods/pyliger/config.vsh.yaml index f891770f7..bfbf5933f 100644 --- a/src/methods/pyliger/config.vsh.yaml +++ b/src/methods/pyliger/config.vsh.yaml @@ -28,6 +28,8 @@ engines: - type: docker image: openproblems/base_python:1 setup: + - type: apt + packages: [cmake] - type: python pypi: - pyliger From c6ee38b134115fbd64cc6ccfe1b09c9aff894731 Mon Sep 17 00:00:00 2001 From: Robrecht Cannoodt Date: Thu, 13 Aug 2026 11:40:39 +0200 Subject: [PATCH 07/11] bump stale base images to :1 cellplm, condo, drvi and bras were still on :1.0.0, which carries an openproblems too old for the component tests in common now that those import check_config and run_and_check_output from openproblems.project rather than inlining them. Every other component was already on :1. --- CHANGELOG.md | 2 ++ src/methods/cellplm/config.vsh.yaml | 2 +- src/methods/condo/config.vsh.yaml | 2 +- src/methods/drvi/config.vsh.yaml | 2 +- src/metrics/bras/config.vsh.yaml | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c8cd4ea62..a3e78e280 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,8 @@ * Fix `methods/scalex` failing to build: its numpy and torch bounds contradicted what scalex asks for. Keeps `numpy<2`, since scalex still calls `np.Inf`. * Fix `methods/pyliger` failing to build: louvain has no python 3.12 wheel and needs cmake to build igraph from source. +* Bump `methods/cellplm`, `methods/condo`, `methods/drvi` and `metrics/bras` from base image `:1.0.0` to `:1`, so their + `openproblems` is new enough for the component tests in `common`. * Split Scanorama into two methods/scores - Split Scanorama into embedding (integrate) and count-correction (correct) modes, instead of running both together. diff --git a/src/methods/cellplm/config.vsh.yaml b/src/methods/cellplm/config.vsh.yaml index df8b9e713..6b929b50e 100755 --- a/src/methods/cellplm/config.vsh.yaml +++ b/src/methods/cellplm/config.vsh.yaml @@ -38,7 +38,7 @@ resources: engines: - type: docker - image: openproblems/base_pytorch_nvidia:1.0.0 + image: openproblems/base_pytorch_nvidia:1 setup: - type: python pypi: diff --git a/src/methods/condo/config.vsh.yaml b/src/methods/condo/config.vsh.yaml index 16594d1d1..bb354a1b1 100644 --- a/src/methods/condo/config.vsh.yaml +++ b/src/methods/condo/config.vsh.yaml @@ -100,7 +100,7 @@ resources: - path: /src/utils/read_anndata_partial.py engines: - type: docker - image: openproblems/base_pytorch_nvidia:1.0.0 + image: openproblems/base_pytorch_nvidia:1 setup: - type: python pypi: diff --git a/src/methods/drvi/config.vsh.yaml b/src/methods/drvi/config.vsh.yaml index aed323c22..06b03b1c1 100644 --- a/src/methods/drvi/config.vsh.yaml +++ b/src/methods/drvi/config.vsh.yaml @@ -30,7 +30,7 @@ resources: - path: /src/utils/read_anndata_partial.py engines: - type: docker - image: openproblems/base_pytorch_nvidia:1.0.0 + image: openproblems/base_pytorch_nvidia:1 setup: - type: python pypi: diff --git a/src/metrics/bras/config.vsh.yaml b/src/metrics/bras/config.vsh.yaml index d40139738..6b46988cf 100644 --- a/src/metrics/bras/config.vsh.yaml +++ b/src/metrics/bras/config.vsh.yaml @@ -27,7 +27,7 @@ resources: engines: - type: docker - image: openproblems/base_python:1.0.0 + image: openproblems/base_python:1 setup: - type: python pypi: From c0ab48e809bb9e11c77a2e50e587674c5d492a45 Mon Sep 17 00:00:00 2001 From: Robrecht Cannoodt Date: Thu, 13 Aug 2026 12:03:47 +0200 Subject: [PATCH 08/11] fix geneformer failing to build pip clones git+ urls with --filter=blob:none, and huggingface's git server no longer serves that properly: fatal: expected 'packfile' fatal: could not fetch ... from promisor remote So clone it ourselves without the filter and install from the checkout. It's a 3.6 MB clone -- the model files come from hf_hub_download at runtime, not from git. That gets it building, but geneformer then imports SpecialTokensMixin, which transformers dropped in 5, and the base image ships 5.15. --- src/methods/geneformer/config.vsh.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/methods/geneformer/config.vsh.yaml b/src/methods/geneformer/config.vsh.yaml index 35c9e69ae..c836cd716 100644 --- a/src/methods/geneformer/config.vsh.yaml +++ b/src/methods/geneformer/config.vsh.yaml @@ -54,7 +54,10 @@ engines: pip: - pyarrow<15.0.0a0,>=14.0.1 - huggingface_hub - - git+https://huggingface.co/ctheodoris/Geneformer.git + - type: docker + run: | + git clone --depth 1 https://huggingface.co/ctheodoris/Geneformer.git /opt/Geneformer && \ + pip install --no-cache-dir /opt/Geneformer "transformers<5" runners: - type: executable From 1dbcf0c618641db631783a6833421e49e2b01e4e Mon Sep 17 00:00:00 2001 From: Robrecht Cannoodt Date: Thu, 13 Aug 2026 12:16:56 +0200 Subject: [PATCH 09/11] fix cellplm failing to build cellplm pulls in louvain, which builds igraph's C core and so needs cmake. The pytorch base image ships a /usr/local/bin/cmake that is a python shim: #!/usr/bin/python3 from cmake import cmake /usr/bin/python3 can't see the pip-installed cmake module, so the shim always dies with ModuleNotFoundError, and it shadows anything we apt install. Install cmake from apt and drop the shim. --- src/methods/cellplm/config.vsh.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/methods/cellplm/config.vsh.yaml b/src/methods/cellplm/config.vsh.yaml index 6b929b50e..f903b9fba 100755 --- a/src/methods/cellplm/config.vsh.yaml +++ b/src/methods/cellplm/config.vsh.yaml @@ -40,6 +40,10 @@ engines: - type: docker image: openproblems/base_pytorch_nvidia:1 setup: + - type: apt + packages: [cmake] + - type: docker + run: rm -f /usr/local/bin/cmake - type: python pypi: - cellplm From bc561b21b522a6f79e04c900b0406b3226ddd803 Mon Sep 17 00:00:00 2001 From: Robrecht Cannoodt Date: Thu, 13 Aug 2026 12:16:56 +0200 Subject: [PATCH 10/11] bump drvi-py to 0.2.7 0.1.7 pins scvi-tools 1.0.4, which drags numpy back to 1.26 while the base image's zarr 3.3 wants numpy>=2, so the test died in zarr on numpy.dtypes.StringDType. Pinning zarr<3 instead only moved the problem to torch 2.3.1 missing torch.library.register_fake. Note this changes the drvi results, it's a two minor version jump. --- src/methods/drvi/config.vsh.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/methods/drvi/config.vsh.yaml b/src/methods/drvi/config.vsh.yaml index 06b03b1c1..2c2a26968 100644 --- a/src/methods/drvi/config.vsh.yaml +++ b/src/methods/drvi/config.vsh.yaml @@ -34,9 +34,7 @@ engines: setup: - type: python pypi: - - drvi-py==0.1.7 - - torch==2.3.0 - - torchvision==0.18.0 + - drvi-py==0.2.7 runners: - type: executable - type: nextflow From d870c774fde751ff757c61452645141bbc34f4ce Mon Sep 17 00:00:00 2001 From: Robrecht Cannoodt Date: Thu, 13 Aug 2026 12:57:11 +0200 Subject: [PATCH 11/11] fix scgpt_zeroshot and scgpt_finetuned failing to build flash-attn never built, and it turns out we don't need it: both scripts pass use_fast_transformer=False, so it was only ever slowing the image down. Dropping it uncovered three more pins with no python 3.12 wheels, each of which sent pip off to build from source: * numpy<1.24 -> numpy<2, resolves to 1.26.4 * torchtext==0.17.0 -> 0.17.2, the release that goes with torch 2.2 * transformers==4.33.2 -> 4.36.2, since 4.33 wants tokenizers<0.14 and building those needs a rust toolchain Left torch, scvi-tools, datasets and cell-gears where they were, they don't block the build. --- CHANGELOG.md | 7 +++++++ src/methods/scgpt_finetuned/config.vsh.yaml | 11 +---------- src/methods/scgpt_finetuned/script.py | 2 +- src/methods/scgpt_zeroshot/config.vsh.yaml | 11 +---------- 4 files changed, 10 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3e78e280..0b88e8d69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,13 @@ * Fix `methods/pyliger` failing to build: louvain has no python 3.12 wheel and needs cmake to build igraph from source. * Bump `methods/cellplm`, `methods/condo`, `methods/drvi` and `metrics/bras` from base image `:1.0.0` to `:1`, so their `openproblems` is new enough for the component tests in `common`. +* Fix `methods/geneformer` failing to build: pip's `--filter=blob:none` clone of the huggingface repo no longer works, + so clone it ourselves. Also needs `transformers<5`, which still has `SpecialTokensMixin`. +* Fix `methods/cellplm` failing to build: drop the pytorch base image's broken `/usr/local/bin/cmake` shim, which + shadowed the apt cmake that louvain needs. +* Fix `methods/scgpt_zeroshot` and `methods/scgpt_finetuned` failing to build: stop installing `flash-attn`. Both + scripts pass `use_fast_transformer=False`, so it was never used. Behind it sat three more pins with no python 3.12 + wheels, now `numpy<2`, `torchtext==0.17.2` and `transformers==4.36.2`. * Split Scanorama into two methods/scores - Split Scanorama into embedding (integrate) and count-correction (correct) modes, instead of running both together. diff --git a/src/methods/scgpt_finetuned/config.vsh.yaml b/src/methods/scgpt_finetuned/config.vsh.yaml index 2b949cbbe..631a0dfae 100644 --- a/src/methods/scgpt_finetuned/config.vsh.yaml +++ b/src/methods/scgpt_finetuned/config.vsh.yaml @@ -49,21 +49,12 @@ resources: engines: - type: docker image: openproblems/base_pytorch_nvidia:1 - # TODO: Try to find working installation of flash attention (flash-attn<1.0.5) setup: - #- type: python - # pypi: - # - gdown - # - scgpt # Install from PyPI to get dependencies - #- type: docker - # # Force re-installing from GitHub to get bug fixes - # run: pip install --upgrade --no-deps --force-reinstall git+https://github.com/bowang-lab/scGPT.git - type: docker run: | git clone https://github.com/bowang-lab/scGPT && \ pip install torch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 --index-url https://download.pytorch.org/whl/cu121 && \ - pip install "flash-attn<1.0.5" --no-build-isolation && \ - pip install ipykernel pandas scanpy numba "numpy<1.24" torchtext==0.17.0 scib "scvi-tools<1.0" datasets==2.14.5 transformers==4.33.2 wandb "cell-gears<0.0.3" torch_geometric pyarrow==15.0.0 gdown && \ + pip install ipykernel pandas scanpy numba "numpy<2" torchtext==0.17.2 scib "scvi-tools<1.0" datasets==2.14.5 transformers==4.36.2 wandb "cell-gears<0.0.3" torch_geometric pyarrow==15.0.0 gdown && \ cd scGPT && pip install -e . --no-deps runners: diff --git a/src/methods/scgpt_finetuned/script.py b/src/methods/scgpt_finetuned/script.py index 7123bd33d..dc9b3a40e 100644 --- a/src/methods/scgpt_finetuned/script.py +++ b/src/methods/scgpt_finetuned/script.py @@ -227,7 +227,7 @@ "dropout": 0.2, "schedule_ratio": 0.9, # Learning rate decay "log_interval": 100, - "fast_transformer": False, # TODO: Set True if flash-attn is installed + "fast_transformer": False, # requires flash-attn "pre_norm": False, "amp": True, # Automatic Mixed Precision } diff --git a/src/methods/scgpt_zeroshot/config.vsh.yaml b/src/methods/scgpt_zeroshot/config.vsh.yaml index 3ff6425cc..3faf0c5cc 100644 --- a/src/methods/scgpt_zeroshot/config.vsh.yaml +++ b/src/methods/scgpt_zeroshot/config.vsh.yaml @@ -51,21 +51,12 @@ resources: engines: - type: docker image: openproblems/base_pytorch_nvidia:1 - # TODO: Try to find working installation of flash attention (flash-attn<1.0.5) setup: - #- type: python - # pypi: - # - gdown - # - scgpt # Install from PyPI to get dependencies - #- type: docker - # # Force re-installing from GitHub to get bug fixes - # run: pip install --upgrade --no-deps --force-reinstall git+https://github.com/bowang-lab/scGPT.git - type: docker run: | git clone https://github.com/bowang-lab/scGPT && \ pip install torch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 --index-url https://download.pytorch.org/whl/cu121 && \ - pip install "flash-attn<1.0.5" --no-build-isolation && \ - pip install ipykernel pandas scanpy numba "numpy<1.24" torchtext==0.17.0 scib "scvi-tools<1.0" datasets==2.14.5 transformers==4.33.2 wandb "cell-gears<0.0.3" torch_geometric pyarrow==15.0.0 gdown && \ + pip install ipykernel pandas scanpy numba "numpy<2" torchtext==0.17.2 scib "scvi-tools<1.0" datasets==2.14.5 transformers==4.36.2 wandb "cell-gears<0.0.3" torch_geometric pyarrow==15.0.0 gdown && \ cd scGPT && pip install -e . --no-deps runners: