Hello friends and fans of MNE-Python! I’m happy to announce that we have released MNE-Python 1.8. Welcome and thanks to new contributors Farzin Negahbani, Michal Žák, Nicolas Fourcaud-Trocmé, Noah Markowitz, Ping-Keng Jao, Sammi Chekroud, and Xabier de Zuazo! Note that there is now a website page dedicated to contributor credit.
Full release notes are here. Notable changes include:
- MNE-Python 1.8 requires newer versions of some key dependencies (NumPy, SciPy, Matplotlib, scikit-learn) than MNE-Python 1.7 did. See the release notes for details.
- MNE-Python 1.8 will be the last version to support Python 3.9. If you have existing environments using Python 3.9 that you expect to still be using in 3-4 months, please plan accordingly (e.g., upgrade Python, recreate the environment with a Python 3.10+, or commit to pinning MNE-Python<=1.8 in that environment).
- When installing via
pip
, there are new installation variants depending on which Qt binding you want to use:mne[full-pyside6]
,mne[full-pyqt6]
, andmne[full-no-qt]
. The optionmne[full]
is equivalent tomne[full-pyqt6]
. - Various improvements to type hints, which should allow for better code completion suggestions in IDEs.
- New function compute_sme() to compute Standardized Measurement Error for ERPs.
- Channel/vertex adjacency objects are now sparse arrays, not matrices, meaning that they behave differently with the
*
operator (switch to the@
operator to guarantee matrix multiplication instead of element-wise). Most users will not notice a difference, but if you’re doing something special with your adjacency matrices, please double-check your code. - Reduced memory usage in some cases of TFCE clustering.
- Support for complex data types in Spectrum objects.
- Fixes to plotting in some corner cases for CSDs and SourceEstimates.
fetch_fsaverage
now returns a Path object instead of a string, so path concatenation must now use/
operator instead of+
.