Documentation-only release. No library code changed — the installable shanuz package remains 0.2.0 on PyPI and is byte-identical to the 0.2.0 wheel. This tags a batch of tutorial improvements only.
What changed
Every tutorial now presents a genuine left-R (Seurat) / right-Python (Shanuz) side-by-side comparison. Two tutorials were previously pure ports whose "R (Seurat)" column held only code (no R figures), which read as an "R-only" page; others had one-sided or orphaned figures.
New R reproduction scripts
Each mirrors its Python tutorial's exact pipeline and writes r_* figures titled "R Seurat – …":
| Script | Tutorial |
|---|---|
tutorials/pbmc8k_subclustering_verify.R |
Advanced PBMC 8k clustering + subclustering |
tutorials/cbmc_citeseq_verify.R |
Multimodal CITE-seq (RNA + ADT) |
tutorials/pbmc3k_verify.R |
PBMC 3k (the RidgePlot the vignette omits) |
tutorials/pbmc3k_sctransform_verify.R |
SCTransform (cell-type UMAP + SCT-vs-standard) |
Balance & cleanup
- 23 new R Seurat figures across the advanced, multimodal, sctransform, and pbmc3k tutorials.
- All 6 tutorials verified two-sided — R-side figure count equals Shanuz count everywhere.
- Surfaced two orphaned xenium figures (QC violin, clusters-in-space) and removed redundant duplicate QC-scatter panels. Zero orphaned figures repo-wide.
Notable finding
Seurat's CLR normalization (margin=2) has a different absolute scale than Shanuz's, so the CITE-seq annotation thresholds are re-calibrated to Seurat's per-cluster CLR values (documented in cbmc_citeseq_verify.R); both resolve the same 9 lineages.
Full changelog: v0.2.0...tutorials-2026.07.06