Skip to content

Commit 441e596

Browse files
committed
test(dss): harden Evoked covariance kwargs
1 parent 51696f1 commit 441e596

2 files changed

Lines changed: 22 additions & 0 deletions

File tree

‎mne_denoise/dss/utils/covariance.py‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ def compute_evoked_covariance(
155155
**kwargs
156156
Additional keyword arguments forwarded to
157157
:func:`mne.compute_covariance` (e.g. ``rank``, ``verbose``).
158+
``keep_sample_mean`` may be omitted or set to ``True``; ``False`` is
159+
invalid because the temporary Epochs object has only one average.
158160
159161
Returns
160162
-------
@@ -173,6 +175,13 @@ def compute_evoked_covariance(
173175
"Evoked must have at least 2 time samples to estimate a covariance."
174176
)
175177

178+
keep_sample_mean = kwargs.pop("keep_sample_mean", True)
179+
if keep_sample_mean is not True:
180+
raise ValueError(
181+
"keep_sample_mean must be True for an Evoked covariance because "
182+
"the temporary Epochs object contains only one averaged response."
183+
)
184+
176185
# Wrap the single averaged response as a one-trial Epochs so MNE's
177186
# covariance machinery applies. ``keep_sample_mean=True`` stops MNE from
178187
# subtracting the (single) evoked response, which would otherwise zero the

‎tests/utils/test_covariance.py‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,19 @@ def test_compute_evoked_covariance_raises_on_too_few_samples():
264264
compute_evoked_covariance(evoked)
265265

266266

267+
def test_compute_evoked_covariance_requires_sample_mean():
268+
"""A one-Evoked wrapper cannot subtract an across-epoch sample mean."""
269+
evoked, _ = _make_evoked()
270+
271+
cov = compute_evoked_covariance(
272+
evoked, keep_sample_mean=True, method="empirical", verbose=False
273+
)
274+
assert isinstance(cov, mne.Covariance)
275+
276+
with pytest.raises(ValueError, match="keep_sample_mean must be True"):
277+
compute_evoked_covariance(evoked, keep_sample_mean=False)
278+
279+
267280
def test_compute_evoked_covariance_rejects_non_2d_data():
268281
"""Non-2D evoked data is rejected before reaching MNE."""
269282

0 commit comments

Comments
 (0)