v0.3.0
Highlights
- New
cuda_nativeridge backend — ctypes wrapper around RidgeCuda's compiled CUDA kernel. OnecudaLaunchKernelfor the full perm sweep (~14× kernel-level vs CuPy at smallm). Real sparse path viacusparseSpMMwith in-kernel column normalization; C-sidesrandperm-table builder (~200× faster than the Python loop). End-to-end 5.6× faster thancupyon the GSE100093 fixture while bit-equivalent on β/SE/z/p. - Dash web app (
secactpy-app, optional[app]extra) — spatial / single-cell / bulk tabs with Visium / CosMx / Xenium upload, activity change, cohort survival. secactpy.visualization(optional[viz]extra) — nine SecAct-specific plotly functions.secactpy.downstream(optional[downstream]extra) —coxph_regression,signaling_pattern(_gene),ccc_scrnaseq,ccc_spatial. Delegates tospatial-gpuwhen available; standalonelifelines/ sklearn-NMF fallbacks otherwise.- R stack swap —
beibeiru/RidgeR(archived) →data2intelligence/RidgeFast(CPU) +data2intelligence/RidgeCuda(GPU). RidgeFast matches RidgeR to better than2e-14.
Performance
ridgeNumPy backend auto-picks Y-row vs T-col permutation bymvsp— 3.3× speedup on the GSE100093 fixture.ridgeCuPy backend: perm-table H2D hoisted out of the loop; per-batchmempool.free_all_blocks()dropped.- Streaming inference: pass 2 + pass 3 share a single H5AD read (3 → 2 passes);
normalize_chunkandaccumulatevectorized; H5AD string decoding vianp.char.decode.
Fixed
Dockerfile: addedlibuv1-devso the Rfspackage and six transitive CRAN deps build from source.H5ADChunkReader: handlesobs.attrs['_index']index naming (consortium datasets), negative categorical codes, and the"symbol"gene-column fallback.- Streaming:
row_means @ Y_chunkavoids the CSC→CSR transposition copy. activity_correlation: first-subplot xref fixed (xinstead ofx1).- Dash app: temp-file cleanup after uploaded payload reads.
glm: renamed ambiguousI→info(E741).
Migration notes
rng_methoddefault flipped to explicit'srand'(behaviorally equivalent to the oldNone → use_gsl_rng=True → CStdlibRNGchain).use_gsl_rngremains as legacy fallback whenrng_method=Noneis passed explicitly.- Reference H5AD files under
dataset/output/signature/*are still valid; to fully switch source of truth to RidgeFast, re-runsbatch scripts/regenerate_r_reference.shagainst the new image. - The R reference fixture under
tests/was regenerated on Biowulf (R 4.5.2, glibc 2.28). All 37 tests pass withSEmax diff9.99e-17.
See CHANGELOG.md for the full list.