- Minimum versions for dependencies were bumped to those ~2 years old at the time of release (by `Eric Larson`_), including:
- NumPy ≥ 1.23
- SciPy ≥ 1.9
- Matplotlib ≥ 3.6
- scikit-learn ≥ 1.1 (#12554)
- Official support for PySide2 has been dropped in this release (though it might continue to work), by `Eric Larson`_. (#12742)
- Fix bug where an event that occurred only once was excluded in :func:`mne.io.read_raw_egi`, by :newcontrib:`Ping-Keng Jao`. (#12300)
- Fix bug where :func:`mne.stats.permutation_cluster_test` (and related functions) uses excessive amount of memory for large 2D data when TFCE method is selected, by :newcontrib:`Nicolas Fourcaud-Trocmé`. (#12609)
- Assure that blink times are handled correctly :func:`mne.preprocessing.eyetracking.interpolate_blinks`, even when the raw object is cropped by `Scott Huberty`_ and :newcontrib:`Sammi Chekroud`. (#12759)
- Fix check for dropping all channels in :meth:`mne.io.Raw.drop_channels` and related methods, by :newcontrib:`Farzin Negahbani`. (#12763)
- Fix scrolling behavior in :class:`~mne.Report` when clicking on a TOC entry multiple times, by `Richard Höchenberger`_. (#12561)
- Fix bug where :func:`mne.decoding.get_coef` did not work properly with :class:`mne.decoding.CSP`, by `Eric Larson`_. (#12562)
- The color scaling of Evoked topomaps added to reports via :meth:`mne.Report.add_evokeds` was sometimes sub-optimal if bad channels were present in the data. This has now been fixed and should be more consistent with the topomaps shown in the joint plots, by `Richard Höchenberger`_. (#12578)
- Fix error causing :meth:`mne.Epochs.interpolate_bads` not to work for
seeg
channels and fix a single contact on neighboring shafts sometimes being included in interpolation, by `Alex Rockhill`_ (#12593) - Fix bug where :func:`mne.io.read_raw_fil` could not assign bad channels on import, by `George O'Neill`_. (#12597)
- Fixed a bug where :meth:`mne.Evoked.animate_topomap` did not work with :func:`mne.preprocessing.compute_current_source_density` - modified data, by `Michal Žák`_. (#12605)
- Fix overflow when plotting source estimates where data is all zero (or close to zero), and fix the range of allowed values for the colorbar sliders, by `Marijn van Vliet`_. (#12612)
- Fix adding channels to :class:`~mne.time_frequency.EpochsTFR` objects, by `Clemens Brunner`_. (#12616)
- Fix for new sklearn metadata routing protocol in decoding search_light, by `Alex Gramfort`_ (#12620)
- Fix bug where :func:`mne.time_frequency.csd_multitaper`, :func:`mne.time_frequency.csd_fourier`, :func:`mne.time_frequency.csd_array_multitaper`, and :func:`mne.time_frequency.csd_array_fourier` would return cross-spectral densities with the
fmin
andfmax
frequencies missing, by `Thomas Binns`_ (#12633) - Output types of sparse arrays were changed from
matrix
toarray
in :func:`~mne.channels.read_ch_adjacency`, :func:`~mne.channels.find_ch_adjacency`, :func:`~mne.stats.combine_adjacency`, :func:`~mne.spatio_temporal_src_adjacency`, and related functions to comply with the pending deprecation ofnp.matrix
. The returned objects now behave like standard :class:`~numpy.ndarray` objects, and in particular*
now operates element-wise instead of performing matrix multiplication. You can use@
as a backward compatible matrix multiplication for bothnp.matrix
andnp.ndarray
objects, and if a matrix is desired the outputs can be cast directly, for example asscipy.sparse.csr_matrix(out)
. Changed by `Eric Larson`_. (#12646) - Fix incorrect RuntimeWarning (different channel filter settings) in EDF/BDF import, by `Clemens Brunner`_. (#12661)
- In :func:`mne.export.export_raw` (
fmt='edf'
), when padding data to create equal-length data blocks, edge-padding is favored over zero-padding in order to avoid accidentally enlarging physical range, by `Qian Chu`_. (#12676) - In :func:`mne.io.read_raw_eyelink`, gracefully handle missing datetime in file by `Scott Huberty`_. (#12687)
- Fix regression with :class:`mne.decoding.CSP` where using
rank="full"
errantly raised an error, by `Eric Larson`_. (#12694) - Fix in-memory anonymization of data read with :func:`mne.io.read_raw_edf` by `Eric Larson`_. (#12720)
- Fix bug with overplotting of butterfly labels in :func:`mne.viz.plot_raw` and related functions and methods, by `Eric Larson`_. (#12721)
- Fix a bug where the
ylim
parameter would sometimes apply to the wrong channel types in :func:`mne.viz.plot_evoked_topo`, by `Marijn van Vliet`_. (#12724) - Fix bug where ad-hoc regularization of a covariance with :func:`mne.cov.regularize` did not properly account for bad channels in rank calculations, by `Eric Larson`_. (#12727)
- Fix bug when reading NIRX files saved in a non-western encoding, by `Daniel McCloy`_. (#12730)
- :func:`~mne.set_log_file` and :func:`~mne.set_log_level` can now be correctly detected by static analysis tools like Pylance, by `Richard Höchenberger`_. (#12735)
- Safeguard loading of
meas_date
in :func:`mne.io.read_raw_edf`, by `Mathieu Scheltienne`_. (#12754) - Fix bug in :func:`~mne.preprocessing.maxwell_filter_prepare_emptyroom` where a difference in sampling frequencies between data and emptyroom files was ignored, by `Daniel McCloy`_. (#12760)
- A new argument
events_as_annotations
has been added to :func:`mne.io.read_raw_egi` with a default value ofFalse
that will change toTrue
in version 1.9, by `Scott Huberty`_ and `Eric Larson`_. (#12300) mne.Info.ch_names
will now return an empty list instead of raising aKeyError
if no channels are present, by `Richard Höchenberger`_. (#12583)- Documented that :func:`~mne.match_channel_orders` can also work on Epochs, and Evoked objects. Reflecting this, deprecated the
raws
parameter in favor of aninsts
parameter, by `Stefan Appelhoff`_. (#12699) - The
block
argument to :class:`mne.viz.Brain` is deprecated and will be removed in 1.9, use :func:`matplotlib.pyplot.show` withblock=True
instead, by `Eric Larson`_. (#12719) - :func:`mne.datasets.fetch_fsaverage` now returns a :class:`python:pathlib.Path` object
rather than a string. Support for string concatenation with plus (
+
) is thus deprecated and will be removed in 1.9, use the forward-slash/
operator instead, by `Eric Larson`_. (#12771)
- Added internals to allow modifying single-channel annotations in the Qt raw browser, by :newcontrib:`Noah Markowitz`. (#12669)
- Adding :meth:`mne.channels.Layout.copy` and :meth:`mne.channels.Layout.pick` to copy and select channels from a :class:`mne.channels.Layout` object. Plotting 2D topographies of evoked responses with :func:`mne.viz.plot_evoked_topo` with both arguments
layout
andexclude
now ignores excluded channels from the :class:`mne.channels.Layout`. By `Mathieu Scheltienne`_. (#12338) - In :class:`~mne.Report` you can now easily navigate through images and figures connected to a slider with the left and right arrow keys. Clicking on the slider or respective image will focus the slider, enabling keyboard navigation, by `Richard Höchenberger`_ (#12556)
- When plotting EOG and ECG artifact scores for ICA in :meth:`mne.Report.add_ica`, the channel names used for artifact detection are now displayed in the titles of each respective subplot, by `Richard Höchenberger`_. (#12573)
- Use
aseg='auto'
for :meth:`mne.viz.Brain.add_volume_labels` and :func:`mne.get_montage_volume_labels` to useaparc+aseg
by default or if not present usewmparc
because freesurfer useswmparc
in the latest version, by `Alex Rockhill`_. (#12576) - The HTML representations of :class:`~mne.io.Raw`, :class:`~mne.Epochs`, and :class:`~mne.Evoked` (which you will see e.g. when working with Jupyter Notebooks or :class:`~mne.Report`) have been updated to be more consistent and contain slightly more information, by `Richard Höchenberger`_. (:gh:`12624`) (#12583)
- When adding :class:`~mne.Evoked` data to a :class:`~mne.Report` via :meth:`~mne.Report.add_evokeds`, we now also include an "Info" section with some basic summary info, as has already been the case for raw and epochs data, by `Richard Höchenberger`_. (#12584)
- We added new installation variants for a full installation with the PySide6 Qt binding
(
"mne[full-pyside6]"
), with the PyQt6 binding ("mne[full-pyqt6]"
, equivalent to"mne[full]"
), and without any Qt binding ("mne[full-no-qt]"
), which may be useful in certain situations by `Richard Höchenberger`_. (#12628) - Adding argument
'random'
to :func:`~mne.epochs.equalize_epoch_counts` and to :meth:`~mne.Epochs.equalize_event_counts` to randomly select epochs or events. By `Mathieu Scheltienne`_. (#12649) - Add new parameter
ignore_marker_types
to :func:`~mne.io.read_raw_brainvision` to ignore marker types (and only use marker descriptions) when reading BrainVision files, by `Clemens Brunner`_. (#12652) - Added support for passing
axes
to :func:`mne.viz.plot_head_positions` whenmode='field'
, by `Eric Larson`_. (#12655) - The HTML representation of :class:`~mne.Epochs` (visible e.g. in Jupyter or in :class:`~mne.Report`) now indicates whether metadata is attached to the epochs, by `Richard Höchenberger`_. (#12686)
- Montage plots created with :meth:`~mne.channels.DigMontage.plot` now scale both the channel dots and channel names with the new
scale
parameter. The default isscale=1
(factors less than 1 will scale down, whereas factors greater than 1 will scale up). The previousscale_factor
parameter only affected marker size, and this parameter is now deprecated. By `Clemens Brunner`_. (#12703) - Add :func:`~mne.stats.erp.compute_sme` to compute the analytical standardized measurement error (SME) as a data quality measure for ERP studies, by `Clemens Brunner`_. (#12707)
- Use :class:`python:datetime.date` for
info["subject_info"]["birthday"]
rather than a tuple of(year, month, day)
by `Eric Larson`_. (#12720) - Add default
spatial_colors="auto"
to :func:`mne.viz.plot_evoked_white` and :meth:`mne.Evoked.plot_white` to enable spatial colors by default, by `Eric Larson`_. (#12725) - :func:`mne.minimum_norm.make_inverse_operator` and related functions now more robustly warn if the whitener computed from the noise covariance has an incorrect rank, by `Eric Larson`_. (#12727)
- When indexing :class:`~mne.Epochs` (e.g. by doing
epochs[0]
), static code analysis tools like Pylance should now be able to infer that the returned object is an epoch, too, and provide editor support like automated code completions, by `Richard Höchenberger`_. (#12733) - When using the
data_path()
in any dataset included in :py:mod:`mne.datasets`, static analysis tools like Pylance will now correctly infer that a pathlib.Path will be returned and provide editor support like automated code completions, by `Richard Höchenberger`_. (#12734) - Add support for storing Fourier coefficients in :class:`mne.time_frequency.Spectrum`, :class:`mne.time_frequency.EpochsSpectrum`, :class:`mne.time_frequency.SpectrumArray`, and :class:`mne.time_frequency.EpochsSpectrumArray` objects, by `Thomas Binns`_. (#12747)
- Fixed issue template links by :newcontrib:`Michal Žák` (#12600)
- Enhance documentation on decimation filtering to prevent aliasing, by :newcontrib:`Xabier de Zuazo`. (#12650)
- Added vulture as a pre-commit hook and removed related dead code, by `Eric Larson`_. (#12569)
- Add link to BEst-Python in the list of related software. by `Ilian Azz`_. (#12659)
- Improved clarity of parameter documentation for mne.decoding.SSD.fit, by `Thomas Binns`_. (#12664)
- Disable the "Back to top" button in the documentation, by `Richard Höchenberger`_. (#12688)
- Improve argument
ylim
documentation through :class:`~mne.Evoked` plotting function and validate type to :class:`dict` orNone
to prevent misuage, by `Mathieu Scheltienne`_. (#12697) - Code contributions are now measured using PRs and reported on the :ref:`contributors` page, by `Eric Larson`_. (#12774)
- Authorship headers in MNE-Python code have been standardized, by `Eric Larson`_. (#12781)
- Alex Rockhill
- Alexandre Gramfort
- Clemens Brunner
- Daniel McCloy
- Dimitri Papadopoulos Orfanos
- Eric Larson
- Farzin Negahbani+
- George O'Neill
- Ilian AZZ
- Marijn van Vliet
- Mathieu Scheltienne
- Michal Žák+
- Nabil Alibou
- Nicolas Fourcaud-Trocmé+
- Noah Markowitz+
- Ping-Keng Jao+
- Qian Chu
- Richard Höchenberger
- Sammi Chekroud+
- Scott Huberty
- Stefan Appelhoff
- Thomas S. Binns
- Xabier de Zuazo+