Braindecode 1.6.1.dev1037__tar.gz → 1.6.1.dev1041__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {braindecode-1.6.1.dev1037/braindecode.egg-info → braindecode-1.6.1.dev1041}/PKG-INFO +2 -2
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/moabb.py +10 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/__init__.py +2 -3
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/attn_sleep.py +10 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/eegnet.py +10 -1
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/summary.csv +0 -1
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/tsinception.py +11 -1
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/util.py +2 -1
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/modules/__init__.py +1 -2
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/modules/blocks.py +0 -82
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/preprocessing/mne_preprocess.py +1 -28
- braindecode-1.6.1.dev1041/braindecode/version.py +1 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041/braindecode.egg-info}/PKG-INFO +2 -2
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode.egg-info/SOURCES.txt +0 -1
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode.egg-info/requires.txt +1 -1
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/api.rst +0 -2
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/index.rst +4 -4
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/whats_new.rst +2 -30
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/pyproject.toml +1 -7
- braindecode-1.6.1.dev1037/braindecode/models/eegdino.py +0 -533
- braindecode-1.6.1.dev1037/braindecode/version.py +0 -1
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/LICENSE.txt +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/MANIFEST.in +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/NOTICE.txt +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/README.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/__init__.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/augmentation/__init__.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/augmentation/base.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/augmentation/functional.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/augmentation/transforms.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/classifier.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/__init__.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/base.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/bbci.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/bcicomp.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/bids/__init__.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/bids/datasets.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/bids/format.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/bids/hub.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/bids/hub_format.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/bids/hub_io.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/bids/hub_validation.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/bids/iterable.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/chb_mit.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/mne.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/nmt.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/registry.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/siena.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/sleep_physio_challe_18.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/sleep_physionet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/tuh.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/utils.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datasets/xy.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datautil/__init__.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datautil/channel_utils.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datautil/hub_formats.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datautil/serialization.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/datautil/util.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/eegneuralnet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/functional/__init__.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/functional/functions.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/functional/initialization.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/atcnet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/attentionbasenet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/base.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/bendr.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/biot.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/brainmodule.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/cbramod.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/codebrain.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/config.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/contrawr.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/ctnet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/deep4.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/deepsleepnet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/dgcnn.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/eegconformer.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/eeginception_erp.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/eeginception_mi.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/eegitnet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/eegminer.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/eegnex.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/eegpt.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/eegsimpleconv.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/eegsym.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/eegtcnet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/emg2qwerty.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/fbcnet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/fblightconvnet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/fbmsnet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/hybrid.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/ifnet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/interpolated.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/labram.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/luna.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/medformer.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/meta_neuromotor.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/msvtnet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/patchedtransformer.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/reve.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/sccnet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/shallow_fbcsp.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/signal_jepa.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/sinc_shallow.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/sparcnet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/sstdpn.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/syncnet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/tcn.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/tidnet.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/models/usleep.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/modules/activation.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/modules/attention.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/modules/convolution.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/modules/filter.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/modules/interpolation.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/modules/layers.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/modules/linear.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/modules/parametrization.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/modules/stats.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/modules/util.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/modules/wrapper.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/preprocessing/__init__.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/preprocessing/eegprep_preprocess.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/preprocessing/preprocess.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/preprocessing/util.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/preprocessing/windowers.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/regressor.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/samplers/__init__.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/samplers/base.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/samplers/ssl.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/training/__init__.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/training/callbacks.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/training/losses.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/training/scoring.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/util.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/visualization/__init__.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/visualization/attribution.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/visualization/confusion_matrices.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/visualization/frequency.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/visualization/metrics.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/visualization/sanity.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/visualization/topology.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode.egg-info/dependency_links.txt +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode.egg-info/top_level.txt +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/Makefile +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/_templates/autosummary/class.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/_templates/autosummary/class_in_subdir.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/_templates/autosummary/function.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/_templates/autosummary/function_in_subdir.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/cite.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/conf.py +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/help.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/install/install.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/install/install_pip.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/install/install_source.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/models/categorization/attention.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/models/categorization/channel.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/models/categorization/convolution.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/models/categorization/filterbank.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/models/categorization/gnn.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/models/categorization/interpretable.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/models/categorization/lbm.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/models/categorization/recurrent.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/models/categorization/spd.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/models/models.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/models/models_categorization.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/models/models_table.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/models/models_visualization.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/docs/sg_execution_times.rst +0 -0
- {braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: braindecode
|
|
3
|
-
Version: 1.6.1.
|
|
3
|
+
Version: 1.6.1.dev1041
|
|
4
4
|
Summary: Deep learning software to decode EEG, ECG or MEG signals
|
|
5
5
|
Author-email: Robin Tibor Schirrmeister <robintibor@gmail.com>, Bruno Aristimunha Pinto <b.aristimunha@gmail.com>, Alexandre Gramfort <agramfort@meta.com>
|
|
6
6
|
Maintainer-email: Alexandre Gramfort <agramfort@meta.com>, Bruno Aristimunha Pinto <b.aristimunha@gmail.com>, Robin Tibor Schirrmeister <robintibor@gmail.com>
|
|
@@ -46,7 +46,7 @@ Requires-Dist: zarr>=3.0; extra == "hub"
|
|
|
46
46
|
Provides-Extra: viz
|
|
47
47
|
Requires-Dist: captum>=0.7.0; extra == "viz"
|
|
48
48
|
Provides-Extra: tests
|
|
49
|
-
Requires-Dist: pytest
|
|
49
|
+
Requires-Dist: pytest; extra == "tests"
|
|
50
50
|
Requires-Dist: pytest-cov; extra == "tests"
|
|
51
51
|
Requires-Dist: codecov; extra == "tests"
|
|
52
52
|
Requires-Dist: pytest_cases; extra == "tests"
|
|
@@ -15,6 +15,7 @@ from typing import Any
|
|
|
15
15
|
|
|
16
16
|
import mne
|
|
17
17
|
import pandas as pd
|
|
18
|
+
from mne.utils import deprecated
|
|
18
19
|
|
|
19
20
|
from braindecode.util import _update_moabb_docstring
|
|
20
21
|
|
|
@@ -207,3 +208,12 @@ class HGD(MOABBDataset):
|
|
|
207
208
|
|
|
208
209
|
def __init__(self, subject_ids):
|
|
209
210
|
super().__init__("Schirrmeister2017", subject_ids=subject_ids)
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
@deprecated(
|
|
214
|
+
"`BNCI2014001` was renamed to `BNCI2014_001` in v1.13; this alias will be removed in v1.14."
|
|
215
|
+
)
|
|
216
|
+
class BNCI2014001(BNCI2014_001):
|
|
217
|
+
"""Deprecated alias for BNCI2014001."""
|
|
218
|
+
|
|
219
|
+
pass
|
|
@@ -15,12 +15,11 @@ from .deep4 import Deep4Net
|
|
|
15
15
|
from .deepsleepnet import DeepSleepNet
|
|
16
16
|
from .dgcnn import DGCNN
|
|
17
17
|
from .eegconformer import EEGConformer
|
|
18
|
-
from .eegdino import EEGDINO
|
|
19
18
|
from .eeginception_erp import EEGInceptionERP
|
|
20
19
|
from .eeginception_mi import EEGInceptionMI
|
|
21
20
|
from .eegitnet import EEGITNet
|
|
22
21
|
from .eegminer import EEGMiner
|
|
23
|
-
from .eegnet import EEGNet
|
|
22
|
+
from .eegnet import EEGNet, EEGNetv4
|
|
24
23
|
from .eegnex import EEGNeX
|
|
25
24
|
from .eegpt import EEGPT, InterpolatedEEGPT
|
|
26
25
|
from .eegsimpleconv import EEGSimpleConv
|
|
@@ -85,7 +84,6 @@ __all__ = [
|
|
|
85
84
|
"DeepSleepNet",
|
|
86
85
|
"BrainModule",
|
|
87
86
|
"EEGConformer",
|
|
88
|
-
"EEGDINO",
|
|
89
87
|
"EEGPT",
|
|
90
88
|
"InterpolatedEEGPT",
|
|
91
89
|
"EEGInceptionERP",
|
|
@@ -93,6 +91,7 @@ __all__ = [
|
|
|
93
91
|
"EEGITNet",
|
|
94
92
|
"EEGMiner",
|
|
95
93
|
"EEGNet",
|
|
94
|
+
"EEGNetv4",
|
|
96
95
|
"EEGNeX",
|
|
97
96
|
"EEGSym",
|
|
98
97
|
"EEGSimpleConv",
|
|
@@ -8,6 +8,7 @@ from copy import deepcopy
|
|
|
8
8
|
|
|
9
9
|
import torch
|
|
10
10
|
import torch.nn.functional as F
|
|
11
|
+
from mne.utils import deprecated
|
|
11
12
|
from torch import nn
|
|
12
13
|
|
|
13
14
|
from braindecode.models.base import EEGModuleMixin
|
|
@@ -537,3 +538,12 @@ class _PositionwiseFeedForward(nn.Module):
|
|
|
537
538
|
def forward(self, x: torch.Tensor) -> torch.Tensor:
|
|
538
539
|
"""Implements FFN equation."""
|
|
539
540
|
return self.w_2(self.dropout(self.activate(self.w_1(x))))
|
|
541
|
+
|
|
542
|
+
|
|
543
|
+
@deprecated(
|
|
544
|
+
"`SleepStagerEldele2021` was renamed to `AttnSleep` in v1.12 to follow original author's name; this alias will be removed in v1.14."
|
|
545
|
+
)
|
|
546
|
+
class SleepStagerEldele2021(AttnSleep):
|
|
547
|
+
r"""Deprecated alias for SleepStagerEldele2021."""
|
|
548
|
+
|
|
549
|
+
pass
|
|
@@ -6,7 +6,7 @@ from __future__ import annotations
|
|
|
6
6
|
from typing import Dict, Optional
|
|
7
7
|
|
|
8
8
|
from einops.layers.torch import Rearrange
|
|
9
|
-
from mne.utils import warn
|
|
9
|
+
from mne.utils import deprecated, warn
|
|
10
10
|
from torch import nn
|
|
11
11
|
|
|
12
12
|
from braindecode.functional import glorot_weight_zero_bias
|
|
@@ -348,3 +348,12 @@ class EEGNet(EEGModuleMixin, nn.Sequential):
|
|
|
348
348
|
self.add_module("final_layer", module)
|
|
349
349
|
|
|
350
350
|
glorot_weight_zero_bias(self)
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
@deprecated(
|
|
354
|
+
"`EEGNetv4` was renamed to `EEGNet` in v1.12; this alias will be removed in v1.14."
|
|
355
|
+
)
|
|
356
|
+
class EEGNetv4(EEGNet):
|
|
357
|
+
r"""Deprecated alias for EEGNet."""
|
|
358
|
+
|
|
359
|
+
pass
|
|
@@ -56,4 +56,3 @@ InterpolatedBIOT,"Sleep Staging, Epilepsy",Classification,200,"chs_info, n_outpu
|
|
|
56
56
|
InterpolatedEEGPT,General,Classification,256,"chs_info, n_outputs, n_times",25323137,"InterpolatedEEGPT(chs_info=<user>, n_outputs=4, n_times=1024)","Foundation Model,Attention/Transformer,Channel"
|
|
57
57
|
InterpolatedLaBraM,General,"Classification, Embedding",200,"chs_info, n_outputs, n_times",5866196,"InterpolatedLaBraM(chs_info=<user>, n_outputs=4, n_times=1000)","Convolution,Foundation Model,Channel"
|
|
58
58
|
InterpolatedSignalJEPA,"Motor Imagery, ERP, SSVEP",Embedding,128,"chs_info",3456882,"InterpolatedSignalJEPA(chs_info=<user>)","Convolution,Channel,Foundation Model"
|
|
59
|
-
EEGDINO,General,Classification,200,"n_chans, n_outputs, n_times",4539698,"EEGDINO(n_chans=19, n_outputs=4, n_times=1000)","Foundation Model,Attention/Transformer"
|
|
@@ -7,7 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
import torch
|
|
8
8
|
import torch.nn as nn
|
|
9
9
|
from einops.layers.torch import Rearrange
|
|
10
|
-
from mne.utils import warn
|
|
10
|
+
from mne.utils import deprecated, warn
|
|
11
11
|
|
|
12
12
|
from braindecode.models.base import EEGModuleMixin
|
|
13
13
|
|
|
@@ -283,3 +283,13 @@ class TSception(EEGModuleMixin, nn.Module):
|
|
|
283
283
|
activation(),
|
|
284
284
|
nn.AvgPool2d(kernel_size=(1, pool_size), stride=(1, pool_size)),
|
|
285
285
|
)
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
@deprecated(
|
|
289
|
+
"`TSceptionV1` was renamed to `TSception` in v1.12; "
|
|
290
|
+
"this alias will be removed in v1.14."
|
|
291
|
+
)
|
|
292
|
+
class TSceptionV1(TSception):
|
|
293
|
+
r"""Deprecated alias for TSception."""
|
|
294
|
+
|
|
295
|
+
pass
|
|
@@ -189,6 +189,8 @@ def _init_models_dict():
|
|
|
189
189
|
issubclass(m[1], models.base.EEGModuleMixin)
|
|
190
190
|
and m[1] != models.base.EEGModuleMixin
|
|
191
191
|
):
|
|
192
|
+
if m[1].__name__ == "EEGNetv4":
|
|
193
|
+
continue
|
|
192
194
|
models_dict[m[0]] = m[1]
|
|
193
195
|
|
|
194
196
|
|
|
@@ -432,7 +434,6 @@ models_mandatory_parameters: list[
|
|
|
432
434
|
{"n_chans": 19, "n_times": 6000},
|
|
433
435
|
),
|
|
434
436
|
("DGCNN", ["n_chans", "n_outputs", "n_times", "chs_info"], None),
|
|
435
|
-
("EEGDINO", ["n_chans", "n_outputs", "n_times"], None),
|
|
436
437
|
]
|
|
437
438
|
|
|
438
439
|
################################################################
|
|
@@ -14,7 +14,7 @@ from .attention import (
|
|
|
14
14
|
MultiHeadAttention,
|
|
15
15
|
SqueezeAndExcitation,
|
|
16
16
|
)
|
|
17
|
-
from .blocks import MLP, FeedForwardBlock, InceptionBlock
|
|
17
|
+
from .blocks import MLP, FeedForwardBlock, InceptionBlock
|
|
18
18
|
from .convolution import (
|
|
19
19
|
AvgPool2dWithConv,
|
|
20
20
|
CausalConv1d,
|
|
@@ -68,7 +68,6 @@ __all__ = [
|
|
|
68
68
|
"MLP",
|
|
69
69
|
"FeedForwardBlock",
|
|
70
70
|
"InceptionBlock",
|
|
71
|
-
"PatchTokenizer",
|
|
72
71
|
"AvgPool2dWithConv",
|
|
73
72
|
"CausalConv1d",
|
|
74
73
|
"CombinedConv",
|
|
@@ -1,89 +1,7 @@
|
|
|
1
|
-
from warnings import warn
|
|
2
|
-
|
|
3
1
|
import torch
|
|
4
2
|
from torch import nn
|
|
5
3
|
|
|
6
4
|
|
|
7
|
-
class PatchTokenizer(nn.Module):
|
|
8
|
-
r"""Tokenize an EEG signal into non-overlapping temporal patches.
|
|
9
|
-
|
|
10
|
-
Transforms ``(batch, n_chans, n_times)`` into
|
|
11
|
-
``(batch, n_chans, n_patches, patch_dim)`` by splitting the time axis into
|
|
12
|
-
non-overlapping patches of ``patch_size`` samples. This is the shared
|
|
13
|
-
patch / "tokenization" step used by transformer EEG foundation models
|
|
14
|
-
(e.g. LaBraM, CBraMod, EEG-DINO).
|
|
15
|
-
|
|
16
|
-
As in the filter-bank models (:class:`~braindecode.models.FBCNet`,
|
|
17
|
-
:class:`~braindecode.models.FBMSNet`), when ``n_times`` is not a multiple of
|
|
18
|
-
``patch_size`` the input is right zero-padded (a warning is emitted at
|
|
19
|
-
construction); it is never an error.
|
|
20
|
-
|
|
21
|
-
Two modes:
|
|
22
|
-
|
|
23
|
-
- **non-learnable** (``learnable=False``, default): a pure reshape, so
|
|
24
|
-
``patch_dim == patch_size`` and the raw samples of each patch are kept
|
|
25
|
-
(the patch embedding, if any, lives in the model).
|
|
26
|
-
- **learnable** (``learnable=True``): a strided ``Conv1d`` (kernel and
|
|
27
|
-
stride equal to ``patch_size``, applied per channel) maps each patch to
|
|
28
|
-
``emb_dim`` features, so ``patch_dim == emb_dim``.
|
|
29
|
-
|
|
30
|
-
Parameters
|
|
31
|
-
----------
|
|
32
|
-
patch_size : int
|
|
33
|
-
Number of time samples per patch.
|
|
34
|
-
n_times : int
|
|
35
|
-
Number of time samples of the input, used to set up the right-padding
|
|
36
|
-
when ``n_times`` is not a multiple of ``patch_size``.
|
|
37
|
-
emb_dim : int, optional
|
|
38
|
-
Output features per patch in learnable mode. Defaults to ``patch_size``.
|
|
39
|
-
Ignored when ``learnable=False``.
|
|
40
|
-
learnable : bool, default=False
|
|
41
|
-
Whether the tokenizer is a learned convolution or a fixed reshape.
|
|
42
|
-
|
|
43
|
-
Examples
|
|
44
|
-
--------
|
|
45
|
-
>>> import torch
|
|
46
|
-
>>> from braindecode.modules import PatchTokenizer
|
|
47
|
-
>>> tokenizer = PatchTokenizer(patch_size=200, n_times=1000)
|
|
48
|
-
>>> tokenizer(torch.randn(2, 19, 1000)).shape
|
|
49
|
-
torch.Size([2, 19, 5, 200])
|
|
50
|
-
"""
|
|
51
|
-
|
|
52
|
-
def __init__(self, patch_size, n_times, emb_dim=None, learnable=False):
|
|
53
|
-
super().__init__()
|
|
54
|
-
self.patch_size = patch_size
|
|
55
|
-
self.learnable = learnable
|
|
56
|
-
self.emb_dim = (emb_dim or patch_size) if learnable else patch_size
|
|
57
|
-
if n_times % patch_size:
|
|
58
|
-
warn(
|
|
59
|
-
f"Time dimension ({n_times}) is not divisible by patch_size "
|
|
60
|
-
f"({patch_size}). Input will be padded.",
|
|
61
|
-
UserWarning,
|
|
62
|
-
)
|
|
63
|
-
self.padding_layer = nn.ConstantPad1d(
|
|
64
|
-
(0, patch_size - n_times % patch_size), 0.0
|
|
65
|
-
)
|
|
66
|
-
else:
|
|
67
|
-
self.padding_layer = nn.Identity()
|
|
68
|
-
# Defined unconditionally (Identity when not learnable) so the attribute
|
|
69
|
-
# always exists for torch.jit.script, which type-checks both branches.
|
|
70
|
-
if learnable:
|
|
71
|
-
self.patcher = nn.Conv1d(1, self.emb_dim, patch_size, stride=patch_size)
|
|
72
|
-
else:
|
|
73
|
-
self.patcher = nn.Identity()
|
|
74
|
-
|
|
75
|
-
def forward(self, x):
|
|
76
|
-
x = self.padding_layer(x)
|
|
77
|
-
batch_size, n_chans, _ = x.shape
|
|
78
|
-
if self.learnable:
|
|
79
|
-
x = x.flatten(0, 1).unsqueeze(1) # (batch * chans, 1, time)
|
|
80
|
-
x = self.patcher(x) # (batch * chans, emb, patches)
|
|
81
|
-
return x.reshape(batch_size, n_chans, x.shape[-2], x.shape[-1]).permute(
|
|
82
|
-
0, 1, 3, 2
|
|
83
|
-
)
|
|
84
|
-
return x.reshape(batch_size, n_chans, -1, self.patch_size)
|
|
85
|
-
|
|
86
|
-
|
|
87
5
|
class InceptionBlock(nn.Module):
|
|
88
6
|
"""
|
|
89
7
|
Inception block module.
|
{braindecode-1.6.1.dev1037 → braindecode-1.6.1.dev1041}/braindecode/preprocessing/mne_preprocess.py
RENAMED
|
@@ -13,28 +13,6 @@ import mne.preprocessing
|
|
|
13
13
|
from braindecode.preprocessing.preprocess import Preprocessor
|
|
14
14
|
from braindecode.util import _clean_docstring_sections
|
|
15
15
|
|
|
16
|
-
# Standalone MNE functions that are safe to wrap as a *callable* preprocessor.
|
|
17
|
-
#
|
|
18
|
-
# When ``fn`` is a callable and ``apply_on_array=False``, ``Preprocessor`` calls
|
|
19
|
-
# ``fn(raw, **kwargs)`` and reassigns the dataset to whatever ``fn`` returns. That
|
|
20
|
-
# is only correct for functions that return the modified ``Raw``/``Epochs``
|
|
21
|
-
# instance. Many standalone MNE functions instead return auxiliary data
|
|
22
|
-
# (annotations, a list of bad channels, a ``(inst, ...)`` tuple, ...), so passing
|
|
23
|
-
# them as callables would silently replace the recording with that auxiliary
|
|
24
|
-
# object. We therefore restrict the callable path to functions verified to return
|
|
25
|
-
# the modified instance; every other standalone function keeps the existing
|
|
26
|
-
# (string-name) behaviour. See :gh:`885`.
|
|
27
|
-
_SAFE_STANDALONE_FUNCTIONS = frozenset(
|
|
28
|
-
{
|
|
29
|
-
# returns the Raw with the CSD-transformed data
|
|
30
|
-
mne.preprocessing.compute_current_source_density,
|
|
31
|
-
# returns the Raw with the new bipolar reference channel
|
|
32
|
-
mne.set_bipolar_reference,
|
|
33
|
-
# returns the Raw with the OTP-cleaned data
|
|
34
|
-
mne.preprocessing.oversampled_temporal_projection,
|
|
35
|
-
}
|
|
36
|
-
)
|
|
37
|
-
|
|
38
16
|
|
|
39
17
|
def _is_standalone_function(func):
|
|
40
18
|
"""
|
|
@@ -101,12 +79,7 @@ def _generate_init_method(func, force_copy_false=False):
|
|
|
101
79
|
raise TypeError(
|
|
102
80
|
f"{func_name}() missing required arguments: {', '.join(mandatory)}"
|
|
103
81
|
)
|
|
104
|
-
|
|
105
|
-
# pass the callable itself so it is actually applied. Every other
|
|
106
|
-
# function keeps the legacy string-name behaviour (see #885 and
|
|
107
|
-
# ``_SAFE_STANDALONE_FUNCTIONS`` above).
|
|
108
|
-
fn = func if func in _SAFE_STANDALONE_FUNCTIONS else func_name
|
|
109
|
-
Preprocessor.__init__(self, fn=fn, apply_on_array=False, **init_kwargs)
|
|
82
|
+
Preprocessor.__init__(self, fn=func_name, apply_on_array=False, **init_kwargs)
|
|
110
83
|
|
|
111
84
|
init_method.__signature__ = inspect.signature(func)
|
|
112
85
|
return init_method
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.6.1.dev1041"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: braindecode
|
|
3
|
-
Version: 1.6.1.
|
|
3
|
+
Version: 1.6.1.dev1041
|
|
4
4
|
Summary: Deep learning software to decode EEG, ECG or MEG signals
|
|
5
5
|
Author-email: Robin Tibor Schirrmeister <robintibor@gmail.com>, Bruno Aristimunha Pinto <b.aristimunha@gmail.com>, Alexandre Gramfort <agramfort@meta.com>
|
|
6
6
|
Maintainer-email: Alexandre Gramfort <agramfort@meta.com>, Bruno Aristimunha Pinto <b.aristimunha@gmail.com>, Robin Tibor Schirrmeister <robintibor@gmail.com>
|
|
@@ -46,7 +46,7 @@ Requires-Dist: zarr>=3.0; extra == "hub"
|
|
|
46
46
|
Provides-Extra: viz
|
|
47
47
|
Requires-Dist: captum>=0.7.0; extra == "viz"
|
|
48
48
|
Provides-Extra: tests
|
|
49
|
-
Requires-Dist: pytest
|
|
49
|
+
Requires-Dist: pytest; extra == "tests"
|
|
50
50
|
Requires-Dist: pytest-cov; extra == "tests"
|
|
51
51
|
Requires-Dist: codecov; extra == "tests"
|
|
52
52
|
Requires-Dist: pytest_cases; extra == "tests"
|
|
@@ -67,7 +67,6 @@ braindecode/models/deep4.py
|
|
|
67
67
|
braindecode/models/deepsleepnet.py
|
|
68
68
|
braindecode/models/dgcnn.py
|
|
69
69
|
braindecode/models/eegconformer.py
|
|
70
|
-
braindecode/models/eegdino.py
|
|
71
70
|
braindecode/models/eeginception_erp.py
|
|
72
71
|
braindecode/models/eeginception_mi.py
|
|
73
72
|
braindecode/models/eegitnet.py
|
|
@@ -143,7 +143,6 @@ interface for all EEG models and can derive variable names when needed.
|
|
|
143
143
|
Deep4Net
|
|
144
144
|
DeepSleepNet
|
|
145
145
|
EEGConformer
|
|
146
|
-
EEGDINO
|
|
147
146
|
EEGInceptionERP
|
|
148
147
|
EEGInceptionMI
|
|
149
148
|
EEGITNet
|
|
@@ -256,7 +255,6 @@ perceptrons (MLPs) and inception blocks.
|
|
|
256
255
|
MLP
|
|
257
256
|
FeedForwardBlock
|
|
258
257
|
InceptionBlock
|
|
259
|
-
PatchTokenizer
|
|
260
258
|
|
|
261
259
|
Convolution
|
|
262
260
|
===========
|
|
@@ -293,14 +293,14 @@
|
|
|
293
293
|
<span class="code-step-num">02</span>
|
|
294
294
|
<span class="code-step-text">
|
|
295
295
|
<span class="code-step-title">Preprocess & window</span>
|
|
296
|
-
<span class="code-step-desc">
|
|
296
|
+
<span class="code-step-desc">Bandpass-filter, then cut motor-imagery trials.</span>
|
|
297
297
|
</span>
|
|
298
298
|
</li>
|
|
299
299
|
<li class="code-step">
|
|
300
300
|
<span class="code-step-num">03</span>
|
|
301
301
|
<span class="code-step-text">
|
|
302
302
|
<span class="code-step-title">Pick a model</span>
|
|
303
|
-
<span class="code-step-desc">EEGNeX
|
|
303
|
+
<span class="code-step-desc">EEGNeX with 22 channels, 4 classes, 4.5 s @ 250 Hz.</span>
|
|
304
304
|
</span>
|
|
305
305
|
</li>
|
|
306
306
|
<li class="code-step">
|
|
@@ -321,8 +321,8 @@
|
|
|
321
321
|
<div class="code-window-meta">PyTorch · CUDA</div>
|
|
322
322
|
</div>
|
|
323
323
|
<div class="code-window-body">
|
|
324
|
-
<div class="code-gutter"><div>1</div><div>2</div><div>3</div><div>4</div><div>5</div><div>6</div><div>7</div><div>8</div><div>9</div><div>10</div><div>11</div><div>12</div><div>13</div><div>14</div><div>15</div><div>16</div><div>17</div><div>18</div><div>19</div
|
|
325
|
-
<div class="code-content"><div data-step="0"><span class="tok-com"># 1. Load BCI Competition IV-2a (subject 3) via MOABB</span></div><div data-step="0"><span class="tok-kw">from</span> <span class="tok-var">braindecode.datasets</span> <span class="tok-kw">import</span> <span class="tok-cls">MOABBDataset</span></div><div data-step="0"></div><div data-step="0"><span class="tok-var">dataset</span> = <span class="tok-fn">MOABBDataset</span>(<span class="tok-str">"BNCI2014_001"</span>, <span class="tok-attr">subject_ids</span>=[<span class="tok-num">3</span>])</div><div data-step="1"><span class="tok-com"># 2.
|
|
324
|
+
<div class="code-gutter"><div>1</div><div>2</div><div>3</div><div>4</div><div>5</div><div>6</div><div>7</div><div>8</div><div>9</div><div>10</div><div>11</div><div>12</div><div>13</div><div>14</div><div>15</div><div>16</div><div>17</div><div>18</div><div>19</div></div>
|
|
325
|
+
<div class="code-content"><div data-step="0"><span class="tok-com"># 1. Load BCI Competition IV-2a (subject 3) via MOABB</span></div><div data-step="0"><span class="tok-kw">from</span> <span class="tok-var">braindecode.datasets</span> <span class="tok-kw">import</span> <span class="tok-cls">MOABBDataset</span></div><div data-step="0"></div><div data-step="0"><span class="tok-var">dataset</span> = <span class="tok-fn">MOABBDataset</span>(<span class="tok-str">"BNCI2014_001"</span>, <span class="tok-attr">subject_ids</span>=[<span class="tok-num">3</span>])</div><div data-step="1"><span class="tok-com"># 2. Bandpass-filter and create event-aligned windows</span></div><div data-step="1"><span class="tok-kw">from</span> <span class="tok-var">braindecode.preprocessing</span> <span class="tok-kw">import</span> (</div><div data-step="1"> <span class="tok-cls">Preprocessor</span>, <span class="tok-fn">preprocess</span>, <span class="tok-fn">create_windows_from_events</span>,</div><div data-step="1">)</div><div data-step="1"></div><div data-step="1"><span class="tok-fn">preprocess</span>(<span class="tok-var">dataset</span>, [<span class="tok-fn">Preprocessor</span>(<span class="tok-str">"filter"</span>, <span class="tok-attr">l_freq</span>=<span class="tok-num">4.</span>, <span class="tok-attr">h_freq</span>=<span class="tok-num">38.</span>)])</div><div data-step="1"><span class="tok-var">windows</span> = <span class="tok-fn">create_windows_from_events</span>(<span class="tok-var">dataset</span>)</div><div data-step="2"><span class="tok-com"># 3. Instantiate a published architecture</span></div><div data-step="2"><span class="tok-kw">from</span> <span class="tok-var">braindecode.models</span> <span class="tok-kw">import</span> <span class="tok-cls">EEGNeX</span></div><div data-step="2"></div><div data-step="2"><span class="tok-var">model</span> = <span class="tok-fn">EEGNeX</span>(<span class="tok-attr">n_chans</span>=<span class="tok-num">22</span>, <span class="tok-attr">n_outputs</span>=<span class="tok-num">4</span>, <span class="tok-attr">n_times</span>=<span class="tok-num">1125</span>)</div><div data-step="3"><span class="tok-com"># 4. Train with the skorch-based EEGClassifier</span></div><div data-step="3"><span class="tok-kw">from</span> <span class="tok-var">braindecode</span> <span class="tok-kw">import</span> <span class="tok-cls">EEGClassifier</span></div><div data-step="3"></div><div data-step="3"><span class="tok-var">clf</span> = <span class="tok-fn">EEGClassifier</span>(<span class="tok-attr">module</span>=<span class="tok-var">model</span>, <span class="tok-attr">max_epochs</span>=<span class="tok-num">10</span>)</div><div data-step="3"><span class="tok-var">clf</span>.<span class="tok-fn">fit</span>(<span class="tok-var">windows</span>, <span class="tok-attr">y</span>=<span class="tok-kw">None</span>)</div></div>
|
|
326
326
|
</div>
|
|
327
327
|
<div class="code-output">
|
|
328
328
|
<span class="ok"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg> Trains on CPU or GPU</span>
|
|
@@ -36,27 +36,16 @@ Enhancements
|
|
|
36
36
|
variant of :class:`braindecode.models.EEGPT` built with
|
|
37
37
|
:func:`~braindecode.models.interpolated.InterpolatedModel`.
|
|
38
38
|
By `Pierre Guetschel`_.
|
|
39
|
-
- Add :class:`braindecode.models.EEGDINO`, the EEG-DINO self-distillation
|
|
40
|
-
foundation model (Small/Medium/Large) with pretrained S/M weights. By `Bruno Aristimunha`_.
|
|
41
39
|
|
|
42
40
|
API and behavior changes
|
|
43
41
|
========================
|
|
44
42
|
|
|
45
|
-
-
|
|
46
|
-
deprecation in v1.2/v1.3: ``EEGNetv4`` (use
|
|
47
|
-
:class:`braindecode.models.EEGNet`), ``SleepStagerEldele2021`` (use
|
|
48
|
-
:class:`braindecode.models.AttnSleep`), ``TSceptionV1`` (use
|
|
49
|
-
:class:`braindecode.models.TSception`), and ``BNCI2014001`` (use
|
|
50
|
-
:class:`braindecode.datasets.BNCI2014_001`). (:gh:`1045` by `Bhargav Kowshik`_)
|
|
43
|
+
- None yet
|
|
51
44
|
|
|
52
45
|
Requirements
|
|
53
46
|
============
|
|
54
47
|
|
|
55
|
-
-
|
|
56
|
-
9.1.0 changed the ``IdMaker`` constructor signature, which breaks
|
|
57
|
-
``pytest_cases`` 3.10.1 and makes the whole test suite crash at collection
|
|
58
|
-
time. The cap can be lifted once ``pytest_cases`` supports ``pytest>=9.1``.
|
|
59
|
-
By `Adam Mounir`_.
|
|
48
|
+
- None yet
|
|
60
49
|
|
|
61
50
|
Bug fixes
|
|
62
51
|
==========
|
|
@@ -70,24 +59,8 @@ Bug fixes
|
|
|
70
59
|
use running statistics when ``batch_size == 1`` in train mode.
|
|
71
60
|
By `Bruno Aristimunha`_.
|
|
72
61
|
|
|
73
|
-
- Fix the auto-generated standalone-function preprocessors
|
|
74
|
-
(:class:`braindecode.preprocessing.ComputeCurrentSourceDensity`,
|
|
75
|
-
:class:`braindecode.preprocessing.SetBipolarReference`, and
|
|
76
|
-
:class:`braindecode.preprocessing.OversampledTemporalProjection`) passing the
|
|
77
|
-
function name as a string instead of the callable, so they failed to apply.
|
|
78
|
-
These functions return the modified instance and are now wrapped as callables.
|
|
79
|
-
Standalone functions that return auxiliary data (e.g. annotations or bad
|
|
80
|
-
channels) are intentionally left on the existing path for now. (:gh:`885` by
|
|
81
|
-
`Yiheng Li`_)
|
|
82
62
|
- Fix incorrect import path in CONTRIBUTING.md by `Yiheng Li`_
|
|
83
63
|
|
|
84
|
-
- Fix the broken EEGNeX quickstart snippet on the documentation landing page,
|
|
85
|
-
which kept non-EEG channels (including the STIM trigger), hardcoded a
|
|
86
|
-
mismatched ``n_times``, and failed at the default stratified validation split
|
|
87
|
-
with ``y=None``; it now restricts to EEG channels and lets
|
|
88
|
-
:class:`~braindecode.EEGClassifier` infer the signal dimensions from the data.
|
|
89
|
-
By `Bhargav Kowshik`_
|
|
90
|
-
|
|
91
64
|
Code health
|
|
92
65
|
============
|
|
93
66
|
|
|
@@ -1270,4 +1243,3 @@ Authors
|
|
|
1270
1243
|
.. _Léo Burgund: https://github.com/leob000
|
|
1271
1244
|
.. _Adam Mounir: https://github.com/adammounir
|
|
1272
1245
|
.. _Yiheng Li: https://github.com/YihengLi-1
|
|
1273
|
-
.. _Bhargav Kowshik: https://github.com/bkowshik
|
|
@@ -80,7 +80,7 @@ eegprep = ["eegprep[eeglabio]>=0.2.23"]
|
|
|
80
80
|
hub = ["huggingface_hub[torch]>=0.20.0", "zarr>=3.0"]
|
|
81
81
|
viz = ["captum>=0.7.0"]
|
|
82
82
|
tests = [
|
|
83
|
-
'pytest
|
|
83
|
+
'pytest',
|
|
84
84
|
'pytest-cov',
|
|
85
85
|
'codecov',
|
|
86
86
|
'pytest_cases',
|
|
@@ -162,9 +162,3 @@ testpaths = ["test"]
|
|
|
162
162
|
python_files = ["test_*.py", "*_test.py"]
|
|
163
163
|
# which functions inside them count as tests
|
|
164
164
|
python_functions = ["test_*"]
|
|
165
|
-
markers = [
|
|
166
|
-
"integration: integration tests",
|
|
167
|
-
"network: tests that require network access",
|
|
168
|
-
"huggingface: tests that access Hugging Face Hub",
|
|
169
|
-
"slow: slow tests",
|
|
170
|
-
]
|