Skip to content

v0.1.3

Choose a tag to compare

@pkharchenko pkharchenko released this 03 Jul 08:14
· 92 commits to main since this release

lstar-sc 0.1.3 — the first release since 0.1.2, bundling the macOS packaging fix, the viewer@0.1 cross-language parity work, and the cross-surface parity-audit fixes.

macOS packaging

  • Fix a reproducible arm64 SIGSEGV in extend_for_viewer's OpenMP kernels caused by a dual-libomp cross-runtime: the bundled libomp is coalesced to @rpath/libomp.dylib so a host libomp (scikit-learn/numba/scipy) is reused instead of a second copy loading. A bare pip install lstar-sc on Apple Silicon no longer risks the crash.

viewer@0.1 cross-language parity

  • extend_for_viewer now produces a field-for-field identical store across C++/Python/R/JS. The cell reorder (viewer_cell_order: cluster-contiguous, then a Hilbert curve over the embedding), the CSR/CSC encoding normalization, the group ordering, and grouping detection are single-sourced on the shared C++ core + a canonical policy, and enforced by cross-surface conformance legs (including a corpus-driven check) and a policy linter. See docs/parity.md.

Cross-surface fidelity (parity audit)

  • COO fields normalize to CSC on write (portable to every reader); dense fields carry their shape in the manifest; the C++ core preserves a field's uncertainty; the .h5ad direct backend infers state from content like the native backend.
  • R preserves float32 value dtypes and a graph relation's directed/weighted flags across a lstar_read/lstar_write round-trip.
  • pseudobulk routes its reduction through the shared col_sum_by_group kernel (was a numpy duplicate).
  • extend_for_viewer gains order=/markers= on R and order= on JS (parity with Python).
  • New CI guardrails: a binding-parity tripwire (a shared kernel must be bound on all surfaces) and a policy linter (viewer policy constants single-sourced).