From 6740ced0f4fa09c8c8effc8c2cf880240515b28b Mon Sep 17 00:00:00 2001 From: Aljes Date: Mon, 19 Oct 2026 10:45:10 +0100 Subject: [PATCH 1/2] Release 0.10.0 Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- uv.lock | 2 +- 3 files changed, 54 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e2819f..83eb545 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,58 @@ Notable changes to `adata-cli`. Versions are `MAJOR.MINOR.PATCH`; tags carry no `v` prefix. +## 0.10.0 + +Adds Parse Biosciences split-pipe output to `adata convert`, read in two +streaming passes like the MTX folders of 0.8.0. Features are now named by +gene id by default, for every format: ids are unique where symbols repeat, +so the output no longer needs `--make-unique`. + +### Added + +- **`adata convert` reads Parse Biosciences split-pipe output** + ([#30](https://github.com/cellgeni/adata-cli/issues/30)). A run folder, a + sample folder or a `DGE_filtered`/`DGE_unfiltered` folder is recognised + whatever its name: + - `count_matrix.mtx` (cells x genes) becomes X through the streaming MTX + reader; integer counts stay integers; + - `cell_metadata.csv` becomes obs, indexed by `bc_wells`, each column + typed as pandas reads it and stored as anndata writes it; + - `all_genes.csv` becomes var, with `gene_symbols` and `genome`; + - `--sample NAME` reads one sample, `--all-samples` writes one output per + sample, and `--unfiltered` reads every barcode; + - `--genome G` keeps G's genes and the cells split-pipe called as G. + + Checked against Parse's own scanpy recipe in CI, and on a real split-pipe + v1.6.1 run: X, obs and var all match, for 29,588 cells and for the + 431,061 barcodes of the unfiltered folder, at a peak of about 200 MB. + +- **A streaming CSV table reader** ([#55](https://github.com/cellgeni/adata-cli/pull/55)), + `formats/table.py`: two passes over the file, columns typed as + `pd.read_csv` types them, the `obs` dataframe written a block of rows at + a time. It reads Parse's cell metadata, and is there for #25's delimited + tables. + +### Changed + +- **Features are named by gene id by default** + ([#54](https://github.com/cellgeni/adata-cli/pull/54)). This changes what + `adata convert` writes from 10x HDF5, MTX folders, CellBender and Parse: + var names are the gene ids, and the symbols are in `var["gene_symbols"]`, + the layout `scanpy.read_10x_mtx(var_names="gene_ids")` gives. Symbols + repeat (Cell Ranger's GRCh38-2020-A reference repeats 10), so naming by + them needed `--make-unique`. `--var-names gene_symbols` gives the old + names, as scanpy and CellBender's loaders give them. A probe-level (Flex) + matrix still repeats gene ids, and still warns. + +### Fixed + +- **Categories are ordered as anndata orders them** + ([#55](https://github.com/cellgeni/adata-cli/pull/55)). anndata sorts the + categories it makes from strings naturally (`A2` before `A10`); `convert` + sorted them plainly, so a categorical var column holding numbers in its + values came out in a different order from scanpy's. + ## 0.9.0 Adds CellBender's `remove-background` output to `adata convert`. The diff --git a/pyproject.toml b/pyproject.toml index af84aaf..e893079 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ # so the distribution is published as `pyadata-cli`. The import package # and the command are both still `adata`. name = "pyadata-cli" -version = "0.9.0" +version = "0.10.0" description = "Streaming CLI for exploring and editing large AnnData .h5ad and .zarr stores" readme = "README.md" requires-python = ">=3.12" diff --git a/uv.lock b/uv.lock index 0eba284..ca2948b 100644 --- a/uv.lock +++ b/uv.lock @@ -486,7 +486,7 @@ wheels = [ [[package]] name = "pyadata-cli" -version = "0.9.0" +version = "0.10.0" source = { editable = "." } dependencies = [ { name = "h5py" }, From 93a48c7a2c1b6ae5b72009256456f88f03451aae Mon Sep 17 00:00:00 2001 From: Aljes Date: Mon, 19 Oct 2026 11:16:20 +0100 Subject: [PATCH 2/2] CHANGELOG: Flex matrices still repeat gene ids, as found in review Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 83eb545..14e2eb6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,8 @@ Notable changes to `adata-cli`. Versions are `MAJOR.MINOR.PATCH`; tags carry no Adds Parse Biosciences split-pipe output to `adata convert`, read in two streaming passes like the MTX folders of 0.8.0. Features are now named by gene id by default, for every format: ids are unique where symbols repeat, -so the output no longer needs `--make-unique`. +so a gene-level matrix no longer needs `--make-unique` (a probe-level Flex +matrix still does). ### Added