Skip to content
This repository was archived by the owner on Sep 24, 2026. It is now read-only.

Releases: ArcInstitute/scx

scx-cli-v0.20.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 04:55
4a4591a

What's Changed

  • accel: mark every evaluated node stable in Leiden's parallel local moving by @nick-youngblut in #544
  • docs: refresh the README feature surface, and correct two stale build-csc claims by @nick-youngblut in #545
  • ops: dictionary output from append, merge and merge --sort-by by @nick-youngblut in #546
  • ops: dictionary output from scx sort's obs spill path by @nick-youngblut in #547
  • accel: five CPU-accelerator numerical-parity and convergence fixes (review §7.3, §7.10, §7.11, §7.15, §7.17) by @nick-youngblut in #548
  • gpu: cuVS stream synchronization, reduction determinism, decoder bounds, and VRAM accounting by @nick-youngblut in #549
  • cli+mtx: destination overwrite safety, and MTX multimodal / streaming / integer integrity by @nick-youngblut in #550
  • format: refuse an unscoped whole-matrix read of a multimodal file, and name the CSR structural checker by @nick-youngblut in #551
  • bench: four community analytical benchmarks, gated and documented by @nick-youngblut in #552
  • accel: let CSC dispatch serve row-indexed transforms by @nick-youngblut in #553
  • accel: serve CSC dispatch on a row-filtered or gene-subset handle by @nick-youngblut in #554
  • sparse: one-pass CSC sidecar builder, replacing the per-chunk transpose by @nick-youngblut in #555
  • ops: build-csc appends its CSC sidecar in place instead of rewriting the file by @nick-youngblut in #556
  • ops+convert: build the CSC sidecar in the same pass, and carry it through rewrite ops by default by @nick-youngblut in #557
  • sparse+format-io+engine: parallel CSC build, and csc="auto" as the ingest default by @nick-youngblut in #558
  • accel: promote exact-nnz Wilcoxon to the CSC default, and fix the two CSC routes that lost for a reason by @nick-youngblut in #559
  • bench: recapture the laptop-test pipeline on the CSC DE route by @nick-youngblut in #560
  • docs: split scanpy/api/performance into per-topic directories, and clean up outdated docs by @nick-youngblut in #561
  • chore: bump workspace version to 0.20.0 by @nick-youngblut in #562

Full Changelog: pyscx-v0.19.0...scx-cli-v0.20.0

pyscx-v0.20.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 04:54
4a4591a

What's Changed

  • accel: mark every evaluated node stable in Leiden's parallel local moving by @nick-youngblut in #544
  • docs: refresh the README feature surface, and correct two stale build-csc claims by @nick-youngblut in #545
  • ops: dictionary output from append, merge and merge --sort-by by @nick-youngblut in #546
  • ops: dictionary output from scx sort's obs spill path by @nick-youngblut in #547
  • accel: five CPU-accelerator numerical-parity and convergence fixes (review §7.3, §7.10, §7.11, §7.15, §7.17) by @nick-youngblut in #548
  • gpu: cuVS stream synchronization, reduction determinism, decoder bounds, and VRAM accounting by @nick-youngblut in #549
  • cli+mtx: destination overwrite safety, and MTX multimodal / streaming / integer integrity by @nick-youngblut in #550
  • format: refuse an unscoped whole-matrix read of a multimodal file, and name the CSR structural checker by @nick-youngblut in #551
  • bench: four community analytical benchmarks, gated and documented by @nick-youngblut in #552
  • accel: let CSC dispatch serve row-indexed transforms by @nick-youngblut in #553
  • accel: serve CSC dispatch on a row-filtered or gene-subset handle by @nick-youngblut in #554
  • sparse: one-pass CSC sidecar builder, replacing the per-chunk transpose by @nick-youngblut in #555
  • ops: build-csc appends its CSC sidecar in place instead of rewriting the file by @nick-youngblut in #556
  • ops+convert: build the CSC sidecar in the same pass, and carry it through rewrite ops by default by @nick-youngblut in #557
  • sparse+format-io+engine: parallel CSC build, and csc="auto" as the ingest default by @nick-youngblut in #558
  • accel: promote exact-nnz Wilcoxon to the CSC default, and fix the two CSC routes that lost for a reason by @nick-youngblut in #559
  • bench: recapture the laptop-test pipeline on the CSC DE route by @nick-youngblut in #560
  • docs: split scanpy/api/performance into per-topic directories, and clean up outdated docs by @nick-youngblut in #561
  • chore: bump workspace version to 0.20.0 by @nick-youngblut in #562

Full Changelog: pyscx-v0.19.0...pyscx-v0.20.0

scx-cli-v0.19.0

Choose a tag to compare

@github-actions github-actions released this 18 Sep 04:37
890813d

What's Changed

  • loader: tokenisation kernel set v1 (rank, bin, sample, crop) + collate contract v3 by @nick-youngblut in #538
  • loader+format-io: neighbourhood plan builder (graph and coordinate driven) by @nick-youngblut in #539
  • ops+format-io: sort and compact emit sharded obsm/varm/obsp/varp by @nick-youngblut in #541
  • loader+format-io: reuse-signal row-group admission and chunked parallel group decode by @nick-youngblut in #540
  • loader+format-io: multi-set batch executor for the cell-set gather by @nick-youngblut in #542
  • chore: bump workspace version to 0.19.0 by @nick-youngblut in #543

Full Changelog: pyscx-v0.18.1...scx-cli-v0.19.0

pyscx-v0.19.0

Choose a tag to compare

@github-actions github-actions released this 18 Sep 04:40
890813d

What's Changed

  • loader: tokenisation kernel set v1 (rank, bin, sample, crop) + collate contract v3 by @nick-youngblut in #538
  • loader+format-io: neighbourhood plan builder (graph and coordinate driven) by @nick-youngblut in #539
  • ops+format-io: sort and compact emit sharded obsm/varm/obsp/varp by @nick-youngblut in #541
  • loader+format-io: reuse-signal row-group admission and chunked parallel group decode by @nick-youngblut in #540
  • loader+format-io: multi-set batch executor for the cell-set gather by @nick-youngblut in #542
  • chore: bump workspace version to 0.19.0 by @nick-youngblut in #543

Full Changelog: pyscx-v0.18.1...pyscx-v0.19.0

scx-cli-v0.18.1

Choose a tag to compare

@github-actions github-actions released this 15 Sep 01:14
e8d1f9a

What's Changed

  • loader: move the multimodal batch into numpy; one shard-index ordering rule (OPT-LOADER-1, -2) by @nick-youngblut in #521
  • ops: build-csc decodes each CSR shard once (OPT-OPS-1) by @nick-youngblut in #522
  • engine: one shard list per pipeline, one gene-set sort per query, one copy per shard (OPT-ENGINE-1, -9) by @nick-youngblut in #523
  • format-io: encode a shard's codec candidates and row groups in parallel (OPT-FORMATIO-3) by @nick-youngblut in #524
  • convert+ops: charge the framed encode transient, so a memory budget is a bound (OPT-CONVERT-10, OPT-OPS-7) by @nick-youngblut in #525
  • ops: batch the value encode, and encode optimize's shards in parallel (OPT-OPS-6, OPT-OPS-4) by @nick-youngblut in #526
  • format: an ObspCsrShard's minor extent is n_obs, not n_vars (OPT-FORMATIO-4) by @nick-youngblut in #527
  • format-io+loader: retain decoded row groups in the shard LRU (OPT-FORMATIO-1) by @nick-youngblut in #528
  • accel: partition the pseudobulk scatter across the pool, bit-identical to serial (OPT-ACCEL-4) by @nick-youngblut in #529
  • convert: stream --from 10x, by default (OPT-CONVERT-9) by @nick-youngblut in #530
  • gpu: drop two dead tie launches, the per-shard indptr drain, and a host round-trip (OPT-GPU-1, -4, -10, -13) by @nick-youngblut in #531
  • docs: qualify the CSC sidecar's "GPU-fast" claim for rank_genes_groups by @nick-youngblut in #533
  • pyscx: make the eager-assembly warning size something, and skip scipy's int64 upcast by @nick-youngblut in #534
  • bench: per-regime data-wait gate and scatter-route re-measure by @nick-youngblut in #532
  • loader: pre-size the cell-set gather, per-set crop mask, gather(plan), GIL release, batch charge by @nick-youngblut in #535
  • loader: bounded reader registry for large manifests (W8) by @nick-youngblut in #536
  • chore: bump workspace version to 0.18.1 by @nick-youngblut in #537

Full Changelog: pyscx-v0.18.0...scx-cli-v0.18.1

pyscx-v0.18.1

Choose a tag to compare

@github-actions github-actions released this 15 Sep 01:15
e8d1f9a

What's Changed

  • loader: move the multimodal batch into numpy; one shard-index ordering rule (OPT-LOADER-1, -2) by @nick-youngblut in #521
  • ops: build-csc decodes each CSR shard once (OPT-OPS-1) by @nick-youngblut in #522
  • engine: one shard list per pipeline, one gene-set sort per query, one copy per shard (OPT-ENGINE-1, -9) by @nick-youngblut in #523
  • format-io: encode a shard's codec candidates and row groups in parallel (OPT-FORMATIO-3) by @nick-youngblut in #524
  • convert+ops: charge the framed encode transient, so a memory budget is a bound (OPT-CONVERT-10, OPT-OPS-7) by @nick-youngblut in #525
  • ops: batch the value encode, and encode optimize's shards in parallel (OPT-OPS-6, OPT-OPS-4) by @nick-youngblut in #526
  • format: an ObspCsrShard's minor extent is n_obs, not n_vars (OPT-FORMATIO-4) by @nick-youngblut in #527
  • format-io+loader: retain decoded row groups in the shard LRU (OPT-FORMATIO-1) by @nick-youngblut in #528
  • accel: partition the pseudobulk scatter across the pool, bit-identical to serial (OPT-ACCEL-4) by @nick-youngblut in #529
  • convert: stream --from 10x, by default (OPT-CONVERT-9) by @nick-youngblut in #530
  • gpu: drop two dead tie launches, the per-shard indptr drain, and a host round-trip (OPT-GPU-1, -4, -10, -13) by @nick-youngblut in #531
  • docs: qualify the CSC sidecar's "GPU-fast" claim for rank_genes_groups by @nick-youngblut in #533
  • pyscx: make the eager-assembly warning size something, and skip scipy's int64 upcast by @nick-youngblut in #534
  • bench: per-regime data-wait gate and scatter-route re-measure by @nick-youngblut in #532
  • loader: pre-size the cell-set gather, per-set crop mask, gather(plan), GIL release, batch charge by @nick-youngblut in #535
  • loader: bounded reader registry for large manifests (W8) by @nick-youngblut in #536
  • chore: bump workspace version to 0.18.1 by @nick-youngblut in #537

Full Changelog: pyscx-v0.18.0...pyscx-v0.18.1

scx-cli-v0.18.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 22:18
cedddca

What's Changed

  • convert: stream /raw on h5ad export; read shards by catalog entry (OPT-CONVERT-1, -3) by @nick-youngblut in #510
  • convert: one traversal for HDF5 string ingest, straight into a pre-sized Arrow builder (OPT-CONVERT-2) by @nick-youngblut in #511
  • pyscx: to_anndata obsp= / varp= / varm= slot filters and a raw= opt-out (PR H, REC-8) by @nick-youngblut in #512
  • pyscx: eager to_anndata(var_names=) projects while assembling (PR I, REC-9) by @nick-youngblut in #513
  • pyscx: one QC kernel for every X, plus score_genes(ctrl_genes=) (PR J, REC-11) by @nick-youngblut in #514
  • pyscx: accel docs signature guard, DE backed layer=, and shard-skipping under a row projection (PR J deferred items) by @nick-youngblut in #515
  • accel: the streaming DE kernels take the shared prefetch drivers — row-projection skip + decode-prefetch by @nick-youngblut in #516
  • ops+pyscx+cli+rscx: attach_var_columns — key-joined per-gene columns, in place (PR K, REC-13) by @nick-youngblut in #517
  • engine+pyscx: decode a query's X at the requested dtype — collect(data_dtype=) (REC-15) by @nick-youngblut in #518
  • format+pyscx: the eager-layers decode-loss guard folds over the selected layers by @nick-youngblut in #519
  • chore: bump workspace version to 0.18.0 by @nick-youngblut in #520

Full Changelog: pyscx-v0.17.0...scx-cli-v0.18.0

pyscx-v0.18.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 22:21
cedddca

What's Changed

  • convert: stream /raw on h5ad export; read shards by catalog entry (OPT-CONVERT-1, -3) by @nick-youngblut in #510
  • convert: one traversal for HDF5 string ingest, straight into a pre-sized Arrow builder (OPT-CONVERT-2) by @nick-youngblut in #511
  • pyscx: to_anndata obsp= / varp= / varm= slot filters and a raw= opt-out (PR H, REC-8) by @nick-youngblut in #512
  • pyscx: eager to_anndata(var_names=) projects while assembling (PR I, REC-9) by @nick-youngblut in #513
  • pyscx: one QC kernel for every X, plus score_genes(ctrl_genes=) (PR J, REC-11) by @nick-youngblut in #514
  • pyscx: accel docs signature guard, DE backed layer=, and shard-skipping under a row projection (PR J deferred items) by @nick-youngblut in #515
  • accel: the streaming DE kernels take the shared prefetch drivers — row-projection skip + decode-prefetch by @nick-youngblut in #516
  • ops+pyscx+cli+rscx: attach_var_columns — key-joined per-gene columns, in place (PR K, REC-13) by @nick-youngblut in #517
  • engine+pyscx: decode a query's X at the requested dtype — collect(data_dtype=) (REC-15) by @nick-youngblut in #518
  • format+pyscx: the eager-layers decode-loss guard folds over the selected layers by @nick-youngblut in #519
  • chore: bump workspace version to 0.18.0 by @nick-youngblut in #520

Full Changelog: pyscx-v0.17.0...pyscx-v0.18.0

scx-cli-v0.17.0

Choose a tag to compare

@github-actions github-actions released this 06 Sep 01:26
830c33e

What's Changed

  • test: commit the op output-identity A/B harness (scx-testkit, scx-loader) by @nick-youngblut in #495
  • bench: make the peak-RSS metrics real, and give them a fixture worth measuring by @nick-youngblut in #496
  • bench: benchmark the three SCX ops that had no instrument at all by @nick-youngblut in #497
  • bench: instrument the five SCX ops with no timing, and un-break 16 suppressed floors by @nick-youngblut in #498
  • bench: recapture and promote the regression baseline (v0.16.0-opt-instruments) by @nick-youngblut in #499
  • uns: exact float round-trip, non-finite scalars, several uns keys per attach, update_uns (PR A) by @nick-youngblut in #500
  • ops: categoricals survive every in-place obs writer (PR B, REC-3) by @nick-youngblut in #501
  • reader: bounded row gather — handle[rows] and gather_rows_sparse assemble once (PR C, REC-1) by @nick-youngblut in #502
  • pyscx: column selectors project without a decode; array raises; stored_dtype, cache_shards, Experiment encoding getters (PR D, REC-7) by @nick-youngblut in #503
  • pyscx: zero-row / zero-var files write and read; empty matrices get no CSC or index; merge / append / metadata rewrites tolerate 0 rows (PR E, REC-5) by @nick-youngblut in #504
  • pyscx: read_obs() / obs_categorical() return logical rows by default, logical=False for physical; positional attach and modify_metadata(obs=) accept either row space (PR F, REC-6 — breaking, 0.17) by @nick-youngblut in #505
  • accel: rank_genes_groups(pts=, groups=, corr_method=) + pct_nz_* in rank_genes_groups_df; pdex_ref(groups=); pseudobulk groupby str|list (PR G, REC-10) by @nick-youngblut in #506
  • uns: pandas.DataFrame envelope — rank_genes_groups(pts=) survives a write/read cycle, both h5ad directions (X6) by @nick-youngblut in #507
  • accel: singlet-group guard on the default path, and scanpy's "rest" keeps unlabelled cells (PR M+N, X8/X9 — numerical change, 0.17) by @nick-youngblut in #508
  • chore: bump workspace version to 0.17.0 by @nick-youngblut in #509

Full Changelog: pyscx-v0.16.0...scx-cli-v0.17.0

pyscx-v0.17.0

Choose a tag to compare

@github-actions github-actions released this 06 Sep 01:29
830c33e

What's Changed

  • test: commit the op output-identity A/B harness (scx-testkit, scx-loader) by @nick-youngblut in #495
  • bench: make the peak-RSS metrics real, and give them a fixture worth measuring by @nick-youngblut in #496
  • bench: benchmark the three SCX ops that had no instrument at all by @nick-youngblut in #497
  • bench: instrument the five SCX ops with no timing, and un-break 16 suppressed floors by @nick-youngblut in #498
  • bench: recapture and promote the regression baseline (v0.16.0-opt-instruments) by @nick-youngblut in #499
  • uns: exact float round-trip, non-finite scalars, several uns keys per attach, update_uns (PR A) by @nick-youngblut in #500
  • ops: categoricals survive every in-place obs writer (PR B, REC-3) by @nick-youngblut in #501
  • reader: bounded row gather — handle[rows] and gather_rows_sparse assemble once (PR C, REC-1) by @nick-youngblut in #502
  • pyscx: column selectors project without a decode; array raises; stored_dtype, cache_shards, Experiment encoding getters (PR D, REC-7) by @nick-youngblut in #503
  • pyscx: zero-row / zero-var files write and read; empty matrices get no CSC or index; merge / append / metadata rewrites tolerate 0 rows (PR E, REC-5) by @nick-youngblut in #504
  • pyscx: read_obs() / obs_categorical() return logical rows by default, logical=False for physical; positional attach and modify_metadata(obs=) accept either row space (PR F, REC-6 — breaking, 0.17) by @nick-youngblut in #505
  • accel: rank_genes_groups(pts=, groups=, corr_method=) + pct_nz_* in rank_genes_groups_df; pdex_ref(groups=); pseudobulk groupby str|list (PR G, REC-10) by @nick-youngblut in #506
  • uns: pandas.DataFrame envelope — rank_genes_groups(pts=) survives a write/read cycle, both h5ad directions (X6) by @nick-youngblut in #507
  • accel: singlet-group guard on the default path, and scanpy's "rest" keeps unlabelled cells (PR M+N, X8/X9 — numerical change, 0.17) by @nick-youngblut in #508
  • chore: bump workspace version to 0.17.0 by @nick-youngblut in #509

Full Changelog: pyscx-v0.16.0...pyscx-v0.17.0