Skip to content

v0.3.0

Choose a tag to compare

@fcarvajalbrown fcarvajalbrown released this 09 Jun 19:52
· 16 commits to main since this release

Segovia v0.3.0 — native mtscomp .cbin reading and the first real bounded-memory streaming proof.

Highlights

  • segovia.CbinReader — reads IBL/SpikeGLX mtscomp .cbin + .ch directly, the third ChunkSource alongside SpikeGlxReader and ZarrReader. Streams (samples, channels) int16 chunks with positioned per-chunk reads (peak memory independent of file size), flate2 zlib inflate, and i16 wrapping delta reversal; honors chunk_order F/C and rejects spatial-diff / non-int16 / non-zlib with typed errors. pip install segovia / the crate both carry it.

Validation

  • Byte-identical to SpikeGlxReader on the real Noise4Sam_g0 recording round-tripped through the actual mtscomp compressor; tiny committed multi-chunk F-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 warnings clean; 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-biasing source to confirm the niche is still open remains the last M0–2 item.

Full Changelog: v0.2.0...v0.3.0