Changelog#
Version 0.2.1#
Shrinkage parity fix: cross-gene
overdispersion_shrinkagenow usesgene_means = rowMeans(Mu)from the first-pass beta with rough dispersion (Rglm_gp), not the post-OD intercept. Intercept med |Δ| vs R on GSE288946 step-1 drops from ~10-4 to ~10-9 (100% within 0.01).Evaluation docs: benchmark tables and Evaluation narrative updated to reflect shrinkage-aligned intercept parity.
Version 0.2.0#
OpenMP parallel fitting: per-gene C++ loop uses
schedule(dynamic, 16); ~**7×** faster than R on GSE288946 SCT step-1 (2000×2000, 8 threads) with unchangedtheta/Interceptparity.Native CSR sparse path: scipy CSR matrices are fitted in place (no
toarray()); implicit zero cells still contribute to the likelihood.sort_indices()is applied so gene/cell slicing preserves R parity.Evaluation documentation: paper-style Evaluation page with synthetic and real-data benchmark tables (regenerate via
python scripts/run_all_benchmarks.py).Release automation: GitHub Actions
auto-release.ymlpublishes to PyPI onv*tags; Read the Docs builds from.readthedocs.yaml.Fix RTD build: set Sphinx
versioninconf.py(inventory dump).
Version 0.1.0#
Initial release: C++ reimplementation of
sctransform::fit_glmGamPoi_offsetwith Cox–Reid overdispersion MLE,allow_inf_theta, cross-gene shrinkage, and trackcell-compatiblefit_offset_modelAPI.