v0.3.0
Segovia v0.3.0 — native mtscomp .cbin reading and the first real bounded-memory streaming proof.
Highlights
segovia.CbinReader— reads IBL/SpikeGLX mtscomp.cbin+.chdirectly, the thirdChunkSourcealongsideSpikeGlxReaderandZarrReader. Streams(samples, channels)int16chunks with positioned per-chunk reads (peak memory independent of file size),flate2zlib inflate, andi16wrapping delta reversal; honorschunk_orderF/C and rejects spatial-diff / non-int16 / non-zlib with typed errors.pip install segovia/ the crate both carry it.
Validation
- Byte-identical to
SpikeGlxReaderon the realNoise4Sam_g0recording round-tripped through the actualmtscompcompressor; tiny committed multi-chunkF-order fixture round-trips. - Streamed a real 46-minute, 385-channel IBL LF recording (1.6 GB
.cbin, 5.32 GB decompressed) end to end at ~250 MB/s in 186 MB peak RSS — far under the 2 GB target. An early whole-file mmap measured 1698 MB (RSS tracking compressed-file size); positioned reads fixed it, so the bound is file-size-independent and carries to a full AP-band hour. - 18 Rust + 18 Python tests;
fmt/clippy -D warningsclean; abi3 wheels build on Windows/macOS/Linux. New deps (flate2,serde,serde_json) are pure-Rust — no C-linking risk.
Still open
- The bounded-memory run was the LF band on a 46-min insertion (not a literal 60-min AP recording); the memory bound is length- and band-independent, but the AP-rate SC1 benchmark itself (the M2–4 go/no-go gate) is the next, separate milestone and is not yet run.
- No compute ops yet — these are readers only. The bandpass → CMR → whiten chain and the SC1 speed/memory comparison vs
spikeinterface(n_jobs=N)are M2–4. - Reading
direct-neural-biasingsource to confirm the niche is still open remains the last M0–2 item.
Full Changelog: v0.2.0...v0.3.0