First tagged release. Bundles the GPU-ridge foundation (PR #22) and the reviewer-grade modality-lesion pipeline (PRs #40–#69) into a single PyPI-publishable cut.
Highlights
- End-to-end modality-lesion pipeline on BOLD Moments — features → GPU ridge → ablation → ROI summary → permutation p-values → BH-FDR → cortical maps.
- HCP-MMP parcellation with a 29-ROI default set covering V1–V4, LO/MT, FFC/PH, A1/A4/A5, STS subdivisions, Broca's area, IPL, ATL.
- Per-modality permutation tests with Phipson & Smyth +1 smoothing, per-voxel one-sided p-values, and Benjamini-Hochberg FDR correction.
- BOLD Moments noise-ceiling normalisation for the canonical
n=10test-split ceilings; volumetricspace=variants supported. - Three rendering engines for cortical surface maps: matplotlib (CPU, always available), plotly + WebGL (GPU, lightweight), pyvista + VTK (TRIBE-quality smooth-shaded). Factory auto-selects pyvista → plotly → matplotlib by what's installed.
- GPU voxelwise ridge regression with
torchandTritonbackends — 5-100× faster than scikit-learn at cortex scale. - Foundation-model feature extractors for CLIP, DINOv2, SigLIP2, V-JEPA2, PaLiGemma2 (vision) and CLIP-text, SigLIP2-text. Cache-friendly NPZ output.
Operational
- CI restored to running state (#70): triggers on
master, Python pinned to 3.11, plotting extras installed, pytest runs underxvfb-runfor PyVista's VTK backend. - Coverage reporting + Codecov badge (#72, closes #10).
- Auto-assign bot tightened to prevent maintainer-chatter false positives (#41).
- Pre-commit hooks for ruff + hygiene (#69, closes #24).
- Three new community contributors landed this cycle: Yoshita-Dwivedi, SAY-5, Xuan4781.
Tests
153 → 280 passing tests (CUDA-gated grew from 2 to 3). Repo is fully ruff-clean across src/, scripts/, and tests/.
Install
```bash
pip install cortexlab-toolkit
```
Optional extras: `[analysis]`, `[viz]` (plotly + kaleido), `[plotting]` (full nilearn + pyvista stack), `[training]`, `[streaming]`, `[dev]`.
See CHANGELOG.md for the full breakdown.
Full diff vs 0.1.0: ...v0.2.0 (no 0.1.0 tag exists, so the link compares against the default ref).