Metadata-Version: 2.3 Name: mne Version: 1.8.0 Summary: MNE-Python project for MEG and EEG data analysis. Project-URL: Homepage, https://mne.tools/ Project-URL: Download, https://pypi.org/project/mne/#files Project-URL: Bug Tracker, https://github.com/mne-tools/mne-python/issues/ Project-URL: Documentation, https://mne.tools/ Project-URL: Forum, https://mne.discourse.group/ Project-URL: Source Code, https://github.com/mne-tools/mne-python/ Author-email: Alexandre Gramfort Maintainer-email: Dan McCloy License: BSD-3-Clause License-File: LICENSE.txt Keywords: ECoG,EEG,MEG,brain,fNIRS,neuroimaging,neuroscience Classifier: Intended Audience :: Developers Classifier: Intended Audience :: Science/Research Classifier: License :: OSI Approved Classifier: Operating System :: MacOS Classifier: Operating System :: Microsoft :: Windows Classifier: Operating System :: POSIX Classifier: Operating System :: Unix Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Topic :: Scientific/Engineering Classifier: Topic :: Software Development Requires-Python: >=3.9 Requires-Dist: decorator Requires-Dist: jinja2 Requires-Dist: lazy-loader>=0.3 Requires-Dist: matplotlib>=3.6 Requires-Dist: numpy<3,>=1.23 Requires-Dist: packaging Requires-Dist: pooch>=1.5 Requires-Dist: scipy>=1.9 Requires-Dist: tqdm Provides-Extra: data Provides-Extra: dev Requires-Dist: codespell; extra == 'dev' Requires-Dist: graphviz; extra == 'dev' Requires-Dist: intersphinx-registry>=0.2405.27; extra == 'dev' Requires-Dist: ipython!=8.7.0; extra == 'dev' Requires-Dist: memory-profiler; extra == 'dev' Requires-Dist: mne-bids; extra == 'dev' Requires-Dist: mne-connectivity; extra == 'dev' Requires-Dist: mne-gui-addons; extra == 'dev' Requires-Dist: mypy; extra == 'dev' Requires-Dist: neo; extra == 'dev' Requires-Dist: numpydoc; extra == 'dev' Requires-Dist: pre-commit; extra == 'dev' Requires-Dist: pydata-sphinx-theme>=0.15.2; extra == 'dev' Requires-Dist: pygments>=2.13; extra == 'dev' Requires-Dist: pytest; extra == 'dev' Requires-Dist: pytest-cov; extra == 'dev' Requires-Dist: pytest-qt; extra == 'dev' Requires-Dist: pytest-timeout; extra == 'dev' Requires-Dist: pytest>=8.0.0rc2; extra == 'dev' Requires-Dist: pyxdf; extra == 'dev' Requires-Dist: pyzmq!=24.0.0; extra == 'dev' Requires-Dist: rcssmin; extra == 'dev' Requires-Dist: ruff; extra == 'dev' Requires-Dist: seaborn!=0.11.2; extra == 'dev' Requires-Dist: selenium; extra == 'dev' Requires-Dist: sphinx-copybutton; extra == 'dev' Requires-Dist: sphinx-design; extra == 'dev' Requires-Dist: sphinx-gallery>=0.16; extra == 'dev' Requires-Dist: sphinx>=6; extra == 'dev' Requires-Dist: sphinxcontrib-bibtex>=2.5; extra == 'dev' Requires-Dist: sphinxcontrib-towncrier; extra == 'dev' Requires-Dist: sphinxcontrib-youtube; extra == 'dev' Requires-Dist: tomli; (python_version < '3.11') and extra == 'dev' Requires-Dist: towncrier<24.7; extra == 'dev' Requires-Dist: twine; extra == 'dev' Requires-Dist: vulture; extra == 'dev' Requires-Dist: wheel; extra == 'dev' Provides-Extra: doc Requires-Dist: graphviz; extra == 'doc' Requires-Dist: intersphinx-registry>=0.2405.27; extra == 'doc' Requires-Dist: ipython!=8.7.0; extra == 'doc' Requires-Dist: memory-profiler; extra == 'doc' Requires-Dist: mne-bids; extra == 'doc' Requires-Dist: mne-connectivity; extra == 'doc' Requires-Dist: mne-gui-addons; extra == 'doc' Requires-Dist: neo; extra == 'doc' Requires-Dist: numpydoc; extra == 'doc' Requires-Dist: pydata-sphinx-theme>=0.15.2; extra == 'doc' Requires-Dist: pygments>=2.13; extra == 'doc' Requires-Dist: pytest; extra == 'doc' Requires-Dist: pyxdf; extra == 'doc' Requires-Dist: pyzmq!=24.0.0; extra == 'doc' Requires-Dist: seaborn!=0.11.2; extra == 'doc' Requires-Dist: selenium; extra == 'doc' Requires-Dist: sphinx-copybutton; extra == 'doc' Requires-Dist: sphinx-design; extra == 'doc' Requires-Dist: sphinx-gallery>=0.16; extra == 'doc' Requires-Dist: sphinx>=6; extra == 'doc' Requires-Dist: sphinxcontrib-bibtex>=2.5; extra == 'doc' Requires-Dist: sphinxcontrib-towncrier; extra == 'doc' Requires-Dist: sphinxcontrib-youtube; extra == 'doc' Requires-Dist: towncrier<24.7; extra == 'doc' Provides-Extra: full Requires-Dist: darkdetect; extra == 'full' Requires-Dist: defusedxml; extra == 'full' Requires-Dist: dipy; extra == 'full' Requires-Dist: edfio>=0.2.1; extra == 'full' Requires-Dist: eeglabio; extra == 'full' Requires-Dist: h5io>=0.2.4; extra == 'full' Requires-Dist: h5py; extra == 'full' Requires-Dist: imageio-ffmpeg>=0.4.1; extra == 'full' Requires-Dist: imageio>=2.6.1; extra == 'full' Requires-Dist: ipyevents; extra == 'full' Requires-Dist: ipympl; extra == 'full' Requires-Dist: ipywidgets; extra == 'full' Requires-Dist: joblib; extra == 'full' Requires-Dist: jupyter; extra == 'full' Requires-Dist: mffpy>=0.5.7; extra == 'full' Requires-Dist: mne-qt-browser; extra == 'full' Requires-Dist: neo; extra == 'full' Requires-Dist: nibabel; extra == 'full' Requires-Dist: nilearn; extra == 'full' Requires-Dist: numba; extra == 'full' Requires-Dist: openmeeg>=2.5.5; extra == 'full' Requires-Dist: pandas; extra == 'full' Requires-Dist: psutil; extra == 'full' Requires-Dist: pyarrow; extra == 'full' Requires-Dist: pybv; extra == 'full' Requires-Dist: pymatreader; extra == 'full' Requires-Dist: pyobjc-framework-cocoa>=5.2.0; (platform_system == 'Darwin') and extra == 'full' Requires-Dist: pyqt6!=6.6.0; extra == 'full' Requires-Dist: pyqt6-qt6!=6.6.0,!=6.7.0; extra == 'full' Requires-Dist: python-picard; extra == 'full' Requires-Dist: pyvista!=0.35.2,!=0.38.0,!=0.38.1,!=0.38.2,!=0.38.3,!=0.38.4,!=0.38.5,!=0.38.6,!=0.42.0,>=0.32; extra == 'full' Requires-Dist: pyvistaqt>=0.4; extra == 'full' Requires-Dist: qdarkstyle!=3.2.2; extra == 'full' Requires-Dist: qtpy; extra == 'full' Requires-Dist: scikit-learn; extra == 'full' Requires-Dist: sip; extra == 'full' Requires-Dist: snirf; extra == 'full' Requires-Dist: statsmodels; extra == 'full' Requires-Dist: threadpoolctl; extra == 'full' Requires-Dist: traitlets; extra == 'full' Requires-Dist: trame; extra == 'full' Requires-Dist: trame-vtk; extra == 'full' Requires-Dist: trame-vuetify; extra == 'full' Requires-Dist: vtk; extra == 'full' Requires-Dist: xlrd; extra == 'full' Provides-Extra: full-no-qt Requires-Dist: darkdetect; extra == 'full-no-qt' Requires-Dist: defusedxml; extra == 'full-no-qt' Requires-Dist: dipy; extra == 'full-no-qt' Requires-Dist: edfio>=0.2.1; extra == 'full-no-qt' Requires-Dist: eeglabio; extra == 'full-no-qt' Requires-Dist: h5io>=0.2.4; extra == 'full-no-qt' Requires-Dist: h5py; extra == 'full-no-qt' Requires-Dist: imageio-ffmpeg>=0.4.1; extra == 'full-no-qt' Requires-Dist: imageio>=2.6.1; extra == 'full-no-qt' Requires-Dist: ipyevents; extra == 'full-no-qt' Requires-Dist: ipympl; extra == 'full-no-qt' Requires-Dist: ipywidgets; extra == 'full-no-qt' Requires-Dist: joblib; extra == 'full-no-qt' Requires-Dist: jupyter; extra == 'full-no-qt' Requires-Dist: mffpy>=0.5.7; extra == 'full-no-qt' Requires-Dist: mne-qt-browser; extra == 'full-no-qt' Requires-Dist: neo; extra == 'full-no-qt' Requires-Dist: nibabel; extra == 'full-no-qt' Requires-Dist: nilearn; extra == 'full-no-qt' Requires-Dist: numba; extra == 'full-no-qt' Requires-Dist: openmeeg>=2.5.5; extra == 'full-no-qt' Requires-Dist: pandas; extra == 'full-no-qt' Requires-Dist: psutil; extra == 'full-no-qt' Requires-Dist: pyarrow; extra == 'full-no-qt' Requires-Dist: pybv; extra == 'full-no-qt' Requires-Dist: pymatreader; extra == 'full-no-qt' Requires-Dist: pyobjc-framework-cocoa>=5.2.0; (platform_system == 'Darwin') and extra == 'full-no-qt' Requires-Dist: python-picard; extra == 'full-no-qt' Requires-Dist: pyvista!=0.35.2,!=0.38.0,!=0.38.1,!=0.38.2,!=0.38.3,!=0.38.4,!=0.38.5,!=0.38.6,!=0.42.0,>=0.32; extra == 'full-no-qt' Requires-Dist: pyvistaqt>=0.4; extra == 'full-no-qt' Requires-Dist: qdarkstyle!=3.2.2; extra == 'full-no-qt' Requires-Dist: qtpy; extra == 'full-no-qt' Requires-Dist: scikit-learn; extra == 'full-no-qt' Requires-Dist: sip; extra == 'full-no-qt' Requires-Dist: snirf; extra == 'full-no-qt' Requires-Dist: statsmodels; extra == 'full-no-qt' Requires-Dist: threadpoolctl; extra == 'full-no-qt' Requires-Dist: traitlets; extra == 'full-no-qt' Requires-Dist: trame; extra == 'full-no-qt' Requires-Dist: trame-vtk; extra == 'full-no-qt' Requires-Dist: trame-vuetify; extra == 'full-no-qt' Requires-Dist: vtk; extra == 'full-no-qt' Requires-Dist: xlrd; extra == 'full-no-qt' Provides-Extra: full-pyqt6 Requires-Dist: darkdetect; extra == 'full-pyqt6' Requires-Dist: defusedxml; extra == 'full-pyqt6' Requires-Dist: dipy; extra == 'full-pyqt6' Requires-Dist: edfio>=0.2.1; extra == 'full-pyqt6' Requires-Dist: eeglabio; extra == 'full-pyqt6' Requires-Dist: h5io>=0.2.4; extra == 'full-pyqt6' Requires-Dist: h5py; extra == 'full-pyqt6' Requires-Dist: imageio-ffmpeg>=0.4.1; extra == 'full-pyqt6' Requires-Dist: imageio>=2.6.1; extra == 'full-pyqt6' Requires-Dist: ipyevents; extra == 'full-pyqt6' Requires-Dist: ipympl; extra == 'full-pyqt6' Requires-Dist: ipywidgets; extra == 'full-pyqt6' Requires-Dist: joblib; extra == 'full-pyqt6' Requires-Dist: jupyter; extra == 'full-pyqt6' Requires-Dist: mffpy>=0.5.7; extra == 'full-pyqt6' Requires-Dist: mne-qt-browser; extra == 'full-pyqt6' Requires-Dist: neo; extra == 'full-pyqt6' Requires-Dist: nibabel; extra == 'full-pyqt6' Requires-Dist: nilearn; extra == 'full-pyqt6' Requires-Dist: numba; extra == 'full-pyqt6' Requires-Dist: openmeeg>=2.5.5; extra == 'full-pyqt6' Requires-Dist: pandas; extra == 'full-pyqt6' Requires-Dist: psutil; extra == 'full-pyqt6' Requires-Dist: pyarrow; extra == 'full-pyqt6' Requires-Dist: pybv; extra == 'full-pyqt6' Requires-Dist: pymatreader; extra == 'full-pyqt6' Requires-Dist: pyobjc-framework-cocoa>=5.2.0; (platform_system == 'Darwin') and extra == 'full-pyqt6' Requires-Dist: pyqt6!=6.6.0; extra == 'full-pyqt6' Requires-Dist: pyqt6-qt6!=6.6.0,!=6.7.0; extra == 'full-pyqt6' Requires-Dist: python-picard; extra == 'full-pyqt6' Requires-Dist: pyvista!=0.35.2,!=0.38.0,!=0.38.1,!=0.38.2,!=0.38.3,!=0.38.4,!=0.38.5,!=0.38.6,!=0.42.0,>=0.32; extra == 'full-pyqt6' Requires-Dist: pyvistaqt>=0.4; extra == 'full-pyqt6' Requires-Dist: qdarkstyle!=3.2.2; extra == 'full-pyqt6' Requires-Dist: qtpy; extra == 'full-pyqt6' Requires-Dist: scikit-learn; extra == 'full-pyqt6' Requires-Dist: sip; extra == 'full-pyqt6' Requires-Dist: snirf; extra == 'full-pyqt6' Requires-Dist: statsmodels; extra == 'full-pyqt6' Requires-Dist: threadpoolctl; extra == 'full-pyqt6' Requires-Dist: traitlets; extra == 'full-pyqt6' Requires-Dist: trame; extra == 'full-pyqt6' Requires-Dist: trame-vtk; extra == 'full-pyqt6' Requires-Dist: trame-vuetify; extra == 'full-pyqt6' Requires-Dist: vtk; extra == 'full-pyqt6' Requires-Dist: xlrd; extra == 'full-pyqt6' Provides-Extra: full-pyside6 Requires-Dist: darkdetect; extra == 'full-pyside6' Requires-Dist: defusedxml; extra == 'full-pyside6' Requires-Dist: dipy; extra == 'full-pyside6' Requires-Dist: edfio>=0.2.1; extra == 'full-pyside6' Requires-Dist: eeglabio; extra == 'full-pyside6' Requires-Dist: h5io>=0.2.4; extra == 'full-pyside6' Requires-Dist: h5py; extra == 'full-pyside6' Requires-Dist: imageio-ffmpeg>=0.4.1; extra == 'full-pyside6' Requires-Dist: imageio>=2.6.1; extra == 'full-pyside6' Requires-Dist: ipyevents; extra == 'full-pyside6' Requires-Dist: ipympl; extra == 'full-pyside6' Requires-Dist: ipywidgets; extra == 'full-pyside6' Requires-Dist: joblib; extra == 'full-pyside6' Requires-Dist: jupyter; extra == 'full-pyside6' Requires-Dist: mffpy>=0.5.7; extra == 'full-pyside6' Requires-Dist: mne-qt-browser; extra == 'full-pyside6' Requires-Dist: neo; extra == 'full-pyside6' Requires-Dist: nibabel; extra == 'full-pyside6' Requires-Dist: nilearn; extra == 'full-pyside6' Requires-Dist: numba; extra == 'full-pyside6' Requires-Dist: openmeeg>=2.5.5; extra == 'full-pyside6' Requires-Dist: pandas; extra == 'full-pyside6' Requires-Dist: psutil; extra == 'full-pyside6' Requires-Dist: pyarrow; extra == 'full-pyside6' Requires-Dist: pybv; extra == 'full-pyside6' Requires-Dist: pymatreader; extra == 'full-pyside6' Requires-Dist: pyobjc-framework-cocoa>=5.2.0; (platform_system == 'Darwin') and extra == 'full-pyside6' Requires-Dist: pyside6!=6.7.0; extra == 'full-pyside6' Requires-Dist: python-picard; extra == 'full-pyside6' Requires-Dist: pyvista!=0.35.2,!=0.38.0,!=0.38.1,!=0.38.2,!=0.38.3,!=0.38.4,!=0.38.5,!=0.38.6,!=0.42.0,>=0.32; extra == 'full-pyside6' Requires-Dist: pyvistaqt>=0.4; extra == 'full-pyside6' Requires-Dist: qdarkstyle!=3.2.2; extra == 'full-pyside6' Requires-Dist: qtpy; extra == 'full-pyside6' Requires-Dist: scikit-learn; extra == 'full-pyside6' Requires-Dist: sip; extra == 'full-pyside6' Requires-Dist: snirf; extra == 'full-pyside6' Requires-Dist: statsmodels; extra == 'full-pyside6' Requires-Dist: threadpoolctl; extra == 'full-pyside6' Requires-Dist: traitlets; extra == 'full-pyside6' Requires-Dist: trame; extra == 'full-pyside6' Requires-Dist: trame-vtk; extra == 'full-pyside6' Requires-Dist: trame-vuetify; extra == 'full-pyside6' Requires-Dist: vtk; extra == 'full-pyside6' Requires-Dist: xlrd; extra == 'full-pyside6' Provides-Extra: hdf5 Requires-Dist: h5io>=0.2.4; extra == 'hdf5' Requires-Dist: pymatreader; extra == 'hdf5' Provides-Extra: test Requires-Dist: codespell; extra == 'test' Requires-Dist: mypy; extra == 'test' Requires-Dist: numpydoc; extra == 'test' Requires-Dist: pre-commit; extra == 'test' Requires-Dist: pytest-cov; extra == 'test' Requires-Dist: pytest-qt; extra == 'test' Requires-Dist: pytest-timeout; extra == 'test' Requires-Dist: pytest>=8.0.0rc2; extra == 'test' Requires-Dist: ruff; extra == 'test' Requires-Dist: tomli; (python_version < '3.11') and extra == 'test' Requires-Dist: twine; extra == 'test' Requires-Dist: vulture; extra == 'test' Requires-Dist: wheel; extra == 'test' Provides-Extra: test-extra Requires-Dist: codespell; extra == 'test-extra' Requires-Dist: edfio>=0.2.1; extra == 'test-extra' Requires-Dist: eeglabio; extra == 'test-extra' Requires-Dist: imageio-ffmpeg>=0.4.1; extra == 'test-extra' Requires-Dist: imageio>=2.6.1; extra == 'test-extra' Requires-Dist: mne-bids; extra == 'test-extra' Requires-Dist: mypy; extra == 'test-extra' Requires-Dist: nbclient; extra == 'test-extra' Requires-Dist: neo; extra == 'test-extra' Requires-Dist: nitime; extra == 'test-extra' Requires-Dist: numpydoc; extra == 'test-extra' Requires-Dist: pre-commit; extra == 'test-extra' Requires-Dist: pybv; extra == 'test-extra' Requires-Dist: pytest-cov; extra == 'test-extra' Requires-Dist: pytest-qt; extra == 'test-extra' Requires-Dist: pytest-timeout; extra == 'test-extra' Requires-Dist: pytest>=8.0.0rc2; extra == 'test-extra' Requires-Dist: ruff; extra == 'test-extra' Requires-Dist: snirf; extra == 'test-extra' Requires-Dist: sphinx-gallery; extra == 'test-extra' Requires-Dist: statsmodels; extra == 'test-extra' Requires-Dist: tomli; (python_version < '3.11') and extra == 'test-extra' Requires-Dist: twine; extra == 'test-extra' Requires-Dist: vulture; extra == 'test-extra' Requires-Dist: wheel; extra == 'test-extra' Description-Content-Type: text/x-rst .. -*- mode: rst -*- |MNE| MNE-Python ========== MNE-Python is an open-source Python package for exploring, visualizing, and analyzing human neurophysiological data such as MEG, EEG, sEEG, ECoG, and more. It includes modules for data input/output, preprocessing, visualization, source estimation, time-frequency analysis, connectivity analysis, machine learning, statistics, and more. Documentation ^^^^^^^^^^^^^ `Documentation`_ for MNE-Python encompasses installation instructions, tutorials, and examples for a wide variety of topics, contributing guidelines, and an API reference. Forum ^^^^^^ The `user forum`_ is the best place to ask questions about MNE-Python usage or the contribution process. The forum also features job opportunities and other announcements. If you find a bug or have an idea for a new feature that should be added to MNE-Python, please use the `issue tracker `__ of our GitHub repository. Installation ^^^^^^^^^^^^ To install the latest stable version of MNE-Python with minimal dependencies only, use pip_ in a terminal: .. code-block:: console $ pip install --upgrade mne The current MNE-Python release requires Python 3.9 or higher. MNE-Python 0.17 was the last release to support Python 2.7. For more complete instructions, including our standalone installers and more advanced installation methods, please refer to the `installation guide`_. Get the development version ^^^^^^^^^^^^^^^^^^^^^^^^^^^ To install the latest development version of MNE-Python using pip_, open a terminal and type: .. code-block:: console $ pip install --upgrade https://github.com/mne-tools/mne-python/archive/refs/heads/main.zip To clone the repository with `git `__, open a terminal and type: .. code-block:: console $ git clone https://github.com/mne-tools/mne-python.git Dependencies ^^^^^^^^^^^^ The minimum required dependencies to run MNE-Python are: - `Python `__ ≥ 3.9 - `NumPy `__ ≥ 1.23 - `SciPy `__ ≥ 1.9 - `Matplotlib `__ ≥ 3.6 - `Pooch `__ ≥ 1.5 - `tqdm `__ - `Jinja2 `__ - `decorator `__ - `lazy_loader `__ For full functionality, some functions require: - `scikit-learn `__ ≥ 1.1 - `Joblib `__ ≥ 0.15 (for parallelization) - `mne-qt-browser `__ ≥ 0.5 (for fast raw data visualization) - `Qt `__ ≥ 5.15 via one of the following bindings (for fast raw data visualization and interactive 3D visualization): - `PySide6 `__ ≥ 6.0 - `PyQt6 `__ ≥ 6.0 - `PyQt5 `__ ≥ 5.15 - `Numba `__ ≥ 0.54.0 - `NiBabel `__ ≥ 3.2.1 - `OpenMEEG `__ ≥ 2.5.6 - `pandas `__ ≥ 1.3.2 - `Picard `__ ≥ 0.3 - `CuPy `__ ≥ 9.0.0 (for NVIDIA CUDA acceleration) - `DIPY `__ ≥ 1.4.0 - `imageio `__ ≥ 2.8.0 - `PyVista `__ ≥ 0.32 (for 3D visualization) - `PyVistaQt `__ ≥ 0.4 (for 3D visualization) - `mffpy `__ ≥ 0.5.7 - `h5py `__ - `h5io `__ - `pymatreader `__ Contributing ^^^^^^^^^^^^ Please see the `contributing guidelines `__ on our documentation website. About ^^^^^ +---------+------------+----------------+ | CI | |Codecov| | |Bandit| | +---------+------------+----------------+ | Package | |PyPI| | |conda-forge| | +---------+------------+----------------+ | Docs | |Docs| | |Discourse| | +---------+------------+----------------+ | Meta | |Zenodo| | |OpenSSF| | +---------+------------+----------------+ License ^^^^^^^ MNE-Python is licensed under the BSD-3-Clause license. .. _Documentation: https://mne.tools/dev/ .. _user forum: https://mne.discourse.group .. _installation guide: https://mne.tools/dev/install/index.html .. _pip: https://pip.pypa.io/en/stable/ .. |PyPI| image:: https://img.shields.io/pypi/dm/mne.svg?label=PyPI :target: https://pypi.org/project/mne/ .. |conda-forge| image:: https://img.shields.io/conda/dn/conda-forge/mne.svg?label=Conda :target: https://anaconda.org/conda-forge/mne .. |Docs| image:: https://img.shields.io/badge/Docs-online-green?label=Documentation :target: https://mne.tools/dev/ .. |Zenodo| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.592483.svg :target: https://doi.org/10.5281/zenodo.592483 .. |Discourse| image:: https://img.shields.io/discourse/status?label=Forum&server=https%3A%2F%2Fmne.discourse.group%2F :target: https://mne.discourse.group/ .. |Codecov| image:: https://img.shields.io/codecov/c/github/mne-tools/mne-python?label=Coverage :target: https://codecov.io/gh/mne-tools/mne-python .. |Bandit| image:: https://img.shields.io/badge/Security-Bandit-yellow.svg :target: https://github.com/PyCQA/bandit .. |OpenSSF| image:: https://www.bestpractices.dev/projects/7783/badge :target: https://www.bestpractices.dev/projects/7783 .. |MNE| image:: https://mne.tools/dev/_static/mne_logo_gray.svg :target: https://mne.tools/dev/