From b8c44d2e37d28fa99e0d360175535474601ea48d Mon Sep 17 00:00:00 2001 From: Johannes Herforth Date: Sat, 24 Oct 2026 13:34:41 +0200 Subject: [PATCH] BUG: Fix picks_artifact passed as exclude in regress_artifact --- doc/changes/dev/14457.bugfix.rst | 1 + mne/preprocessing/_regress.py | 4 +++- mne/preprocessing/tests/test_regress.py | 5 +++++ 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 doc/changes/dev/14457.bugfix.rst diff --git a/doc/changes/dev/14457.bugfix.rst b/doc/changes/dev/14457.bugfix.rst new file mode 100644 index 00000000000..7e74c698bb7 --- /dev/null +++ b/doc/changes/dev/14457.bugfix.rst @@ -0,0 +1 @@ +Fix bug in :func:`mne.preprocessing.regress_artifact` where passing ``betas`` caused the ``picks_artifact`` value to be passed as ``exclude`` and the default ``picks_artifact="eog"`` to be used instead, by `Johannes Herforth`_. diff --git a/mne/preprocessing/_regress.py b/mne/preprocessing/_regress.py index fc796c50586..6d1bb216c06 100644 --- a/mne/preprocessing/_regress.py +++ b/mne/preprocessing/_regress.py @@ -106,7 +106,9 @@ def regress_artifact( picks_artifact = _picks_to_idx(inst.info, picks_artifact) want_betas_shape = (len(picks), len(picks_artifact)) _check_option("betas.shape", betas.shape, (want_betas_shape,)) - model = EOGRegression(picks, picks_artifact, proj=proj) + model = EOGRegression( + picks=picks, exclude=exclude, picks_artifact=picks_artifact, proj=proj + ) model.info_ = inst.info.copy() model.coef_ = betas return model.apply(inst, copy=copy), model.coef_ diff --git a/mne/preprocessing/tests/test_regress.py b/mne/preprocessing/tests/test_regress.py index b51a46a12ee..a55777edf59 100644 --- a/mne/preprocessing/tests/test_regress.py +++ b/mne/preprocessing/tests/test_regress.py @@ -37,6 +37,11 @@ def test_regress_artifact(): assert orig_norm / 2 > clean_norm > orig_norm / 10 with pytest.raises(ValueError, match=r"Invalid value.*betas\.shape.*"): regress_artifact(epochs, betas=betas[:-1]) + # Non-default picks_artifact must be honored when betas are given + kwargs = dict(picks="eeg", picks_artifact=["EEG 001"]) + epochs_clean, betas = regress_artifact(epochs, **kwargs) + epochs_betas, _ = regress_artifact(epochs, betas=betas, **kwargs) + assert_allclose(epochs_betas.get_data(), epochs_clean.get_data()) # Regressing channels onto themselves should work epochs, betas = regress_artifact(epochs, picks="eog", picks_artifact="eog") assert np.ptp(epochs.get_data("eog")) < 1e-15 # constant value