This repository was archived by the owner on Sep 24, 2026. It is now read-only.
Repository navigation
chore: bump workspace version to 0.20.0 - #562
Merged
Merged
Conversation
All 16 versioned workspace members, `pyscx/pyproject.toml` and `rscx/DESCRIPTION`; `tests/scx-integration-tests` stays at `0.0.0`. README's `scx-cli` download snippet follows. (ROADMAP.md no longer exists, so there is no date stamp to move.) 0.20.0 collects the merged PRs since 0.19.0 (#544-#561): - CSC sidecar series: one-pass bucketed CSC builder (#555); `build-csc` as an in-place, rollback-able append (#556); same-pass CSC build on ingest and carry-through on rewrite ops (#557); parallel CSC build and `csc="auto"` as the ingest default (#558); CSC dispatch for row-indexed transforms and row-filtered / gene-subset handles (#553, #554); CSC route coverage and the exact-nnz Wilcoxon kernel as the 1-vs-rest CSC default (#559) - Correctness: Leiden parallel local moving keeps decliners eligible (#544); five CPU-accelerator parity / convergence fixes (#548); GPU cuVS stream sync, reduction determinism, decoder bounds and VRAM accounting (#549); CLI destination-overwrite safety and MTX multimodal / streaming / integer integrity (#550); unscoped whole-matrix reads of a multimodal file refused (#551); dictionary (categorical) output from append / merge / merge --sort-by (#546) and `scx sort`'s obs spill path (#547) - Benchmarks and docs: four community analytical benchmarks (#552), laptop-test recapture (#560), README refresh (#545), docs split into per-topic directories (#561) Behaviour changes worth calling out in the release notes: - **`csc="auto"` is the ingest default** on every entry point and preset (`from_mudata` keeps `off`): files with `n_obs >= 50000` and `n_vars >= 5000` now get a CSC sidecar, costing ingest wall time and +42-71 % on disk. `--csc off` / `csc="off"` opts out (#558). - **Rewrite ops carry the CSC sidecar by default** (`compact`, `merge`, `optimize`, `sort`, `subset`), rebuilt from the output's own shards; `--csc carry|always|off`. `--rebuild-csc` / `rebuild_csc=True` are deprecated aliases for `always` (#557). - **`scx build-csc` appends in place** rather than rewriting the file, and `scx rollback` removes the sidecar (#556). - **Ten CLI subcommands no longer silently overwrite an existing destination**; `--force` is required (convert, merge, subset, query --output, upgrade, cloud-optimize, explode, pack, pull; compact / optimize / sort migrated onto the same guard) and is refused where nothing is written (#550). - **MTX**: a declared-`integer` MTX with a value past 2^24, a non-integral value or `nan`/`inf` is refused on ingest (`--allow-lossy` restores the old behaviour); multimodal MTX export requires a modality (`pyscx.to_mtx` gains `modality=`); export streams one shard at a time (#550). - **An unscoped whole-matrix read of a multimodal file raises** `MultimodalRequiresModality` instead of folding every modality into one `n_obs x n_modalities`-row answer — `to_anndata()`, `to_memory()`, `read_all_csr_shards*`, `scx pull --filter` (#551). - **Numerical changes**: UMAP init scale and `random_init` now match umap-learn, the kNN sigma search, and NB-GLM dispersion shrinkage (the `above_min_disp` residual filter always runs; new `disp_outlier_sd=2.0` carve-out, `None` disables only the carve-out) (#548); parallel Leiden labels change (#544). - **Wilcoxon on the CPU CSC route** defaults to the exact-nnz kernel (route id `cpu_csc_nnz`); `SCX_ACCEL_WILCOXON_NNZ=0` restores densify (`cpu_csc`), and `reference=` / `rankby_abs=True` still use densify (#559). - **Categorical obs columns** keep their declared categories, unused levels and `ordered` bit through append / merge / sort (#546, #547). No benchmark recapture for this release. Pre-release gate on this tree: `cargo fmt --check`; `cargo clippy --workspace --exclude rscx --all-targets -D warnings`; `cargo test --workspace --exclude rscx` (4,220 passed, 0 failed); `cargo test -p scx-convert --features hdf5` (474 passed); `cargo test -p scx-cli --features hdf5 -- --test-threads=1` (253 passed); `maturin develop --release` + `pytest tests/` (3,247 passed, 140 skipped, 2 xfailed; `pyscx.__version__ == "0.20.0"`). Not run: rscx tests, `--features cloud`, GPU pytest, fuzzing, benchmarks. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RwRKstgr4TNkXhLhkQwmjA
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
All 16 versioned workspace members,
pyscx/pyproject.tomlandrscx/DESCRIPTION;tests/scx-integration-testsstays at0.0.0. README'sscx-clidownload snippet follows. (ROADMAP.md no longer exists, so there isno date stamp to move.)
0.20.0 collects the merged PRs since 0.19.0 (#544-#561):
build-cscas anin-place, rollback-able append (ops: build-csc appends its CSC sidecar in place instead of rewriting the file #556); same-pass CSC build on ingest and
carry-through on rewrite ops (ops+convert: build the CSC sidecar in the same pass, and carry it through rewrite ops by default #557); parallel CSC build and
csc="auto"asthe ingest default (sparse+format-io+engine: parallel CSC build, and csc="auto" as the ingest default #558); CSC dispatch for row-indexed transforms and
row-filtered / gene-subset handles (accel: let CSC dispatch serve row-indexed transforms #553, accel: serve CSC dispatch on a row-filtered or gene-subset handle #554); CSC route coverage and the
exact-nnz Wilcoxon kernel as the 1-vs-rest CSC default (accel: promote exact-nnz Wilcoxon to the CSC default, and fix the two CSC routes that lost for a reason #559)
five CPU-accelerator parity / convergence fixes (accel: five CPU-accelerator numerical-parity and convergence fixes (review §7.3, §7.10, §7.11, §7.15, §7.17) #548); GPU cuVS stream sync,
reduction determinism, decoder bounds and VRAM accounting (gpu: cuVS stream synchronization, reduction determinism, decoder bounds, and VRAM accounting #549); CLI
destination-overwrite safety and MTX multimodal / streaming / integer
integrity (cli+mtx: destination overwrite safety, and MTX multimodal / streaming / integer integrity #550); unscoped whole-matrix reads of a multimodal file refused
(format: refuse an unscoped whole-matrix read of a multimodal file, and name the CSR structural checker #551); dictionary (categorical) output from append / merge / merge
--sort-by (ops: dictionary output from append, merge and merge --sort-by #546) and
scx sort's obs spill path (ops: dictionary output from scx sort's obs spill path #547)recapture (bench: recapture the laptop-test pipeline on the CSC DE route #560), README refresh (docs: refresh the README feature surface, and correct two stale build-csc claims #545), docs split into per-topic
directories (docs: split scanpy/api/performance into per-topic directories, and clean up outdated docs #561)
Behaviour changes worth calling out in the release notes:
csc="auto"is the ingest default on every entry point and preset(
from_mudatakeepsoff): files withn_obs >= 50000andn_vars >= 5000now get a CSC sidecar, costing ingest wall time and+42-71 % on disk.
--csc off/csc="off"opts out (sparse+format-io+engine: parallel CSC build, and csc="auto" as the ingest default #558).compact,merge,optimize,sort,subset), rebuilt from the output's own shards;--csc carry|always|off.--rebuild-csc/rebuild_csc=Truearedeprecated aliases for
always(ops+convert: build the CSC sidecar in the same pass, and carry it through rewrite ops by default #557).scx build-cscappends in place rather than rewriting the file, andscx rollbackremoves the sidecar (ops: build-csc appends its CSC sidecar in place instead of rewriting the file #556).--forceis required (convert, merge, subset, query --output, upgrade,cloud-optimize, explode, pack, pull; compact / optimize / sort migrated onto
the same guard) and is refused where nothing is written (cli+mtx: destination overwrite safety, and MTX multimodal / streaming / integer integrity #550).
integerMTX with a value past 2^24, a non-integralvalue or
nan/infis refused on ingest (--allow-lossyrestores the oldbehaviour); multimodal MTX export requires a modality (
pyscx.to_mtxgainsmodality=); export streams one shard at a time (cli+mtx: destination overwrite safety, and MTX multimodal / streaming / integer integrity #550).MultimodalRequiresModalityinstead of folding every modality into onen_obs x n_modalities-row answer —to_anndata(),to_memory(),read_all_csr_shards*,scx pull --filter(format: refuse an unscoped whole-matrix read of a multimodal file, and name the CSR structural checker #551).random_initnow matchumap-learn, the kNN sigma search, and NB-GLM dispersion shrinkage (the
above_min_dispresidual filter always runs; newdisp_outlier_sd=2.0carve-out,
Nonedisables only the carve-out) (accel: five CPU-accelerator numerical-parity and convergence fixes (review §7.3, §7.10, §7.11, §7.15, §7.17) #548); parallel Leidenlabels change (accel: mark every evaluated node stable in Leiden's parallel local moving #544).
cpu_csc_nnz);SCX_ACCEL_WILCOXON_NNZ=0restores densify (cpu_csc), andreference=/rankby_abs=Truestill use densify (accel: promote exact-nnz Wilcoxon to the CSC default, and fix the two CSC routes that lost for a reason #559).orderedbit through append / merge / sort (ops: dictionary output from append, merge and merge --sort-by #546, ops: dictionary output from scx sort's obs spill path #547).No benchmark recapture for this release.
Pre-release gate on this tree:
cargo fmt --check;cargo clippy --workspace --exclude rscx --all-targets -D warnings;cargo test --workspace --exclude rscx(4,220 passed, 0 failed);cargo test -p scx-convert --features hdf5(474 passed);
cargo test -p scx-cli --features hdf5 -- --test-threads=1(253passed);
maturin develop --release+pytest tests/(3,247 passed, 140skipped, 2 xfailed;
pyscx.__version__ == "0.20.0"). Not run: rscx tests,--features cloud, GPU pytest, fuzzing, benchmarks.🤖 Generated with Claude Code
https://claude.ai/code/session_01RwRKstgr4TNkXhLhkQwmjA