All notable changes to nltools are documented here.
Unreleased¶
Features¶
Feature Implement efficient copying for method chaining (~80% performance improvement)
Feature Add backend abstraction for CPU/GPU operations
Feature Add ridge regression algorithms with SVD decomposition
Feature Add cluster thresholding to Brain_Data.threshold() method
Feature Complete ridge regression test suite (Cycles 2.2 & 2.3)
Feature Migrate apply_mask to nilearn for better performance
Feature Implement BaseModel and Ridge model classes with GPU support
Feature Extract HyperAlignment class from align() function
Feature Add Glm model class wrapping nilearn FirstLevelModel
Feature Add CLI-based benchmarking with dry-run and progress tracking
Feature Add sklearn-style fit/predict API and deprecate regress()
Feature Add cross-validation support to Brain_Data.fit()
Feature Polars migration TDD scaffolding for Design_Matrix
Feature Implement DesignMatrix Phase 1 - Construction and basic operations
Feature Implement DesignMatrix Phase 2 - Statistical operations
Feature Implement DesignMatrix Phase 3 - HRF convolution
Feature Implement DesignMatrix Phase 4 & Phase 5a/5b - Polynomials and basic append
Feature Implement DesignMatrix Phase 5c - Polynomial separation (multi-run support)
Feature Implement DesignMatrix Phase 6 - Diagnostics (VIF and clean)
Feature Complete DesignMatrix Polars migration - Phase 7 (Utilities)
Feature feat(polars): Complete DesignMatrix Polars migration with GLM integration
Feature Implement 2-tier testing strategy with 16× speedup
Feature Complete file_reader integration with DesignMatrix methods
Feature Complete Polars DesignMatrix integration - fix Adjacency.regress()
Feature gpu acceleration one-sample test
Feature GPU-accelerated inference module with clean architecture
Feature Add GPU-accelerated correlation permutation test module
Feature Add Spearman and Kendall correlation metrics to correlation module
Feature Add matrix permutation test (Mantel test) module
Feature Add GPU-accelerated Intersubject Correlation (ISC) module
Feature add three user-requested enhancements for v0.6.0
Feature Add BrainCollection class for multi-subject data
Feature Add group inference and transformation methods
Feature Add searchlight neighborhood caching infrastructure
Feature Add ISC computation methods
Feature Add isc_test() for permutation testing
Feature Add GLM/Ridge workflow helper functions
Feature Add cortical flatmap visualization
Feature Add BrainCollection.fit_glm() for group-level GLM
Feature Add BrainCollection.fit_ridge() for group encoding models
Feature Add compute_contrasts() and select_feature() methods
Feature Change fit_ridge() default output to CV scores
Feature Unified predict() API for timeseries and MVPA decoding
Feature Add tests for map(axis=1), isc_test, and ISC ROI extraction
Feature Add unified BrainCollection.fit() API matching BrainData
Feature Add Phase 2 tests and docs for BrainCollection.fit() API
Feature Add workflow integration tests (MVPA, Group Inference, ISC)
Feature Add MNI-aligned VTC masks and update ISC tests
Feature Add RSA workflow tests
Feature Add SRM workflow validation tests
Feature Add cross-subject pooled decoding test for SRM workflow
Feature Add pipeline infrastructure for fluent CV and Pool API (Phases 1-6)
Feature Add alignment pipeline step for SRM/HyperAlignment (Phase 7)
Feature Add Phase 8 terminals and advanced CV (ISC, RSA, Permutation, Nested CV)
Feature Refactor BrainData.predict() to use Pipeline infrastructure (Phase 9)
Feature Add LocalAlignment stub for Phase 1 (nltools-oqil)
Feature Implement LocalAlignment Phase 1 with searchlight alignment (nltools-oqil)
Feature Add piecewise scheme support to LocalAlignment (nltools-oqil.4)
Feature Add generator-based batching to LocalAlignment (nltools-pc2i)
Feature Add CPU parallelization to LocalAlignment (Phase 3)
Feature Add GPU/Backend integration to LocalAlignment (Phase 4)
Feature Add BrainCollection.align() for functional alignment (Phase 5)
Feature v0.6.0 prep - LocalAlignment complete, GH issue reconciliation
Feature Add explicit tail options for MCP-compatible p-values (GH #315)
Feature Complete P1 API improvements for v0.6.0
Feature Complete P2 API improvements for v0.6.0
Feature Add type annotations and pipe() tests for v0.6.0 P2 items
Feature Support unequal sample counts in SRM and LocalAlignment (GH #410)
Feature add verbose parameter to standardize() to suppress sklearn warnings
Feature rewrite GLM tutorial and auto-detect duplicate intercept in add_poly
Feature restore BrainData.ttest / add ttest2
⚠ Breaking Feature replace parallel kwarg with device on user-facing methods
⚠ Breaking Feature standardize progress flag to progress_bar; default False
⚠ Breaking Feature standardize algorithm-choice kwarg to method
⚠ Breaking Feature rename plot thr_upper/thr_lower to upper/lower
⚠ Breaking Feature standardize permutation count kwarg to n_permute
⚠ Breaking Feature flip similarity diagonal flag to include_diag
⚠ Breaking Feature rename user-facing radius kwargs to radius_mm
Feature restore legacy h5 read support for nltools <= 0.5.1 files
Feature add load_haxby_example offline demo dataset
Feature append(axis=1) accepts pandas/polars DataFrames
Feature construct from a numpy array + explicit mask
⚠ Breaking Feature ttest returns {mean, t, z, p} uniformly
Feature compute_contrasts(contrast_type=“all”) + glm_ docs
⚠ Breaking Feature load from BIDS file paths + rename polys→confounds
⚠ Breaking Feature lazy-fetch niftis from HF dataset
⚠ Breaking Feature default model=‘glm’ in fit(); tighten validation
⚠ Breaking Feature add design_clean kwargs to fit() for GLM validation
Feature pyodide async seed + sync fetch
⚠ Breaking Feature add
limitkwarg + change slices default view to “z”Feature IDBFS-backed persistent cache for pyodide
⚠ Breaking Feature gate MNI-only plot paths on standard-space data
⚠ Breaking Feature per-voxel α + held-out predictions through BrainData CV path
⚠ Breaking Feature copy-constructor + read-only convolved/confounds
⚠ Breaking Feature HRF-convolve events files by default
Feature with_columns + pl.Expr in setitem
⚠ Breaking Feature find_spikes returns DesignMatrix
Feature list_resources() for HF dataset discoverability
⚠ Breaking Feature rebuild iplot() as anywidget viewer with 4D step-through
⚠ Breaking Feature iplot threshold panel + drag-end render fix
⚠ Breaking Feature rewrite BrainData.predict() with kwargs API + Predict dataclass
⚠ Breaking Feature brain-space Predict fields + ROI per-fold scores + decoding tutorial
⚠ Breaking Feature ROI dispatch produces voxel-space weight maps
⚠ Breaking Feature spatial_scale axis for ROI/searchlight RSA + predict rename
Feature implement distance(searchlight) and align(roi)
Feature cluster reports with anatomical labeling
⚠ Breaking Feature rebuild BrainData.iplot() on ipyniivue (niivue)
Feature add marimo->ipynb converter for JupyterLite tutorials
Feature add poe docs-jupyterlite task to build the tutorial JupyterLite bundle
Feature make GLM + MVPA tutorials run in JupyterLite on trimmed HF data
Feature add “Try it live” JupyterLite nav link + deploy-ready build
⚠ Breaking Feature iplot() colorbar + interactive threshold slider
⚠ Breaking Feature host pain dataset on HF so fetch_pain() works in Pyodide
⚠ Breaking Feature host emotion-rating dataset on HF for fetch_emotion_ratings()
Feature serve tutorials as interactive marimo/WASM notebooks
Feature land core helpers, init, indexing, parallel _apply
Feature implement load/unload/write/read/cleanup + memory_estimate
Feature GLM fit + HDF5 bundles + compute_contrasts
Feature reductions, perm tests, ISC, align, from_bids/from_glob, predict dispatch
Feature ridge fit bundles + bc.predict(X_new=) per-subject path
Feature stage encoding + ISC datasets for nltools/niftis
Feature wire max_gpu_memory_gb into ridge_svd GPU batching (F022)
⚠ Breaking Feature user-controlled scale/standardize preprocessing
Feature GLM predict(X)/coef_ parity + nilearn report (F182)
⚠ Breaking Feature append(axis=1) refuses bitwise-duplicate columns
Feature make the rank-deficiency warning diagnostic and actionable
⚠ Breaking Feature machine-enforce the canonical kwarg vocabulary from api-vocabulary.yml
⚠ Breaking Feature one canonical tail= vocabulary across every p-value (#474)
⚠ Breaking Feature reserve the .nl_ namespace for generated columns
⚠ Breaking Feature one core GPU execution layer — measured budgets, OOM recovery, run-or-raise
⚠ Breaking Feature carve out predict_group(); remove the legacy cv() pipeline
⚠ Breaking Feature iplot robust autoscaling + shared zero-aware percentile thresholds
⚠ Breaking Feature sklearn-style cv names — ‘logo’/‘loo’ replace ‘loso’/‘loro’
⚠ Breaking Feature predict() decodes against the stored .Y slot — labels travel with the data
Feature PredictCollection — per-subject decoding results container
⚠ Breaking Feature predict(y=) maps per-subject decoding — closes the #478 map-reduce gap
⚠ Breaking Feature predict_group permutation null for roi and searchlight
Feature warn on near-collinear full-rank designs
Improvements¶
Improvement refactor and improve brain data dunder math. improve first tutorial
Improvement refactor onsets_to_dm to wrap new nilearn functionality instead
Improvement Convert .shape(), .isempty(), .dtype() to properties + quick fixes
Improvement Convert shape() and isempty() to properties
Improvement Reorganize Brain_Data tests into class-based structure
Improvement Reorganize Adjacency tests into class-based structure
Improvement Reorganize Design_Matrix tests into class-based structure
Improvement Organize test_stats.py with section headers and docstrings
Improvement Organize test suite into subdirectories following architectural patterns
Improvement Integrate Glm model into Brain_Data.regress()
Improvement Optimize DesignMatrix with idiomatic Polars patterns
Improvement Optimize DesignMatrix with selectors and enhanced errors
Improvement Consolidate design_matrix files and remove old implementation
Improvement Remove dead Design_Matrix_Series code
Improvement Standardize on DesignMatrix naming throughout codebase
Improvement Complete Polars optimization with native resampling
Improvement refactor inference tests and add two sample statistica correcteness tests
Improvement improve isc group
Improvement refactor tests
Improvement refactor tests
Improvement refactoring tests
Improvement improve resampling
Improvement move Adjacency to subdirectory structure
Improvement Complete P0 deprecations for v0.6.0 release
Improvement split brain_data.py into braindata/ subpackage with facade pattern
Improvement split design_matrix.py into design_matrix/ subpackage
Improvement rename design_matrix/ to designmatrix/
Improvement split adjacency/init.py into submodules
Improvement split collection.py into collection/ subpackage
Improvement remove leading underscores from module filenames
Improvement restructure data/ to use only subpackage dirs
Improvement clean BrainData facade — no private methods, alphabetical ordering
Improvement clean Adjacency facade — no private methods, alphabetical ordering
Improvement restructure BrainData tests into braindata/ subdir
Improvement clean DesignMatrix facade — no private methods, alphabetical ordering
Improvement restructure Adjacency tests into adjacency/ subdir
Improvement restructure DesignMatrix tests into designmatrix/ subdir
Improvement rename tests/shell → tests/data, tests/data → tests/fixtures
Improvement restructure model tests into models/ subdir
Improvement move models tests from tests/core/ to tests/models/
Improvement move Simulator and Roc into nltools/data/ packages
Improvement move neighborhoods and cache into data/braindata/
Improvement move check_brain_data helpers into braindata/utils.py
Improvement consolidate template resolution into MNI_Template_Factory
Improvement create nltools/io/ package, move HDF5 and file_reader into it
Improvement add tests/io_tests/ with h5 and file_reader test classes
Improvement move BrainData Args to class docstring, drop params-move logic
Improvement reorganize nltools/stats.py into focused subpackage
Improvement move stats tests to tests/stats/ for flatter hierarchy
Improvement add stats/permutation.py facade and update imports
Improvement reorganize nltools/plotting.py into focused subpackage
Improvement consolidate alignment algorithms and move validation into inference
Improvement consolidate ridge/backends into top-level Backend class
Improvement remove deprecated neurovault download shims
Improvement replace prefs.MNI_Template with templates/ module
Improvement lazy-import pandas across nltools modules
Improvement rewrite plotting/adjacency label-distance and silhouette as polars-native
Improvement polars-first stats.outliers.zscore and stats.intersubject input boundaries
Improvement sweep pandas out of scattered small modules
Improvement relocate backends to algorithms/ and thread resolve_backend
Improvement validate_frame returns polars, accepts pandas/numpy/csv
Improvement BrainData.X/.Y are polars DataFrames, never None
Improvement drop pandas from braindata/analysis.py
Improvement drop vestigial pandas branch in parse_contrast_string
Improvement rewrite BrainData h5 persistence on h5py + polars
Improvement Simulator.create_data builds polars frames and writes via pl
Improvement Adjacency.Y invariant is polars via property setter
Improvement drop pandas from Adjacency CSV read/write
Improvement rewrite Adjacency h5 persistence on h5py + polars
Improvement numpy-native Adjacency label-distance and cluster helpers
Improvement BrainCollection.metadata invariant is polars
Improvement build BrainCollection result metadata as polars
Improvement rename plotting functions to plot_* convention
Improvement lean on nilearn for HRFs and resample plumbing
Improvement drop BrainData.nifti_masker, use functional apply_mask/unmask
Improvement drop Simulator.nifti_masker, use functional apply_mask/unmask
Improvement drop pandas-compat shims from stats and DesignMatrix
Improvement drop legacy PyTables h5 support and plotting underscore re-exports
Improvement drop glover_hrf lambda wrapper in onsets_to_dm
⚠ Breaking Improvement canonical trailing-kwarg order across facades
⚠ Breaking Improvement replace **kwargs passthroughs with explicit signatures (1/2)
⚠ Breaking Improvement replace **kwargs passthroughs with explicit signatures (2/2)
⚠ Breaking Improvement keyword-only marker for init and complex methods
Improvement route progress_bar to nilearn verbose
Improvement simplify extract_roi PCA, stop mutating caller headers
Improvement broaden check_brain_data to accept Niimg-like inputs
Improvement use np.trunc instead of deprecated np.fix
Improvement expand ruff with UP/C4/PIE/RUF022/RET/SIM families
Improvement improve first tutorial and make plotting fixes
⚠ Breaking Improvement polars passthrough, unify data attr, drop details()
⚠ Breaking Improvement drop fetch_haxby; migrate GLM tutorial to localizer
Improvement rename fetch_nifti → fetch_resource
Improvement extract indexing helpers to indexing.py
Improvement extract aggregation helpers to aggregation.py
Improvement extract conversions to conversions.py
Improvement move memory_estimate/load/unload to io.py
Improvement consolidate stateless helpers in core.py
Improvement drop unused TypeVar import
⚠ Breaking Improvement scaffold v0.6.0 BrainCollection redesign
⚠ Breaking Improvement tighten decompose signature
⚠ Breaking Improvement drop final_weight_map, weight_map = all-data refit
⚠ Breaking Improvement generalize .plot() into method= dispatcher; add .corr()
⚠ Breaking Improvement rename BrainCollectionPipeline.normalize → standardize
⚠ Breaking Improvement BrainCollectionPipeline.predict returns BrainData
⚠ Breaking Improvement align bc.predict with new BD.predict + GLM tutorial
Improvement memoize fetch_resource, skip network revalidation
Improvement add coalesced_gc() and wrap masking-heavy operations
Improvement validate GLM-fit result mask once per map-list
⚠ Breaking Improvement remove superseded standalone Pipeline/MultiSubject orchestration
Improvement extract API-doc postprocess into its own module
⚠ Breaking Improvement remove dead standalone pipeline surface
⚠ Breaking Improvement strip ICC functionality entirely (F012/F048/F140/F177/F194)
⚠ Breaking Improvement canonical-kwarg sweep — banned-kwarg renames + **kwargs hygiene
⚠ Breaking Improvement add keyword-only
*marker to 61 public functions (F-kwonly)⚠ Breaking Improvement rename compute_contrasts statistic selector method→statistic
⚠ Breaking Improvement canonicalize remaining kwarg names across facades
⚠ Breaking Improvement close AUDIT-0.6.0 dead-code bucket (23 findings)
⚠ Breaking Improvement remove orphaned pool.py two-stage aggregation (F118/F111)
Improvement functional GLM map extraction, no per-contrast round-trips
Improvement functional compute_contrasts, no Nifti round-trip
Improvement annotate models layer + fix Any/hint gaps (F107/F009/F017/F046/F085)
Improvement single-source helpers + frozen dataclass cleanups (F006/F061/F154/F183/F192)
⚠ Breaking Improvement co-locate pipeline primitives under data/collection/pipesteps
⚠ Breaking Improvement canonicalize spatial_scale vocab in LocalAlignment
Improvement remove 7 dead validation/utility functions
Improvement rewrite as a speed+memory harness over the current API
⚠ Breaking Improvement canonicalize device selection to device= across facades
Improvement run pairwise ISC bootstrap on the GPU
⚠ Breaking Improvement rebuild BrainData.iplot() on a self-owned niivue anywidget
Improvement make find_spikes deduplication unconditional; drop clean=
⚠ Breaking Improvement stop cleaning the design in fit(); warn on rank deficiency
Improvement make maybe_tqdm/make_progress_bar the single library-wide progress mechanism
⚠ Breaking Improvement enforce the keyword-only marker convention uniformly across the package
⚠ Breaking Improvement remove nltools.stats; consolidate the functional core into nltools.algorithms
⚠ Breaking Improvement canonicalize the ISC vocabulary (summary=/metric=/null_dist)
⚠ Breaking Improvement canonicalize cluster_summary and extract_roi kwargs
Improvement isc_test p-values via the shared _compute_pvalue helper
Improvement thread tail through the bootstrap engines; drop the facade closures
Improvement one GPU bootstrap driver, two thin wrappers
Improvement stop materializing np.abs(arr) three times per iplot window
Improvement one shared manifest module for the lint-api trio
Bug Fixes¶
Bug Fix fix formatting
Bug Fix fix warnings 1
Bug Fix fix warnings 2
Bug Fix fix us few more things
Bug Fix fix neurovault downloaders and add tests
Bug Fix fix tutorial and log
Bug Fix fix nilearn resampling messages
Bug Fix fix Brain_Data eq. Update tests
Bug Fix fixup collection and tutorial v1
Bug Fix fix up collection issue
Bug Fix Handle model attributes in Brain_Data.copy() to prevent pickle errors
Bug Fix Complete Round 1 audit fixes - 4 critical bugs resolved
Bug Fix Achieve perfect backward compatibility via deterministic RNG pattern
Bug Fix Achieve perfect cross-backend determinism for all permutation tests
Bug Fix fix statistical correctness of inference module
Bug Fix fix docs
Bug Fix fix ruff complaints
Bug Fix fix adjacenecy bootstrap. Add gpu optimized correlation and timeseries functions
Bug Fix fix/add gpu optimizations
Bug Fix fix up bootstrapping with ridge
Bug Fix fix up docs for algorithms
Bug Fix fix cross-validation
Bug Fix fix brain-data fit progress bar
Bug Fix fix resampling
Bug Fix fix beads git tracking and add GitHub issues
Bug Fix fix Brain_Data squeeze flattening single-item lists (#449)
Bug Fix fix nilearn darkness parameter deprecation warning
Bug Fix fix nilearn nearest interpolation deprecation warning
Bug Fix fix NiftiMasker mask warning in simulator
Bug Fix fix memory resampling warnings in tests
Bug Fix convert Backend object to parallel string in Ridge CV calls
Bug Fix handle NaN values in Adjacency.similarity() (#432)
Bug Fix resolve API mismatches in BrainData and test expectations
Bug Fix prevent fitted model state from propagating to copies
Bug Fix resolve pandas deprecation and logic bug in Adjacency
Bug Fix replace legacy tier1/tier2 markers with slow/gpu
Bug Fix Adjacency.regress() now correctly sets is_single_matrix for single-regressor DesignMatrix case
Bug Fix ISC calculation in align() now correctly handles all axis/data_type combos
Bug Fix atlas/label data now correctly uses nearest-neighbor interpolation (#446)
Bug Fix Adjacency.similarity() NaN handling with perm_type=‘2d’ (#432)
Bug Fix Brain_Data.threshold() now works when upper=0 or lower=0 (#370)
Bug Fix fix docs build: add jupytext config for .py tutorials
Bug Fix Adjacency.shape returns (n_nodes, n_nodes) for API consistency
Bug Fix Remove incorrect @pytest.mark.slow markers from fast tests
Bug Fix MultiSubjectPipeline.align() now works with LOSO CV (nltools-7j3g)
Bug Fix Skip CI for beads sync commits, skip surface tests when files missing
Bug Fix CI test failures - FittedBrainCollection, thresholds, tolerance
Bug Fix More robust CI tests - tolerance, nan handling, constant input checks
Bug Fix Use unbiased sigma estimator in regression (GH #287)
Bug Fix Correct type annotations for ty type checker
Bug Fix relax SVD reconstruction tolerance for float32 precision
Bug Fix seed RNG in SVD test to eliminate flaky precision failures
Bug Fix configure ty type checker and resolve 18 type errors
Bug Fix fixup tutorials
Bug Fix resolve ty type-checking errors
Bug Fix guard scale_data grand-mean branch against divide-by-zero
Bug Fix fix up docs and poe commands
Bug Fix fix toc
Bug Fix update ridge benchmark to parallel API
Bug Fix rewrite mvpa_roi for correct per-ROI MVPA decoding
Bug Fix serialize polars frames to h5 via Arrow IPC
⚠ Breaking Bug Fix make out-of-mask voxels transparent in BrainData.plot
Bug Fix make slices + flatmap plotting usable again
Bug Fix fixup plotting and add plot_surf()
Bug Fix fix up design matrix, autoscale for plotting, include constant for .add_dct_basis by default to match .add_poly
Bug Fix fix up design mat
⚠ Breaking Bug Fix compute_contrasts returns real t-stats, not beta sums
⚠ Breaking Bug Fix return matplotlib Figure from BrainData/DesignMatrix .plot()
Bug Fix honor fit_intercept and CV splitters; add BrainData.size
Bug Fix re-stub predict_multi; bounds-trim default slice cut_coords
⚠ Breaking Bug Fix always suffix convolved columns with _c{i}
Bug Fix make .convolve() idempotent over already-convolved columns
Bug Fix relax accidental numpy floor; pin nilearn in pyodide smoke test
Bug Fix restore the interactive_plots optional extra (ipywidgets)
Bug Fix deterministic cell ids for generated tutorial notebooks
Bug Fix deterministic tiebreak for same-second step subdirs
Bug Fix strip leaked RST directives from re-exported docstrings
Bug Fix correct Attributes-section removal over-match in API generation
Bug Fix correct invalid p-values/CIs and permutation nulls (0.6.0 audit)
Bug Fix crashes/silent-empty on realistic inputs (0.6.0 audit)
Bug Fix silent metadata loss and threshold/stack bugs (0.6.0 audit)
Bug Fix seaborn 0.13.2 crashes, dropped returns, triangle swap (0.6.0 audit)
Bug Fix always-raising ctor, copy-paste + wrong SE bugs (0.6.0 audit)
Bug Fix schema check + non-integer downsample ratios (0.6.0 audit)
Bug Fix all attribute errors and mutable default (0.6.0 audit)
Bug Fix filter crash, resource leaks, CV-index + MVPA seed bugs (0.6.0 audit)
Bug Fix NaN-poisoning, silent-wrong + crash bugs (0.6.0 audit)
Bug Fix n_subjects referenced nonexistent BrainCollection.n_images (0.6.0 audit)
Bug Fix restore ISC bootstrap null centering dropped in refactor (F066)
Bug Fix HyperAlignment auto_pad zero-pads instead of truncating (F001)
Bug Fix implement PooledData.repool for real fitted_state shapes (F111)
Bug Fix share one integer cluster_id space between peaks and clusters (F043)
Bug Fix complete parallel→device + contrast_type→method renames missed in 9b1b0eb4
⚠ Breaking Bug Fix drop invalid permutation CVScheme, add predict(n_permute=) null (F112)
⚠ Breaking Bug Fix stop advertising kwargs that do nothing (F068/F021/F182)
Bug Fix apply_mask inherits target space for raw Niimg masks
Bug Fix clearer errors + robust input handling (F098/F031/F159/F157)
Bug Fix to_nifti preserves data precision instead of quantizing to mask dtype
Bug Fix align feeds LocalAlignment correct orientation + wire cache= (F073)
Bug Fix repair docstring rendering bugs in API reference
Bug Fix make marimo-WASM tutorials boot in Pyodide
Bug Fix run GPU legs on CUDA hosts, not just MPS
Bug Fix stream leave-one-out ISC instead of materializing all subjects
Bug Fix correct regress standard errors, all_same, copy() docs
⚠ Breaking Bug Fix wire GPU into pairwise ISC; fail fast on unsupported metric
Bug Fix sequential micropip install for marimo-WASM; adopt niivue viewer
Bug Fix use Python # comments in Pyodide micropip.install string
Bug Fix make h5py a core dependency; BrainCollection.fit() requires it
Bug Fix stop find_spikes() emitting duplicate spike regressors
Bug Fix a design matrix with no regressors keeps its row count
Bug Fix make n_rows survive copies and reject conflicting values
Bug Fix point the rank-deficiency warning at regularization, not deletion
⚠ Breaking Bug Fix add progress_bar to the permutation and bootstrap family
Bug Fix thread progress_bar through the bootstrap and Adjacency stat facades
⚠ Breaking Bug Fix make options keyword-only across the inference layer
⚠ Breaking Bug Fix make write() and the file constructor round-trip
Bug Fix compare OOM-recovered results at float32-ulp tolerance, not bitwise
⚠ Breaking Bug Fix timeseries GPU draws match CPU exactly; conjugate pairing fixed in batched phase randomization
Bug Fix relay worker warnings to the parent — deduplicated, categories preserved
Bug Fix adjacency plots rendered twice
⚠ Breaking Bug Fix GPU Spearman ranks ties correctly; device validation is run-or-raise
Bug Fix one-tailed z maps stay finite; single shared z-from-p helper
⚠ Breaking Bug Fix ttest(popmean=X, permutation=True) tests mean != popmean
Bug Fix string class labels decode and persist end to end
Bug Fix predict worker closures no longer capture the collection
Bug Fix classify .h5 items by bundle_kind, not bare suffix
Bug Fix predict-bundle model_spec is a real refit spec, not a repr
Bug Fix plot_between_label_distance crashed on its default permutation path
Bug Fix validate the separator-recovery re-parse instead of trusting the header hint
Bug Fix translate pre-.nl_ generated names when loading a legacy h5
Bug Fix make the GPU bootstrap per-sample hooks private
Bug Fix qualify vocabulary suppressions by module path
Bug Fix move check_kwonly’s inline EXEMPT dict into the vocabulary manifest
Bug Fix move the _NullProgressBar nosemgrep suppressions into the semgrep config
Bug Fix serialize in-memory masks in BrainData h5 files
Bug Fix GPU bootstrap guard accepts torch-cuda
Bug Fix keep refit alpha indices on the compute device
Bug Fix cap measured-budget batch sizing at a saturation ceiling
Bug Fix bench_inference GPU leg passed the harness probe string as device=
Bug Fix provenance label auto-detects the GPU; record the benchmarked commit
Documentation¶
Docs Streamline CLAUDE.md and add token-efficient pytest guidance
Docs Update documentation to reflect completed test suite refactoring
Docs Update documentation for R², effect variance, and filter method
Docs Update nilearn-log.md with Phase 1 & 2 completion status
Docs Update nilearn-log.md with Phase 3 completion status
Docs Update REFACTORING_PLAN.md with Priority 2.5 completion
Docs Add systematic benchmarking framework and update project specs
Docs Add remaining v0.6.0 tasks to refactoring plan
Docs Improve API documentation infrastructure and organization
Docs Refactor documentation into focused, purpose-built files
Docs suppress sphinx build warnings with exclude patterns
Docs eliminate all Sphinx build warnings (45→0)
Docs docs scaffold
Docs Document parallel testing safety with pytest-xdist
Docs Convert all docstrings from NumPy to Google style
Docs Enforce parallel-first and permission-gated tier2 testing
Docs Update refactor docs and archive completed research
Docs Complete documentation update for GPU-accelerated inference module
Docs add GitHub issues audit for v0.6.0 planning
Docs add update notices to tutorials using deprecated localizer dataset
Docs document API issues in migration guide
Docs Add BrainCollection tutorial
Docs Update migration guide and API docs for v0.6.0
Docs Add encoding models tutorial (08_encoding_models.py)
Docs Consolidate group_analysis + thresholding tutorials
Docs Heavy prune 01_glm.py tutorial
Docs Prune tutorials removing pedagogy, keeping practical code
Docs Add CHANGELOG.md with pipeline infrastructure release notes
Docs Add Pipeline workflow tutorials
Docs Document predict algorithms and class_weight=‘balanced’ (GH #182, #177)
Docs Add comprehensive v0.6.0 codebase audit
Docs Fix all 236 documentation build warnings
Docs standardize docstrings to Google-style and fill gaps
Docs add API doc pages for pipelines, simulator, neighborhoods, and cache
Docs fix migration guide inaccuracies and add missing SRM docs
Docs clarify mask handling behavior in migration guide
Docs organize BrainData API page into navigable grouped sections
Docs fix docstrings across braindata subpackage
Docs fix docstrings and add API pages for design_matrix subpackage
Docs add API pages for collection subpackage, clean up braindata imports
Docs migrate from Jupyter Book v1 to v2 (mystmd)
Docs rewrite BrainData tutorial with execution support
Docs add class renames, import paths, and ttest removal to migration guide
Docs rewrite DesignMatrix tutorial with execution support
Docs rewrite Adjacency tutorial with execution support
Docs improve BrainData API page layout and griffe2md postprocessing
Docs apply same API page improvements to DesignMatrix class
Docs apply same API page improvements to Adjacency class
Docs remove unused paired .py files for rewritten tutorials
Docs apply same API page improvements to BrainCollection class
Docs rewrite BrainCollection tutorial with execution support
Docs suppress progress bars in BrainCollection tutorial
Docs docs updates
Docs add gallery index page for API Classes sidebar section
Docs include tutorial pages as hidden TOC entries
Docs docs updates
Docs capture v0.6.0 API conventions and breaking-commit format
Docs sync migration guide with last month of breaking commits
Docs fix tutorial kwarg names and ridge-regression xref
Docs regenerate from current source
Docs use load_haxby_example in first-level GLM
Docs merge group analysis into the GLM tutorial
Docs add explicit decompose mentions
Docs PPI worked example using v0.6.0 idioms
Docs loading canonical brain images section
Docs regenerate api docs to pick up docstring drift
Docs switch tutorial atlas from k200 to k50 for faster builds
Docs refresh Multivariate_Prediction migration guidance
Docs mark Multivariate_Prediction migration done
Docs enable RSA tutorial and rewrite for current API
Docs rewrite RSA tutorial for trial-level RSA in MNI space
Docs add marimo→myst pipeline and GLM tutorial template
Docs consolidate workflows into 4 standardized notebooks
Docs remove broken BrainCollection basics card
Docs align API doc generation with the uv-cleanup module layout
Docs standardize docstrings to Google/Markdown, automate changelog, fix migration guide
Docs fix broken cross-reference links in generated API docs
Docs document iplot() colorbar + threshold slider; ipywidgets in JupyterLite
Docs explicit page-scoped MyST targets to silence heading-ref warnings
Docs silence remaining mystmd build warnings (frontmatter, grid, docstrings)
Docs regenerate API reference (fetch_pain signature + docstring fixes)
Docs update SPEC status header to reflect implemented state
Docs regenerate API reference after BrainCollection bring-over
Docs regenerate collection_core after seq-tiebreak
Docs regenerate API reference for statistic rename + permutation removal
Docs fix docstring/RST-leakage bucket + regenerate API reference
Docs regenerate API reference (F068/F021/F182 + owed drift)
Docs wire encoding + isc notebooks for in-browser WASM data (#3673)
Docs commit the 0.6.0 pre-release hygiene audit record
Docs fix stale Adjacency.similarity/regress/isc claims
⚠ Breaking Docs reorder summary tables to Parameters/Attributes/Classes/Methods
Docs reconcile Args/Returns docstrings with actual signatures
Docs tidy module docstrings (dedupe, drop leftover headings)
Docs tidy first-line docstring summaries for griffe tables
Docs add BrainCollection basics notebook
Docs normalize docstring style (Note: header, typos, models blank line)
Docs add interactive design tour + wire standalone-page build
Docs add static-markdown tutorial build mode (default) + simplify docs poe tasks
Docs trim CLAUDE.md to load-bearing guidance
Docs clean up and fix stale references
Docs remind to use vendored nilearn/marimo skills
Docs delete superseded SPEC.md and ridge design docs; repoint to docs/development
Docs reconcile docstrings/comments with implementation across data/stats
Docs fix similarity result-key docs to ‘correlation’; add semgrep guard
Docs reconcile remaining algorithm-layer docstrings with implementation
Docs generate canonical-kwarg vocab from a single source
Docs regenerate API docs (griffe2md)
Docs integrate pikachu CUDA run, make perf doc host-aware
Docs correct the nilearn cluster-forming threshold scale
Docs batched regeneration — API sources, changelog, tail-docstring cleanup
Docs per-subject predict + sklearn cv names — migration guide, execution model, vocabulary
⚠ Breaking Docs plain marimo notebooks, executed previews; defer browser support to 0.6.1
Docs regenerate changelog for the commits since the batched docs pass
Docs close the gaps found by the breaking-commit audit
Docs regenerate API sources and changelog for the review-fix commits
Docs refresh pikachu CUDA baseline at 55e44f06
0.5.0 (2023-10-31)¶
Bug Fixes¶
Bug Fix fix documentation build errors
Bug Fix fix testing bug
Bug Fix fix #413
Bug Fix fix up test bugs, support pandas 2.0, pin numpy until we replace deepdish, use only pip for GA
Bug Fix fix #409
Bug Fix fix #392
Bug Fix fix up docs testing. merge cron and push GA files
Bug Fix fix bug in downloading data
0.4.6 (2022-08-15)¶
Improvements¶
Improvement refactored trim and winsorize to single subfunction
Improvement refactored correlation_permutation with combined case testing.
Improvement refactored tests
Improvement refactored code using sourcery
Improvement refactored code using sourcery
Improvement refactored roi_to_brain to be much faster
Bug Fixes¶
Bug Fix fixed bug
Bug Fix fixed bug
Bug Fix fixed predict problems
Bug Fix fixed bug with plotting with no Xval
Bug Fix fixed bug
Bug Fix fix error related to email alert
Bug Fix fix an undefined variable; format the code layout
Bug Fix fix undefined attribute
Bug Fix fix numpy’s ValueError: The truth value of an array with more...
Bug Fix fixed dist_from_hyperplane_plot bug
Bug Fix fixed tests
Bug Fix fixed simulator test
Bug Fix fixed pytests
Bug Fix fixed cross_validation bug from updating to sklearn 0.17
Bug Fix fixed bug in analysis.Predict and updated tutorials
Bug Fix fixed bug when self.Y is empty
Bug Fix fixed bug in similarity metric
Bug Fix fixed small bug
Bug Fix fixed bug in Brain_Data.bootstrap() method related to indexing
Bug Fix fixed bug with Brain_Data.similarity
Bug Fix fixed roc figure return type
Bug Fix fixed icc bugs
Bug Fix fixed bug on Brain_Data list import
Bug Fix fixed extract_roi bug
Bug Fix fixed bugs with permutation ttest
Bug Fix fixed cross-val bug and added test
Bug Fix fixed typo
Bug Fix fixed bug
Bug Fix fixed bug with upload naming
Bug Fix fixed bug in Adjacency import function
Bug Fix fixed bugs
Bug Fix fixed downsample bug
Bug Fix fixed bugs in tutorials
Bug Fix fixed bugs in cross-validation
Bug Fix fixed bug with apply_mask
Bug Fix fixed bug with apply mask
Bug Fix fixed test tolerance
Bug Fix fixed test
Bug Fix fixed bug with Adjacency.append()
Bug Fix fix auto-rounding bug in extract_roi
Bug Fix fixed bug with reading directed flat adjacency data
Bug Fix fix mn_score bug in Roc.calculate for forced choice
Bug Fix fix forced_choice_idx in Roc.calculate function
Bug Fix fix the line up issue in analysis.py line 95
Bug Fix fixed roc forced choice plotting bug
Bug Fix fixed bug in roc forced choice plotting
Bug Fix fixed bug with create sphere and mask
Bug Fix fixed neurovault_upload method
Bug Fix fixed tests
Bug Fix fixed tests
Bug Fix fixed bug with cross-validation in predict
Bug Fix fixed bug in simulator
Bug Fix fixed bug in test_analysis
Bug Fix fixed typo
Bug Fix fixed roc forced choice accuracy
Bug Fix fixed kwargs bug
Bug Fix fix issue #152, rename Stimulus to Stim to keep the naming consistent
Bug Fix fixed bug that requires creating a copy of input data on align function.
Bug Fix fixed Brain_Data.threshold bug
Bug Fix fixed random seed issue with permutations/bootstraps and joblib
Bug Fix fixed check_random_state imports
Bug Fix fixed transform pairwise and added tests
Bug Fix fixed bug in test and crucial missing line in function
Bug Fix fixed nilearn version dependency
Bug Fix fixed bug regression bug with 2d arrays
Bug Fix fixed bugs in regression
Bug Fix fixed missing plot call
Bug Fix fixed check_brain_data bug
Bug Fix fixed typos
Bug Fix fixed bug with social relations model
Bug Fix fixed bug in fetch_localizer
Bug Fix fixed predict Y warnings.
Bug Fix fixed pearsonr bug
Bug Fix fixed bug with glover_hrf function
Bug Fix fixed bug with labels in Adjacency.plot_silhouette
Bug Fix fixed issues with labels in plot_mds
Bug Fix fixed silent errors to roi_to_brain
Bug Fix fixed doc string for roi_to_brain
Bug Fix fixed extract_roi bug and added new functionality
Bug Fix fixed import error with ipywidgets
Bug Fix fixed isc bugs
Bug Fix fixed smooth bug
Bug Fix fixed codacy recs.
Bug Fix fixed new smooth test.
Bug Fix fixed align check.
Bug Fix fixed spacing.
Bug Fix fix ga. fix bug in design matrix repr. pin pandas version until deepdish updates.
Bug Fix fixes #364
Bug Fix fixed broken tests
Bug Fix fixed cluster_summary in adjacency tutorial
Bug Fix fix ci badge. try to fix failing gallery build on ga
Bug Fix fix #396, fix #398, remove uneccesary files for doc build
Bug Fix fix nilearn warnings and onsets_to_dm warnings