Skip to content

ENH: Add native save and read support for SSD - #13718

Merged
tsbinns merged 21 commits into
mne-tools:mainfrom
Aniketsy:fix-13328
Mar 26, 2026
Merged

tsbinns merged 21 commits into
mne-tools:mainfrom
Aniketsy:fix-13328

Conversation

@Aniketsy

@Aniketsy Aniketsy commented Mar 3, 2026

Copy link
Copy Markdown
Contributor

Fixes #13328

@Aniketsy
Aniketsy marked this pull request as draft March 3, 2026 17:43
Comment thread mne/decoding/ssd.py Outdated
Comment thread mne/decoding/ssd.py Outdated

@tsbinns tsbinns left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Really strong start, thanks @Aniketsy! Have some comments below for suggested next steps. Only skimmed the tests, but will have a proper look once the changes below are addressed.

Just to note, the idea would also be to add this functionality to the other decoding classes SPoC, CSP and XdawnTransformer, but that should be a very simple copy-paste job once the template is set in stone for SSD since they all inheret from the _GEDTransformer parent class.

Comment thread mne/decoding/ssd.py Outdated
Comment thread mne/decoding/ssd.py Outdated
Comment thread mne/decoding/ssd.py Outdated
Comment thread mne/decoding/ssd.py Outdated
Comment thread mne/decoding/ssd.py Outdated
Comment thread mne/decoding/ssd.py Outdated
Comment thread mne/decoding/ssd.py Outdated
Comment thread mne/decoding/ssd.py Outdated
tsbinns

This comment was marked as duplicate.

tsbinns

This comment was marked as duplicate.

@tsbinns

tsbinns commented Mar 3, 2026

Copy link
Copy Markdown
Contributor

Ah whoops, was mid-review and didn't see your comments before @scott-huberty!

@Aniketsy

Aniketsy commented Mar 5, 2026

Copy link
Copy Markdown
Contributor Author

scott-huberty, tsbinns, larsoner thanks for the review and clarification, I’ve addressed most of the points mentioned during the review and am revisiting the changes to ensure I didn’t miss any points.

Just to note, the idea would also be to add this functionality to the other decoding classes SPoC, CSP and XdawnTransformer, but that should be a very simple copy-paste job once the template is set in stone for SSD since they all inheret from the _GEDTransformer parent class.

sure, that sounds good. We can proceed with extending this to the other classes once the SSD implementation is finalized.

@Aniketsy

Aniketsy commented Mar 5, 2026

Copy link
Copy Markdown
Contributor Author

Ah, I only ran the tests locally. I’ll make sure to build the docs locally as well before pushing the changes in future.

@Aniketsy

Aniketsy commented Mar 9, 2026

Copy link
Copy Markdown
Contributor Author

@tsbinns I've added verbose --in save() to match other MNE save method to control the overwrite warning log, Please review these changes when you get chance. Thanks!

@tsbinns tsbinns left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @Aniketsy, really nice work! Just some very minor comments. How would you feel about extending this framework to the other classes?

Comment thread mne/decoding/ssd.py Outdated
Comment thread mne/decoding/ssd.py Outdated
Comment thread mne/decoding/tests/test_ssd.py Outdated
@Aniketsy

Aniketsy commented Mar 9, 2026

Copy link
Copy Markdown
Contributor Author

@tsbinns thanks! I've addressed the comment you mentioned, should I extend this framework to other classes now.

Comment thread mne/decoding/xdawn.py Outdated
Comment thread mne/decoding/tests/test_csp.py Outdated
Comment thread mne/decoding/tests/test_csp.py Outdated
Comment thread mne/decoding/csp.py Outdated
Comment thread mne/decoding/csp.py Outdated
@Aniketsy

Copy link
Copy Markdown
Contributor Author

@tsbinns Thanks for the suggestion! I've updated the tests accordingly. Please let me know if any further improvements are needed.

@Aniketsy
Aniketsy marked this pull request as ready for review March 13, 2026 06:47
@tsbinns

tsbinns commented Mar 13, 2026

Copy link
Copy Markdown
Contributor

@Aniketsy Please also add the versionadded info to save/read for SSD and Xdawn.

Comment thread mne/decoding/ssd.py Outdated

@tsbinns tsbinns left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just some things to tidy up the parametrised test! Once they're addressed, I'd say this is looking good, but would like to get the once-over from another maintainer to make sure there's nothing I've missed.

Comment thread mne/decoding/tests/test_csp.py Outdated
Comment thread mne/decoding/tests/test_csp.py Outdated
Comment thread mne/decoding/ssd.py Outdated
@Genuster

Copy link
Copy Markdown
Contributor

Thanks for the great work @Aniketsy!

I've got some design-related suggestions (though I'm a bit late to the party) that hopefully can keep the user-facing code of the transformers clean from boilerplate and lower-level implementation details.
save(), __getstate__(), __setstate__() could be abstracted out into the decoding/base.py/_GEDTransformer class. For save() each child could pass their string class name into the save in _GEDTransformer. __getstate__ can just move to the parent class (I think state.pop("R_func", None) will work fine in SSD and XdawnTransformer cases as well). First half of __setstate__ can move to the parent and then each child will call super and just update their own specific callables.

read() can also be abstracted into something like _read_ged(fname, ged_class) in base.py and then each of the reading methods will just call _read_ged.

The _required_state_keys for __setstate__ could be replaced with something like inspect.signature(self.__class__.__init__) in the _GEDTransformer, but making it work will probably require some mental juggling

These are mostly cosmetic suggestions to make the the code prettier and easier to maintain, it will be nice to have the save/read functionality regardless!

@Aniketsy

Copy link
Copy Markdown
Contributor Author

@Genuster thanks for the improvement and detailed explanation, I've applied changes as per suggestion, i'll look into this once again, to verify If I've missed any points. Could you please take a look when you have time? Let me know if any further improvements are needed.

@Genuster

Copy link
Copy Markdown
Contributor

Love the _restore_callables approach! The _create_callables in SSD doesn't really save lines or make the code more clear IMO, so you could remove it and restore the changes related to it. Apart from that, looks neat enough to me!

@tsbinns tsbinns left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Happy to approve this once the per-class save docstring change is implemented.

Comment thread mne/decoding/base.py Outdated
Comment thread mne/decoding/ssd.py Outdated
Comment thread mne/decoding/xdawn.py Outdated
Aniketsy and others added 2 commits March 21, 2026 23:07
Co-authored-by: Thomas S. Binns <[email protected]>
Co-authored-by: Thomas S. Binns <[email protected]>
@tsbinns

tsbinns commented Mar 22, 2026

Copy link
Copy Markdown
Contributor

@drammock @larsoner Please could I get your thoughts on this: #13718 (comment)

@drammock drammock left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implementation looks pretty clean. I didn't review the tests or doc rendering.

Comment thread mne/decoding/csp.py
Comment thread mne/decoding/csp.py
Comment thread mne/decoding/ssd.py
Comment thread mne/decoding/ssd.py Outdated
Comment thread mne/decoding/xdawn.py
Comment thread mne/decoding/base.py
Comment thread mne/decoding/base.py
@Aniketsy

Copy link
Copy Markdown
Contributor Author
=========================== short test summary info ============================
FAILED mne/decoding/tests/test_ged.py::test_sklearn_compliance[_GEDTransformer(cov_callable=functools.partial(<function_mock_cov_callableat0x7fd1dac62770>,cov_method_params={'reg':'empirical'}),mod_ged_callable=<function_mock_mod_ged_callableat0x7fd1dac62820>,n_components=4,restr_type='restricting')-check_estimators_pickle] - NotImplementedError: _GEDTransformer does not implement _restore_callables().
FAILED mne/decoding/tests/test_ged.py::test_sklearn_compliance[_GEDTransformer(cov_callable=functools.partial(<function_mock_cov_callableat0x7fd1dac62770>,cov_method_params={'reg':'empirical'}),mod_ged_callable=<function_mock_mod_ged_callableat0x7fd1dac62820>,n_components=4,restr_type='restricting')-check_estimators_pickle(readonly_memmap=True)] - NotImplementedError: _GEDTransformer does not implement _restore_callables().
FAILED mne/decoding/tests/test_ged.py::test_sklearn_compliance[_GEDTransformer(cov_callable=functools.partial(<function_mock_cov_callableat0x7fd1dac62770>,cov_method_params={'reg':'empirical'}),mod_ged_callable=<function_mock_mod_ged_callableat0x7fd1dac62820>,n_components=4,restr_type='whitening')-check_estimators_pickle] - NotImplementedError: _GEDTransformer does not implement _restore_callables().
FAILED mne/decoding/tests/test_ged.py::test_sklearn_compliance[_GEDTransformer(cov_callable=functools.partial(<function_mock_cov_callableat0x7fd1dac62770>,cov_method_params={'reg':'empirical'}),mod_ged_callable=<function_mock_mod_ged_callableat0x7fd1dac62820>,n_components=4,restr_type='whitening')-check_estimators_pickle(readonly_memmap=True)] - NotImplementedError: _GEDTransformer does not implement _restore_callables().
FAILED mne/decoding/tests/test_ged.py::test_sklearn_compliance[_GEDTransformer(cov_callable=functools.partial(<function_mock_cov_callableat0x7fd1dac62770>,cov_method_params={'reg':'empirical'}),dec_type='multi',mod_ged_callable=<function_mock_mod_ged_callableat0x7fd1dac62820>,n_components=4,restr_type='restricting')-check_estimators_pickle] - NotImplementedError: _GEDTransformer does not implement _restore_callables().
FAILED mne/decoding/tests/test_ged.py::test_sklearn_compliance[_GEDTransformer(cov_callable=functools.partial(<function_mock_cov_callableat0x7fd1dac62770>,cov_method_params={'reg':'empirical'}),dec_type='multi',mod_ged_callable=<function_mock_mod_ged_callableat0x7fd1dac62820>,n_components=4,restr_type='restricting')-check_estimators_pickle(readonly_memmap=True)] - NotImplementedError: _GEDTransformer does not implement _restore_callables().
FAILED mne/decoding/tests/test_ged.py::test_sklearn_compliance[_GEDTransformer(cov_callable=functools.partial(<function_mock_cov_callableat0x7fd1dac62770>,cov_method_params={'reg':'empirical'}),dec_type='multi',mod_ged_callable=<function_mock_mod_ged_callableat0x7fd1dac62820>,n_components=4,restr_type='whitening')-check_estimators_pickle] - NotImplementedError: _GEDTransformer does not implement _restore_callables().
FAILED mne/decoding/tests/test_ged.py::test_sklearn_compliance[_GEDTransformer(cov_callable=functools.partial(<function_mock_cov_callableat0x7fd1dac62770>,cov_method_params={'reg':'empirical'}),dec_type='multi',mod_ged_callable=<function_mock_mod_ged_callableat0x7fd1dac62820>,n_components=4,restr_type='whitening')-check_estimators_pickle(readonly_memmap=True)] - NotImplementedError: _GEDTransformer does not implement _restore_callables().
FAILED mne/decoding/tests/test_ged.py::test_sklearn_compliance[_GEDTransformer(R_func=functools.partial(<functionsumat0x7fd1fef17af0>,axis=0),cov_callable=functools.partial(<function_mock_cov_callableat0x7fd1dac62770>,cov_method_params={'reg':'empirical'}),mod_ged_callable=<function_mock_mod_ged_callableat0x7fd1dac62820>,n_components=4,restr_type='restricting')-check_estimators_pickle] - NotImplementedError: _GEDTransformer does not implement _restore_callables().
FAILED mne/decoding/tests/test_ged.py::test_sklearn_compliance[_GEDTransformer(R_func=functools.partial(<functionsumat0x7fd1fef17af0>,axis=0),cov_callable=functools.partial(<function_mock_cov_callableat0x7fd1dac62770>,cov_method_params={'reg':'empirical'}),mod_ged_callable=<function_mock_mod_ged_callableat0x7fd1dac62820>,n_components=4,restr_type='restricting')-check_estimators_pickle(readonly_memmap=True)] - NotImplementedError: _GEDTransformer does not implement _restore_callables().
FAILED mne/decoding/tests/test_ged.py::test_sklearn_compliance[_GEDTransformer(R_func=functools.partial(<functionsumat0x7fd1fef17af0>,axis=0),cov_callable=functools.partial(<function_mock_cov_callableat0x7fd1dac62770>,cov_method_params={'reg':'empirical'}),mod_ged_callable=<function_mock_mod_ged_callableat0x7fd1dac62820>,n_components=4,restr_type='whitening')-check_estimators_pickle] - NotImplementedError: _GEDTransformer does not implement _restore_callables().
FAILED mne/decoding/tests/test_ged.py::test_sklearn_compliance[_GEDTransformer(R_func=functools.partial(<functionsumat0x7fd1fef17af0>,axis=0),cov_callable=functools.partial(<function_mock_cov_callableat0x7fd1dac62770>,cov_method_params={'reg':'empirical'}),mod_ged_callable=<function_mock_mod_ged_callableat0x7fd1dac62820>,n_components=4,restr_type='whitening')-check_estimators_pickle(readonly_memmap=True)] - NotImplementedError: _GEDTransformer does not implement _restore_callables().
FAILED mne/decoding/tests/test_ged.py::test_sklearn_compliance[_GEDTransformer(R_func=functools.partial(<functionsumat0x7fd1fef17af0>,axis=0),cov_callable=functools.partial(<function_mock_cov_callableat0x7fd1dac62770>,cov_method_params={'reg':'empirical'}),dec_type='multi',mod_ged_callable=<function_mock_mod_ged_callableat0x7fd1dac62820>,n_components=4,restr_type='restricting')-check_estimators_pickle] - NotImplementedError: _GEDTransformer does not implement _restore_callables().
FAILED mne/decoding/tests/test_ged.py::test_sklearn_compliance[_GEDTransformer(R_func=functools.partial(<functionsumat0x7fd1fef17af0>,axis=0),cov_callable=functools.partial(<function_mock_cov_callableat0x7fd1dac62770>,cov_method_params={'reg':'empirical'}),dec_type='multi',mod_ged_callable=<function_mock_mod_ged_callableat0x7fd1dac62820>,n_components=4,restr_type='restricting')-check_estimators_pickle(readonly_memmap=True)] - NotImplementedError: _GEDTransformer does not implement _restore_callables().
FAILED mne/decoding/tests/test_ged.py::test_sklearn_compliance[_GEDTransformer(R_func=functools.partial(<functionsumat0x7fd1fef17af0>,axis=0),cov_callable=functools.partial(<function_mock_cov_callableat0x7fd1dac62770>,cov_method_params={'reg':'empirical'}),dec_type='multi',mod_ged_callable=<function_mock_mod_ged_callableat0x7fd1dac62820>,n_components=4,restr_type='whitening')-check_estimators_pickle] - NotImplementedError: _GEDTransformer does not implement _restore_callables().
FAILED mne/decoding/tests/test_ged.py::test_sklearn_compliance[_GEDTransformer(R_func=functools.partial(<functionsumat0x7fd1fef17af0>,axis=0),cov_callable=functools.partial(<function_mock_cov_callableat0x7fd1dac62770>,cov_method_params={'reg':'empirical'}),dec_type='multi',mod_ged_callable=<function_mock_mod_ged_callableat0x7fd1dac62820>,n_components=4,restr_type='whitening')-check_estimators_pickle(readonly_memmap=True)] - NotImplementedError: _GEDTransformer does not implement _restore_callables

are we expecting these failures @tsbinns @drammock

@tsbinns
tsbinns enabled auto-merge (squash) March 26, 2026 13:17
@tsbinns
tsbinns merged commit 84cabed into mne-tools:main Mar 26, 2026
32 checks passed
@tsbinns

tsbinns commented Mar 26, 2026

Copy link
Copy Markdown
Contributor

Thanks @Aniketsy!

@Aniketsy

Copy link
Copy Markdown
Contributor Author

@tsbinns @Genuster @drammock @scott-huberty thanks! for the review and improvements, happy to see this merged.

harrisonritz added a commit to harrisonritz/mne-python that referenced this pull request May 27, 2026
* [pre-commit.ci] pre-commit autoupdate (mne-tools#13646)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>

* Fix and extend anonymize_info (mne-tools#13647)

* Fix epochs.plot() scrollbar issue (mne-tools#13654)

* ENH: Add optional channel name overlay to plot_alignment (mne-tools#13570)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Daniel McCloy <[email protected]>

* Fix docstrings for get_data() (mne-tools#13652)

* DOC: Add detail to make_watershed_bem volume parameter (mne-tools#13658)

* [pre-commit.ci] pre-commit autoupdate (mne-tools#13663)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>

* update maintainers lists (mne-tools#13631)

* Fixes make_scalp_surfaces (mne-tools#13024)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Marijn van Vliet <[email protected]>
Co-authored-by: Eric Larson <[email protected]>

* DOC: Add pybvrf [skip azp] [skip actions] (mne-tools#13665)

* Expose bem submodule (mne-tools#13669)

* Rename `Epochs.reset_drop_log_selection()` to `Epochs.reset_index()` (mne-tools#13675)

* MAINT: Work around NumPy deprecation (mne-tools#13677)

* [pre-commit.ci] pre-commit autoupdate (mne-tools#13678)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>

* Allow reading alternative nasion label (Nz) from snirf file (mne-tools#13672)

Co-authored-by: Daniel McCloy <[email protected]>

* use a lockfile for "old" CI job (mne-tools#13490)

Co-authored-by: Carina Forster <[email protected]>
Co-authored-by: Thomas S. Binns <[email protected]>
Co-authored-by: Scott Huberty <[email protected]>
Co-authored-by: Erica Peterson <[email protected]>
Co-authored-by: Eric Larson <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Fix bad cross-ref syntax (mne-tools#13690)

* Doc- clarify return types as instance of original type (mne-tools#13674)

Co-authored-by: Marijn van Vliet <[email protected]>

* update partner institution list (mne-tools#13668)

* MAINT: Update code credit (mne-tools#13709)

Co-authored-by: Eric Larson <[email protected]>

* [pre-commit.ci] pre-commit autoupdate (mne-tools#13716)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>

* DOC: clarify index mismatch in Epochs.drop when epochs are auto-dropped (mne-tools#13688)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Thomas S. Binns <[email protected]>
Co-authored-by: Daniel McCloy <[email protected]>

* ENH: support per-vertex opacity in 3D overlays (mne-tools#13706)

Co-authored-by: Eric Larson <[email protected]>

* FIX: Spelling [ci skip]

* Fix generation of lockfile for old job (mne-tools#13724)

* eyetrack should not count as picks=data (mne-tools#13723)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Scott Huberty <[email protected]>

* BUG: prevent NaNs in layered overlay compositing when resulting alpha is zero (mne-tools#13714)

Co-authored-by: Marijn van Vliet <[email protected]>

* Added HEDAnnotations (mne-tools#13059)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Daniel McCloy <[email protected]>
Co-authored-by: Bru <[email protected]>
Co-authored-by: Stefan Appelhoff <[email protected]>

* [dependabot]: Bump the actions group with 2 updates (mne-tools#13728)

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>
Co-authored-by: Eric Larson <[email protected]>

* [pre-commit.ci] pre-commit autoupdate (mne-tools#13734)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>
Co-authored-by: Eric Larson <[email protected]>

* Raising meaningful warnings/errors for interpolate_bads, when supplie… (mne-tools#13518)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* BUG: Fix bug with default (mne-tools#13744)

* DOC: document first_samp behavior after crop and RawArray workaround (mne-tools#13685)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* FIX: do not print dev_head_t if not available (mne-tools#13741)

Co-authored-by: Eric Larson <[email protected]>

* FIX: Link [ci skip]

* Update name [ci skip]

* MAINT: cleanup Python 3.9 compat from __future__ import annotations (mne-tools#13749)

Co-authored-by: Marijn van Vliet <[email protected]>

* FIX: Handle hidden annotations during deletion in mpl plot (mne-tools#13703)

* ENH: Log scaling better (mne-tools#13758)

* [pre-commit.ci] pre-commit autoupdate (mne-tools#13762)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>
Co-authored-by: Eric Larson <[email protected]>

* FORWARD: assert invariant for unreachable rref branch in _lead_dots (mne-tools#13764)

* Improve handling of dropped epochs in ica.plot_properties (mne-tools#13746)

* Support mixed hed annotations, concat and solve version registration (mne-tools#13736)

* ENH: compute CSD directly for upper-triangle channel pairs in Fourier/multitaper (mne-tools#13719)

* Extend plot_csd support to SEEG, ECoG, and DBS channel types (mne-tools#13713)

Co-authored-by: Thomas S. Binns <[email protected]>
Co-authored-by: Marijn van Vliet <[email protected]>

* Add example for Python/R interoperability using mass univariate t-test (mne-tools#13729)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Eric Larson <[email protected]>
Co-authored-by: Daniel McCloy <[email protected]>

* [BUG] `IndexError` in `set_montage()` for MEG+EEG recordings when digitization is skipped (mne-tools#13700)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* FIX: remap lowpass <= 0 to Nyquist in GDF/EDF reader (mne-tools#13769)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* FIX: correct spacing attribute in SourceMorph when src_to is provided (mne-tools#13687)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* [pre-commit.ci] pre-commit autoupdate (mne-tools#13779)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>
Co-authored-by: Eric Larson <[email protected]>

* fix bad xrefs in changelog (mne-tools#13783)

* DOC: fix invalid cross-reference in 13700 changelog entry (mne-tools#13785)

* FIX: raise clear ValueError when no ECG events found in create_ecg_ep… (mne-tools#13771)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Daniel McCloy <[email protected]>

* ENH: Add native save and read support for SSD (mne-tools#13718)

Co-authored-by: Thomas S. Binns <[email protected]>

* ENH: Add variance regularization to F-statistic in f_oneway (mne-tools#13698)

Co-authored-by: Daniel McCloy <[email protected]>

* [pre-commit.ci] pre-commit autoupdate (mne-tools#13802)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>

* ENH: allow per-channel colors in raw.plot via channel name dict keys (mne-tools#13765)

* Fix top and bottom clipping in raw.plot() (mne-tools#13787)

* MAINT: Update code credit (mne-tools#13805)

* FIX: short-circuit n_jobs=None to n_jobs=1 without Parallel setup (mne-tools#13777)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Daniel McCloy <[email protected]>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Replacing abstractclassmethod with abstractmethod (mne-tools#13806)

* ENH: expose font_file in Brain.add_text (mne-tools#13778)

Co-authored-by: Daniel McCloy <[email protected]>
Co-authored-by: Marijn van Vliet <[email protected]>

* ENH: add cmap parameter to Evoked.animate_topomap (mne-tools#13756)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* MAINT: Install SciPy pre (mne-tools#13807)

* ENH: Replace custom _whosmat_hdf5 with pymatreader.whosmat (mne-tools#13753)

* MAINT: Make sys_info more robust (mne-tools#13810)

* MAINT: Remove tomli, tomlsort, and ruff from `test` group (mne-tools#13809)

* BUG: Fix bug with fwd.info["dev_head_t"] setting (mne-tools#13619)

* ENH: Add initial BCI2000 .dat reader (preload-only) (mne-tools#13699)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Eric Larson <[email protected]>

* Add pybispectra as related software (mne-tools#13812)

* DOC: Fix type annotation for order parameter in Epochs.plot() (mne-tools#13639)

Co-authored-by: Daniel McCloy <[email protected]>
Co-authored-by: Scott Huberty <[email protected]>

* [dependabot]: Bump the actions group with 2 updates (mne-tools#13817)

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>

* fixed some info fields in MEG interpolation across sensor types using… (mne-tools#13759)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* ENH: Add support for plotting ICA source timecourses in Report.add_ica (mne-tools#13697)

* FIX: correct sensor name ordering in plot_topomap when using Info object (mne-tools#13686)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* MAINT: Update dependency specifiers (mne-tools#13814)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Thomas S. Binns <[email protected]>

* [pre-commit.ci] pre-commit autoupdate (mne-tools#13818)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>

* MAINT: Update code credit [ci skip] (mne-tools#13823)

Co-authored-by: Eric Larson <[email protected]>

* Update values to int64 (mne-tools#13548)

Co-authored-by: Eric Larson <[email protected]>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Daniel McCloy <[email protected]>

* FIX: Installer links etc [ci skip]

* TST: Doc

* FIX: correct mode parameter in get_point_spread and get_cross_talk (mne-tools#13754)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* DOC: Add epoch quality example (mne-tools#13710)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Thomas S. Binns <[email protected]>

* Change syncing of dependencies with `README` (mne-tools#13832)

* DOC: Fix changelog [circle deploy] (mne-tools#13833)

Co-authored-by: Thomas S. Binns <[email protected]>

* Exclude private submodules (e.g., _edf) from Credits page (mne-tools#13673)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* BUG: Fix bug with backward compat [circle deploy] (mne-tools#13835)

* Fix bug with credit [circle deploy] (mne-tools#13841)

* ENH: broaden OPM coil handling for colocated topomaps (mne-tools#13825)

* DOC: Add artifact-cleaning note to epoch quality example. (mne-tools#13827)

* [pre-commit.ci] pre-commit autoupdate (mne-tools#13839)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>
Co-authored-by: Eric Larson <[email protected]>

* FIX: Ref [skip azp] [skip actions]

* BUG: Fix bug with logging level (mne-tools#13843)

* fix env var in actions (mne-tools#13844)

Co-authored-by: Scott Huberty <[email protected]>

* TST: Add regression coverage for OPM topomap grouping via `plot_joint()` and `ICA` (mne-tools#13842)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* Customize annotation colors (mne-tools#13838)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* DOC: Remove invalid ndarray option from colormap docstrings (mne-tools#13797)

* Fix versionadded for annotation_colors (mne-tools#13853)

* [dependabot]: Bump the actions group with 2 updates (mne-tools#13852)

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>

* [pre-commit.ci] pre-commit autoupdate (mne-tools#13854)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>

* MAINT: Links [circle deploy] [skip azp] [skip actions]

* MAINT: add OPM overlap grouping helper (mne-tools#13847)

* FIX: Correct fNIRS interpolation with reordered picks (mne-tools#13856)

* MAINT: Modernize numpydoc checks (mne-tools#13865)

* Allow concatenating `BaseRaw` objects (mne-tools#13263)

Co-authored-by: Copilot <[email protected]>
Co-authored-by: Eric Larson <[email protected]>

* Add dark theme to Matplotlib-based raw.plot (mne-tools#13861)

Co-authored-by: Copilot <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* FIX: Check [ci skip]

* FIX: Sets [ci skip]

* Update towncrier change type descriptions (mne-tools#13829)

* fix numpydoc (missed YD01 ignore) (mne-tools#13868)

* FIX: correct label orientation for 0-90 deg nodes in plot_connectivity_circle (mne-tools#13855)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Daniel McCloy <[email protected]>

* [dependabot]: Bump the actions group with 3 updates (mne-tools#13871)

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>

* [pre-commit.ci] pre-commit autoupdate (mne-tools#13873)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>

* Add preload keyward argument to Inst.load_data() method call (mne-tools#13858)

* MAINT: Make test dir read-only (mne-tools#13872)

* BUG: improve FreeSurfer error message when executable not found (mne-tools#13874)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Eric Larson <[email protected]>

* add CI description to contributing guide (mne-tools#13837)

Co-authored-by: Daniel McCloy <[email protected]>

* Fix grammar [ci skip] (mne-tools#13881)

* FIX: handle missing __version__ in check_version (mne-tools#13870)

Co-authored-by: Claude Sonnet 4.6 <[email protected]>

* apply diataxis to tutorials/inverse/80_brainstorm_phantom_elekta.py (mne-tools#13584)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* add AI policy (mne-tools#13883)

* MAINT: Switch to pip for macOS and minimal jobs (mne-tools#13882)

* MAINT: Update code credit (mne-tools#13878)

* ENH:  Allow passing source detector distances to beer lambert law (mne-tools#13875)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* MAINT: Update for vtk deprecation (mne-tools#13886)

* ENH: Add overrides= parameter to read_raw_brainvision for BIDS header repair (mne-tools#13884)

* Fix bug with ica.plot_properties (mne-tools#13885)

* Fix `picks` being ignored in `Epochs.apply_function()` (mne-tools#13894)

* Update describing changes in contributing guide (mne-tools#13895)

* Add Zuna to related software list (mne-tools#13849)

Co-authored-by: Daniel McCloy <[email protected]>

* [dependabot]: Bump github/codeql-action from 4.35.2 to 4.35.3 in the actions group (mne-tools#13897)

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>
Co-authored-by: Eric Larson <[email protected]>

* DOC: Fix apply_function shape description for Epochs (mne-tools#13891)

Co-authored-by: Eric Larson <[email protected]>

* Raise warning and errors when np.nan provided to mne.stats.permutation_t_test(). (mne-tools#13813)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Erica R Peterson <[email protected]>

* MAINT: Update dependency specifiers (mne-tools#13899)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Eric Larson <[email protected]>

* [dependabot]: Bump github/codeql-action from 4.35.3 to 4.35.4 in the actions group (mne-tools#13901)

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>

* [pre-commit.ci] pre-commit autoupdate (mne-tools#13902)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>

* MAINT: Remove workaround for old PySide6 (mne-tools#13900)

* Add spherical montages (mne-tools#13903)

* [dependabot]: Bump the actions group with 2 updates (mne-tools#13918)

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>

* [pre-commit.ci] pre-commit autoupdate (mne-tools#13919)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>

* MAINT: Update dependency specifiers (mne-tools#13916)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Eric Larson <[email protected]>

* BUG: set_eeg_reference list ch_type now applies per-type CAR by default (mne-tools#13920)

* FIX: Avoid iteration errors caused by None when reading Nihon Kohden .LOG files (mne-tools#13915)

* Fix drop_log dtype (mne-tools#13923)

* Doc: add guidance on taking over a stale pull request (mne-tools#13877)

Co-authored-by: Thomas S. Binns <[email protected]>
Co-authored-by: Daniel McCloy <[email protected]>

* FIX: Make set_eeg_reference working with a string for a channel name (mne-tools#13917)

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: mne[bot] <[email protected]>
Co-authored-by: Clemens Brunner <[email protected]>
Co-authored-by: Aman Srivastava <[email protected]>
Co-authored-by: Daniel McCloy <[email protected]>
Co-authored-by: Himanshu Mahor <[email protected]>
Co-authored-by: Scott Huberty <[email protected]>
Co-authored-by: Victor Férat <[email protected]>
Co-authored-by: Marijn van Vliet <[email protected]>
Co-authored-by: Eric Larson <[email protected]>
Co-authored-by: Aniket <[email protected]>
Co-authored-by: Carina Forster <[email protected]>
Co-authored-by: Thomas S. Binns <[email protected]>
Co-authored-by: Erica Peterson <[email protected]>
Co-authored-by: Horizon_Architect_07 <[email protected]>
Co-authored-by: Pragnya <[email protected]>
Co-authored-by: Benedikt Ehinger <[email protected]>
Co-authored-by: Kay Robbins <[email protected]>
Co-authored-by: Bru <[email protected]>
Co-authored-by: Stefan Appelhoff <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Johannes Herforth <[email protected]>
Co-authored-by: Hansuja <[email protected]>
Co-authored-by: Simon Kern <[email protected]>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Akhilesh <[email protected]>
Co-authored-by: CHH <[email protected]>
Co-authored-by: Teon L Brooks <[email protected]>
Co-authored-by: Lifeng <[email protected]>
Co-authored-by: Kalle Mäkelä <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: Pavel Popov <[email protected]>
Co-authored-by: Ayushi Satodiya <[email protected]>
Co-authored-by: Seth Bashford <[email protected]>
Co-authored-by: Baris <[email protected]>
Co-authored-by: Claude Sonnet 4.6 <[email protected]>
Co-authored-by: Jonas Mago <[email protected]>
Co-authored-by: Bhargav Kowshik <[email protected]>
Co-authored-by: Erica R Peterson <[email protected]>
Co-authored-by: Ben Tang <[email protected]>
Co-authored-by: myd7349 <[email protected]>
Co-authored-by: Michael Straube <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add native save and read functionality to SSD and SPoC objects

6 participants