braindecode 1.7.0.dev179223210__tar.gz → 1.7.0.dev182244820__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.7.0.dev179223210/braindecode.egg-info → braindecode-1.7.0.dev182244820}/PKG-INFO +1 -1
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/classifier.py +7 -7
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/functional/functions.py +5 -2
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegminer.py +38 -62
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/reve.py +32 -33
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/filter.py +16 -10
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/regressor.py +7 -7
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/training/scoring.py +7 -5
- braindecode-1.7.0.dev182244820/braindecode/version.py +1 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820/braindecode.egg-info}/PKG-INFO +1 -1
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/index.rst +6 -6
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/models.rst +2 -2
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/models_table.rst +9 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/whats_new.rst +16 -1
- braindecode-1.7.0.dev179223210/braindecode/version.py +0 -1
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/LICENSE.txt +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/MANIFEST.in +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/NOTICE.txt +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/README.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/__init__.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/augmentation/__init__.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/augmentation/base.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/augmentation/functional.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/augmentation/transforms.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/__init__.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/base.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bbci.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bcicomp.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/__init__.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/datasets.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/format.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/hub.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/hub_format.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/hub_io.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/hub_validation.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/iterable.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/chb_mit.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/collate.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/mne.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/moabb.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/nmt.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/registry.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/siena.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/sleep_physio_challe_18.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/sleep_physionet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/tuh.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/utils.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/xy.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datautil/__init__.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datautil/channel_utils.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datautil/hub_formats.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datautil/serialization.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datautil/util.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/eegneuralnet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/functional/__init__.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/functional/initialization.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/__init__.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/atcnet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/attentionbasenet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/attn_sleep.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/base.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/bendr.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/biot.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/brainmodule.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/cbramod.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/codebrain.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/config.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/contrawr.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/ctnet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/deep4.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/deepsleepnet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/dgcnn.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegconformer.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegdino.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eeginception_erp.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eeginception_mi.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegitnet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegnet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegnex.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegpt.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegsimpleconv.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegsym.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegtcnet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/emg2qwerty.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/fbcnet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/fblightconvnet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/fbmsnet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/hybrid.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/ifnet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/interpolated.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/labram.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/luna.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/medformer.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/meta_neuromotor.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/msvtnet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/mvpformer.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/patchedtransformer.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/sccnet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/shallow_fbcsp.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/signal_jepa.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/sinc_shallow.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/sparcnet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/sstdpn.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/steegformer.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/summary.csv +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/syncnet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/tcformer.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/tcn.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/tidnet.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/tsinception.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/usleep.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/util.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/__init__.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/activation.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/attention.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/blocks.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/convolution.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/interpolation.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/layers.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/linear.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/parametrization.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/stats.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/util.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/wrapper.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/preprocessing/__init__.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/preprocessing/eegprep_preprocess.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/preprocessing/mne_preprocess.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/preprocessing/preprocess.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/preprocessing/util.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/preprocessing/windowers.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/samplers/__init__.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/samplers/base.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/samplers/ssl.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/training/__init__.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/training/callbacks.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/training/losses.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/util.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/visualization/__init__.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/visualization/attribution.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/visualization/confusion_matrices.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/visualization/frequency.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/visualization/metrics.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/visualization/sanity.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/visualization/topology.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode.egg-info/SOURCES.txt +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode.egg-info/dependency_links.txt +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode.egg-info/requires.txt +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode.egg-info/top_level.txt +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/Makefile +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/_templates/autosummary/class.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/_templates/autosummary/class_in_subdir.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/_templates/autosummary/function.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/_templates/autosummary/function_in_subdir.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/api.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/cite.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/conf.py +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/help.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/install/install.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/install/install_pip.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/install/install_source.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/attention.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/channel.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/convolution.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/filterbank.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/gnn.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/interpretable.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/lbm.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/recurrent.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/spd.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/models_categorization.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/models_visualization.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/sg_execution_times.rst +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/pyproject.toml +0 -0
- {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/setup.cfg +0 -0
{braindecode-1.7.0.dev179223210/braindecode.egg-info → braindecode-1.7.0.dev182244820}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: braindecode
|
|
3
|
-
Version: 1.7.0.
|
|
3
|
+
Version: 1.7.0.dev182244820
|
|
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>
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
# Lukas Gemein <l.gemein@gmail.com>
|
|
4
4
|
# Bruno Aristimunha <b.aristimunha@gmail.com>
|
|
5
5
|
# Pierre Guetschel <pierre.guetschel@gmail.com>
|
|
6
|
+
# Sarthak Tayal <sarthaktayal2@gmail.com>
|
|
6
7
|
#
|
|
7
8
|
# License: BSD (3-clause)
|
|
8
9
|
|
|
@@ -195,9 +196,7 @@ class EEGClassifier(_EEGNeuralNet, NeuralNetClassifier):
|
|
|
195
196
|
return self.predict_proba(X).argmax(1)
|
|
196
197
|
|
|
197
198
|
def predict_trials(self, X, return_targets=True):
|
|
198
|
-
"""Create trialwise predictions
|
|
199
|
-
|
|
200
|
-
labels from cropped dataset.
|
|
199
|
+
"""Create trialwise predictions from a cropped dataset.
|
|
201
200
|
|
|
202
201
|
Parameters
|
|
203
202
|
----------
|
|
@@ -212,10 +211,11 @@ class EEGClassifier(_EEGNeuralNet, NeuralNetClassifier):
|
|
|
212
211
|
3-dimensional array (n_trials x n_classes x n_predictions), where
|
|
213
212
|
the number of predictions depend on the chosen window size and the
|
|
214
213
|
receptive field of the network.
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
214
|
+
trial_targets : np.ndarray
|
|
215
|
+
Ground-truth targets from the dataset in a 2-dimensional array
|
|
216
|
+
(n_trials x n_targets). Only returned when ``return_targets=True``.
|
|
217
|
+
The number of targets depends on the decoding paradigm and can be
|
|
218
|
+
either a single value, multiple values, or a sequence.
|
|
219
219
|
"""
|
|
220
220
|
if not self.cropped:
|
|
221
221
|
warnings.warn(
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# Authors: Robin Schirrmeister <robintibor@gmail.com>
|
|
2
2
|
# Bruno Aristimunha <b.aristimunha@gmail.com>
|
|
3
|
+
# Sarthak Tayal <sarthaktayal2@gmail.com>
|
|
3
4
|
#
|
|
4
5
|
# License: BSD (3-clause)
|
|
5
6
|
|
|
@@ -109,7 +110,7 @@ def _get_gaussian_kernel1d(kernel_size: int, sigma: float) -> torch.Tensor:
|
|
|
109
110
|
return kernel1d
|
|
110
111
|
|
|
111
112
|
|
|
112
|
-
def hilbert_freq(x, forward_fourier=True):
|
|
113
|
+
def hilbert_freq(x: torch.Tensor, forward_fourier: bool = True) -> torch.Tensor:
|
|
113
114
|
r"""
|
|
114
115
|
Compute the Hilbert transform using PyTorch, separating the real and
|
|
115
116
|
imaginary parts.
|
|
@@ -178,7 +179,9 @@ def hilbert_freq(x, forward_fourier=True):
|
|
|
178
179
|
return x
|
|
179
180
|
|
|
180
181
|
|
|
181
|
-
def plv_time(
|
|
182
|
+
def plv_time(
|
|
183
|
+
x: torch.Tensor, forward_fourier: bool = True, epsilon: float = 1e-6
|
|
184
|
+
) -> torch.Tensor:
|
|
182
185
|
"""Compute the Phase Locking Value (PLV) metric in the time domain.
|
|
183
186
|
|
|
184
187
|
The Phase Locking Value (PLV) is a measure of the synchronization between
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegminer.py
RENAMED
|
@@ -5,10 +5,9 @@
|
|
|
5
5
|
* https://www.ipo.gov.uk/p-ipsum/Case/ApplicationNumber/GB2113420.0
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
# Authors: Sarthak Tayal <sarthaktayal2@gmail.com>
|
|
9
9
|
|
|
10
10
|
import torch
|
|
11
|
-
from einops.layers.torch import Rearrange
|
|
12
11
|
from torch import nn
|
|
13
12
|
|
|
14
13
|
import braindecode.functional as F
|
|
@@ -19,6 +18,36 @@ from braindecode.modules import GeneralizedGaussianFilter
|
|
|
19
18
|
_eeg_miner_methods = ["mag", "corr", "plv"]
|
|
20
19
|
|
|
21
20
|
|
|
21
|
+
class _EEGMinerFeatures(nn.Module):
|
|
22
|
+
def __init__(self, method, n_chans, n_filters, n_times):
|
|
23
|
+
super().__init__()
|
|
24
|
+
self.method = method
|
|
25
|
+
self.n_chans = n_chans
|
|
26
|
+
self.n_filters = n_filters
|
|
27
|
+
self.n_times = n_times
|
|
28
|
+
triu = torch.triu_indices(n_chans, n_chans, 1)
|
|
29
|
+
self.register_buffer("triu_row", triu[0], persistent=False)
|
|
30
|
+
self.register_buffer("triu_col", triu[1], persistent=False)
|
|
31
|
+
|
|
32
|
+
def forward(self, x):
|
|
33
|
+
if self.method == "mag":
|
|
34
|
+
return torch.sqrt((x * x).mean(dim=-1))
|
|
35
|
+
if self.method == "corr":
|
|
36
|
+
x = x.reshape(
|
|
37
|
+
x.shape[0], self.n_chans, self.n_filters, self.n_times
|
|
38
|
+
).transpose(-3, -2)
|
|
39
|
+
x = (x - x.mean(dim=-1, keepdim=True)) / torch.sqrt(
|
|
40
|
+
x.var(dim=-1, keepdim=True) + 1e-6
|
|
41
|
+
)
|
|
42
|
+
x = torch.matmul(x, x.transpose(-2, -1)) / x.shape[-1]
|
|
43
|
+
x = x.permute(0, 2, 3, 1).abs()
|
|
44
|
+
else:
|
|
45
|
+
x = x.transpose(-4, -3)
|
|
46
|
+
x = F.plv_time(x, forward_fourier=False)
|
|
47
|
+
x = x.permute(0, 2, 3, 1)
|
|
48
|
+
return x[:, self.triu_row, self.triu_col, :]
|
|
49
|
+
|
|
50
|
+
|
|
22
51
|
class EEGMiner(EEGModuleMixin, nn.Module):
|
|
23
52
|
r"""EEGMiner from Ludwig et al (2024) [eegminer]_.
|
|
24
53
|
|
|
@@ -168,24 +197,18 @@ class EEGMiner(EEGModuleMixin, nn.Module):
|
|
|
168
197
|
)
|
|
169
198
|
|
|
170
199
|
# Forward method
|
|
200
|
+
self.ensure_dim = nn.Identity()
|
|
171
201
|
if self.method == "mag":
|
|
172
|
-
self.method_forward = self._apply_mag_forward
|
|
173
202
|
self.n_features = self.n_chans * self.n_filters
|
|
174
|
-
self.ensure_dim = nn.Identity()
|
|
175
203
|
elif self.method == "corr":
|
|
176
|
-
self.method_forward = partial(
|
|
177
|
-
self._apply_corr_forward,
|
|
178
|
-
n_chans=self.n_chans,
|
|
179
|
-
n_filters=self.n_filters,
|
|
180
|
-
n_times=self.n_times,
|
|
181
|
-
)
|
|
182
204
|
self.n_features = self.n_filters * self.n_chans * (self.n_chans - 1) // 2
|
|
183
|
-
self.ensure_dim = nn.Identity()
|
|
184
205
|
elif self.method == "plv":
|
|
185
|
-
self.
|
|
186
|
-
self.ensure_dim = Rearrange("... d -> ... 1 d")
|
|
206
|
+
self.ensure_dim = nn.Unflatten(-1, (1, self.n_times))
|
|
187
207
|
self.n_features = (self.n_filters * self.n_chans * (self.n_chans - 1)) // 2
|
|
188
208
|
|
|
209
|
+
self.feature_layer = _EEGMinerFeatures(
|
|
210
|
+
self.method, self.n_chans, self.n_filters, self.n_times
|
|
211
|
+
)
|
|
189
212
|
self.flatten_layer = nn.Flatten()
|
|
190
213
|
# Classifier
|
|
191
214
|
self.batch_layer = nn.BatchNorm1d(self.n_features, affine=False)
|
|
@@ -195,64 +218,17 @@ class EEGMiner(EEGModuleMixin, nn.Module):
|
|
|
195
218
|
@_disable_batch_norm_training_if_batch_size_one
|
|
196
219
|
def forward(self, x):
|
|
197
220
|
"""x: (batch, electrodes, time)"""
|
|
198
|
-
batch = x.shape[0]
|
|
199
221
|
x = self.ensure_dim(x)
|
|
200
222
|
# Apply Gaussian filters in frequency domain
|
|
201
223
|
# x -> (batch, electrodes * filters, time)
|
|
202
224
|
x = self.filter(x)
|
|
203
225
|
|
|
204
|
-
x = self.
|
|
226
|
+
x = self.feature_layer(x)
|
|
205
227
|
# Classifier
|
|
206
228
|
# Note that the order of dimensions before flattening the feature vector is important
|
|
207
229
|
# for attributing feature weights during interpretation.
|
|
208
|
-
x = x.reshape(
|
|
230
|
+
x = x.reshape(x.shape[0], self.n_features)
|
|
209
231
|
x = self.batch_layer(x)
|
|
210
232
|
x = self.final_layer(x)
|
|
211
233
|
|
|
212
234
|
return x
|
|
213
|
-
|
|
214
|
-
@staticmethod
|
|
215
|
-
def _apply_mag_forward(x, batch=None):
|
|
216
|
-
# Signal magnitude
|
|
217
|
-
x = x * x
|
|
218
|
-
x = x.mean(dim=-1)
|
|
219
|
-
x = torch.sqrt(x)
|
|
220
|
-
return x
|
|
221
|
-
|
|
222
|
-
@staticmethod
|
|
223
|
-
def _apply_corr_forward(
|
|
224
|
-
x, batch, n_chans, n_filters, n_times, epilson: float = 1e-6
|
|
225
|
-
):
|
|
226
|
-
x = x.reshape(batch, n_chans, n_filters, n_times).transpose(-3, -2)
|
|
227
|
-
x = (x - x.mean(dim=-1, keepdim=True)) / torch.sqrt(
|
|
228
|
-
x.var(dim=-1, keepdim=True) + epilson
|
|
229
|
-
)
|
|
230
|
-
x = torch.matmul(x, x.transpose(-2, -1)) / x.shape[-1]
|
|
231
|
-
# Original tensor shape: [batch, n_filters, chans, chans]
|
|
232
|
-
x = x.permute(0, 2, 3, 1)
|
|
233
|
-
# New tensor shape: [batch, chans, chans, n_filters]
|
|
234
|
-
# move filter channels to the end
|
|
235
|
-
x = x.abs()
|
|
236
|
-
|
|
237
|
-
# Get upper triu of symmetric connectivity matrix
|
|
238
|
-
triu = torch.triu_indices(n_chans, n_chans, 1)
|
|
239
|
-
x = x[:, triu[0], triu[1], :]
|
|
240
|
-
|
|
241
|
-
return x
|
|
242
|
-
|
|
243
|
-
@staticmethod
|
|
244
|
-
def _apply_plv(x, n_chans, batch=None):
|
|
245
|
-
# Compute PLV connectivity
|
|
246
|
-
# x -> (batch, electrodes, electrodes, filters)
|
|
247
|
-
x = x.transpose(-4, -3) # swap electrodes and filters
|
|
248
|
-
# adjusting to compute the plv
|
|
249
|
-
x = F.plv_time(x, forward_fourier=False)
|
|
250
|
-
# batch, number of filters, connectivity matrix
|
|
251
|
-
# [batch, n_filters, chans, chans]
|
|
252
|
-
x = x.permute(0, 2, 3, 1)
|
|
253
|
-
# [batch, chans, chans, n_filters]
|
|
254
|
-
|
|
255
|
-
# Get upper triu of symmetric connectivity matrix
|
|
256
|
-
triu = torch.triu_indices(n_chans, n_chans, 1)
|
|
257
|
-
x = x[:, triu[0], triu[1], :]
|
|
258
|
-
return x
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/reve.py
RENAMED
|
@@ -8,13 +8,13 @@ import json
|
|
|
8
8
|
import logging
|
|
9
9
|
import math
|
|
10
10
|
import os
|
|
11
|
-
from pathlib import Path
|
|
12
11
|
from typing import Optional, Union
|
|
13
12
|
|
|
14
|
-
import
|
|
13
|
+
import pooch
|
|
15
14
|
import torch
|
|
16
15
|
import torch.nn.functional as F
|
|
17
16
|
from einops import rearrange
|
|
17
|
+
from mne.datasets.utils import _get_path
|
|
18
18
|
from torch import nn
|
|
19
19
|
|
|
20
20
|
# Safe import for older PyTorch versions (Support for Intel-based Macs)
|
|
@@ -785,10 +785,13 @@ class FourierEmb4D(nn.Module):
|
|
|
785
785
|
class RevePositionBank(torch.nn.Module):
|
|
786
786
|
"""Position bank for REVE model that maps standard EEG channel names to 3D coordinates.
|
|
787
787
|
|
|
788
|
-
The position bank is cached locally in the library root to avoid repeated downloads.
|
|
789
|
-
|
|
790
788
|
The coordinates come from the 92 datasets used during REVE pretraining.
|
|
791
789
|
|
|
790
|
+
The bank is cached in the MNE data directory after the first download, so it
|
|
791
|
+
works offline afterwards. On restricted nodes (e.g. HPC compute nodes without
|
|
792
|
+
a proxy), drop a prefetched ``reve_positions.json`` in that directory and no
|
|
793
|
+
download is attempted.
|
|
794
|
+
|
|
792
795
|
Parameters
|
|
793
796
|
----------
|
|
794
797
|
url : str, optional
|
|
@@ -796,7 +799,9 @@ class RevePositionBank(torch.nn.Module):
|
|
|
796
799
|
timeout : int, optional
|
|
797
800
|
Timeout in seconds for the HTTP request. Default is 5 seconds.
|
|
798
801
|
cache_dir : str, optional
|
|
799
|
-
Directory to cache the position bank.
|
|
802
|
+
Directory to cache the position bank. If ``None``, resolved like other
|
|
803
|
+
braindecode datasets via the ``REVE_POSITIONS_PATH`` config key, falling
|
|
804
|
+
back to the MNE data directory (usually ``~/mne_data``).
|
|
800
805
|
"""
|
|
801
806
|
|
|
802
807
|
def __init__(
|
|
@@ -807,38 +812,32 @@ class RevePositionBank(torch.nn.Module):
|
|
|
807
812
|
):
|
|
808
813
|
super().__init__()
|
|
809
814
|
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
cache_dir = str(Path(__file__).parent)
|
|
813
|
-
|
|
814
|
-
cache_file = os.path.join(cache_dir, ".cache", "reve_positions.json")
|
|
815
|
-
os.makedirs(os.path.dirname(cache_file), exist_ok=True)
|
|
816
|
-
|
|
817
|
-
config = None
|
|
815
|
+
cache_dir = _get_path(cache_dir, "REVE_POSITIONS_PATH", "REVE positions")
|
|
816
|
+
cache_file = os.path.join(cache_dir, "reve_positions.json")
|
|
818
817
|
|
|
819
|
-
#
|
|
820
|
-
if
|
|
818
|
+
# Offline path: reuse the cached/prefetched file. Download only on a miss
|
|
819
|
+
# or if the cached copy is unreadable (e.g. an interrupted download).
|
|
820
|
+
try:
|
|
821
|
+
with open(cache_file) as f:
|
|
822
|
+
config = json.load(f)
|
|
823
|
+
except (OSError, json.JSONDecodeError):
|
|
821
824
|
try:
|
|
822
|
-
|
|
825
|
+
if os.path.exists(cache_file):
|
|
826
|
+
os.remove(cache_file) # corrupt/partial; force a fresh copy
|
|
827
|
+
# pooch ships with mne and writes straight into the cache dir.
|
|
828
|
+
pooch.retrieve(
|
|
829
|
+
url,
|
|
830
|
+
known_hash=None,
|
|
831
|
+
fname="reve_positions.json",
|
|
832
|
+
path=cache_dir,
|
|
833
|
+
downloader=pooch.HTTPDownloader(timeout=timeout),
|
|
834
|
+
)
|
|
835
|
+
with open(cache_file) as f:
|
|
823
836
|
config = json.load(f)
|
|
824
|
-
|
|
825
|
-
except (json.JSONDecodeError, IOError) as e:
|
|
826
|
-
logger.warning(f"Failed to load cache, downloading: {e}")
|
|
827
|
-
|
|
828
|
-
# Download if cache miss or failed to load
|
|
829
|
-
if config is None:
|
|
830
|
-
try:
|
|
831
|
-
response = requests.get(url, timeout=timeout)
|
|
832
|
-
response.raise_for_status()
|
|
833
|
-
config = json.loads(response.text)
|
|
834
|
-
|
|
835
|
-
# Save to cache
|
|
836
|
-
with open(cache_file, "w") as f:
|
|
837
|
-
json.dump(config, f)
|
|
838
|
-
logger.info(f"Downloaded and cached position bank to: {cache_file}")
|
|
839
|
-
except (requests.RequestException, json.JSONDecodeError) as e:
|
|
837
|
+
except Exception as e:
|
|
840
838
|
raise RuntimeError(
|
|
841
|
-
f"Failed to download
|
|
839
|
+
f"Failed to download the position bank from {url}. On an "
|
|
840
|
+
f"offline node, prefetch it to {cache_file} first: {e}"
|
|
842
841
|
) from e
|
|
843
842
|
|
|
844
843
|
try:
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/filter.py
RENAMED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
# Authors: Sarthak Tayal <sarthaktayal2@gmail.com>
|
|
2
|
+
#
|
|
3
|
+
# License: BSD-3
|
|
4
|
+
|
|
1
5
|
from __future__ import annotations
|
|
2
6
|
|
|
3
7
|
from typing import Optional
|
|
@@ -637,20 +641,22 @@ class GeneralizedGaussianFilter(nn.Module):
|
|
|
637
641
|
The constructed filters with shape `(out_channels, freq_bins, 2)`.
|
|
638
642
|
|
|
639
643
|
"""
|
|
640
|
-
|
|
641
|
-
self.
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
)
|
|
646
|
-
self.bandwidth.data = torch.clamp(
|
|
647
|
-
self.bandwidth.data, min=1.0 / (self.sample_rate / 2), max=1.0
|
|
644
|
+
min_f_mean = self.clamp_f_mean[0] / (self.sample_rate / 2)
|
|
645
|
+
max_f_mean = self.clamp_f_mean[1] / (self.sample_rate / 2)
|
|
646
|
+
f_mean = torch.clamp(self.f_mean, min=min_f_mean, max=max_f_mean)
|
|
647
|
+
bandwidth = torch.clamp(
|
|
648
|
+
self.bandwidth, min=1.0 / (self.sample_rate / 2), max=1.0
|
|
648
649
|
)
|
|
649
|
-
|
|
650
|
+
shape = torch.clamp(self.shape, min=2.0, max=3.0)
|
|
651
|
+
|
|
652
|
+
if not torch.jit.is_scripting():
|
|
653
|
+
self.f_mean.data = f_mean
|
|
654
|
+
self.bandwidth.data = bandwidth
|
|
655
|
+
self.shape.data = shape
|
|
650
656
|
|
|
651
657
|
# Create magnitude response with gain=1 -> (channels, freqs)
|
|
652
658
|
mag_response = self.exponential_power(
|
|
653
|
-
self.n_range,
|
|
659
|
+
self.n_range, f_mean, bandwidth, shape * 8 - 14
|
|
654
660
|
)
|
|
655
661
|
mag_response = mag_response / mag_response.max(dim=-1, keepdim=True)[0]
|
|
656
662
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
# Lukas Gemein <l.gemein@gmail.com>
|
|
4
4
|
# Bruno Aristimunha <b.aristimunha@gmail.com>
|
|
5
5
|
# Pierre Guetschel <pierre.guetschel@gmail.com>
|
|
6
|
+
# Sarthak Tayal <sarthaktayal2@gmail.com>
|
|
6
7
|
#
|
|
7
8
|
# License: BSD (3-clause)
|
|
8
9
|
|
|
@@ -139,9 +140,7 @@ class EEGRegressor(_EEGNeuralNet, NeuralNetRegressor):
|
|
|
139
140
|
return y_pred
|
|
140
141
|
|
|
141
142
|
def predict_trials(self, X, return_targets=True):
|
|
142
|
-
"""Create trialwise predictions
|
|
143
|
-
|
|
144
|
-
labels from cropped dataset.
|
|
143
|
+
"""Create trialwise predictions from a cropped dataset.
|
|
145
144
|
|
|
146
145
|
Parameters
|
|
147
146
|
----------
|
|
@@ -156,10 +155,11 @@ class EEGRegressor(_EEGNeuralNet, NeuralNetRegressor):
|
|
|
156
155
|
3-dimensional array (n_trials x n_classes x n_predictions), where
|
|
157
156
|
the number of predictions depend on the chosen window size and the
|
|
158
157
|
receptive field of the network.
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
158
|
+
trial_targets : np.ndarray
|
|
159
|
+
Ground-truth targets from the dataset in a 2-dimensional array
|
|
160
|
+
(n_trials x n_targets). Only returned when ``return_targets=True``.
|
|
161
|
+
The number of targets depends on the decoding paradigm and can be
|
|
162
|
+
either a single value, multiple values, or a sequence.
|
|
163
163
|
"""
|
|
164
164
|
if not self.cropped:
|
|
165
165
|
warnings.warn(
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/training/scoring.py
RENAMED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
# Alexandre Gramfort <alexandre.gramfort@inria.fr>
|
|
4
4
|
# Lukas Gemein <l.gemein@gmail.com>
|
|
5
5
|
# Mohammed Fattouh <mo.fattouh@gmail.com>
|
|
6
|
+
# Sarthak Tayal <sarthaktayal2@gmail.com>
|
|
6
7
|
#
|
|
7
8
|
# License: BSD-3
|
|
8
9
|
|
|
@@ -401,7 +402,7 @@ class PostEpochTrainScoring(EpochScoring):
|
|
|
401
402
|
|
|
402
403
|
def predict_trials(module, dataset, return_targets=True, batch_size=1, num_workers=0):
|
|
403
404
|
"""Create trialwise predictions and optionally also return trialwise
|
|
404
|
-
|
|
405
|
+
targets from a cropped dataset given a module.
|
|
405
406
|
|
|
406
407
|
Parameters
|
|
407
408
|
----------
|
|
@@ -422,10 +423,11 @@ def predict_trials(module, dataset, return_targets=True, batch_size=1, num_worke
|
|
|
422
423
|
3-dimensional array (n_trials x n_classes x n_predictions), where
|
|
423
424
|
the number of predictions depend on the chosen window size and the
|
|
424
425
|
receptive field of the network.
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
426
|
+
trial_targets: np.ndarray
|
|
427
|
+
Ground-truth targets from the dataset in a 2-dimensional array
|
|
428
|
+
(n_trials x n_targets). Only returned when ``return_targets=True``.
|
|
429
|
+
The number of targets depends on the decoding paradigm and can be
|
|
430
|
+
either a single value, multiple values, or a sequence.
|
|
429
431
|
"""
|
|
430
432
|
# Ensure the model is in evaluation mode
|
|
431
433
|
module.eval()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.7.0.dev182244820"
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820/braindecode.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: braindecode
|
|
3
|
-
Version: 1.7.0.
|
|
3
|
+
Version: 1.7.0.dev182244820
|
|
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>
|
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
<div class="container bd-facts-inner">
|
|
162
162
|
<span class="bd-facts-label">By the numbers</span>
|
|
163
163
|
<div class="bd-facts-row">
|
|
164
|
-
<a href="models/
|
|
164
|
+
<a href="models/models_table.html"><b>65+</b> models</a>
|
|
165
165
|
<a href="api.html#augmentation"><b>20+</b> augmentations</a>
|
|
166
166
|
<a href="https://moabb.neurotechx.com/" target="_blank" rel="noopener"><b>150+</b> datasets <span style="color:var(--bd-muted)">via MOABB</span></a>
|
|
167
167
|
<a href="https://eegdash.org/" target="_blank" rel="noopener"><b>700+</b> datasets <span style="color:var(--bd-muted)">via EEGDash</span></a>
|
|
@@ -224,7 +224,7 @@
|
|
|
224
224
|
<p class="section-sub">Built to <strong>plug into the EEG ecosystem you already use</strong>: every <a href="https://moabb.neurotechx.com/" target="_blank" rel="noopener">MOABB</a> dataset, every <a href="https://mne.tools/" target="_blank" rel="noopener">MNE-Python</a> preprocessing function, every <a href="https://scikit-learn.org/" target="_blank" rel="noopener">scikit-learn</a> training loop, plus 700+ BIDS datasets via <a href="https://eegdash.org/" target="_blank" rel="noopener">EEGDash</a>. One library, no lock-in.</p>
|
|
225
225
|
</div>
|
|
226
226
|
<div class="feature-grid">
|
|
227
|
-
<a href="models/
|
|
227
|
+
<a href="models/models_table.html" class="feature-card">
|
|
228
228
|
<span class="feature-icon"><svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12c2-4 4-4 6 0s4 4 6 0 4-4 6 0 4 4 2 0"/></svg></span>
|
|
229
229
|
<h3>Decode raw electrophysiology</h3>
|
|
230
230
|
<p>End-to-end models go straight from raw EEG/ECoG/MEG to predictions. No hand-crafted features required.</p>
|
|
@@ -248,7 +248,7 @@
|
|
|
248
248
|
<p>Fully compatible with every <a class="feature-inline-link" href="https://mne.tools/" target="_blank" rel="noopener">MNE</a> preprocessing function and with <a class="feature-inline-link" href="https://eegprep.org/" target="_blank" rel="noopener">EEGPrep</a>, plus exponential standardization and 20+ EEG augmentations.</p>
|
|
249
249
|
<a href="api.html#augmentation" class="feature-link">Augmentation <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="M5 12h14M13 5l7 7-7 7"/></svg></a>
|
|
250
250
|
</div>
|
|
251
|
-
<a href="models/
|
|
251
|
+
<a href="models/models_table.html" class="feature-card">
|
|
252
252
|
<span class="feature-icon"><svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="6" r="2"/><circle cx="6" cy="18" r="2"/><circle cx="18" cy="12" r="2"/><path d="M8 6h2a3 3 0 0 1 3 3v0a3 3 0 0 0 3 3M8 18h2a3 3 0 0 0 3-3v0a3 3 0 0 1 3-3"/></svg></span>
|
|
253
253
|
<h3>Curated model zoo</h3>
|
|
254
254
|
<p>EEGNeX, ConvNets, ATCNet, EEGConformer, foundation models. 60+ architectures reproduced from the original papers.</p>
|
|
@@ -359,7 +359,7 @@
|
|
|
359
359
|
<div class="zoo-grid"><!-- populated by landing.js --></div>
|
|
360
360
|
<div class="zoo-foot">
|
|
361
361
|
<span class="zoo-foot-count">Loading…</span>
|
|
362
|
-
<a href="models/
|
|
362
|
+
<a href="models/models_table.html">Browse the full zoo on the Models table <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="M5 12h14M13 5l7 7-7 7"/></svg></a>
|
|
363
363
|
</div>
|
|
364
364
|
</div>
|
|
365
365
|
</section>
|
|
@@ -521,7 +521,7 @@
|
|
|
521
521
|
<span class="pipeline-col-name">Modeling</span>
|
|
522
522
|
</div>
|
|
523
523
|
<div class="pipeline-col-cards">
|
|
524
|
-
<a class="pipeline-card" href="models/
|
|
524
|
+
<a class="pipeline-card" href="models/models_table.html">
|
|
525
525
|
<span class="pipeline-card-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="6" r="2"/><circle cx="6" cy="18" r="2"/><circle cx="18" cy="12" r="2"/><path d="M8 6h2a3 3 0 0 1 3 3v0a3 3 0 0 0 3 3M8 18h2a3 3 0 0 0 3-3v0a3 3 0 0 1 3-3"/></svg></span>
|
|
526
526
|
<span class="pipeline-card-text">
|
|
527
527
|
<span class="pipeline-card-name">braindecode.models</span>
|
|
@@ -679,7 +679,7 @@
|
|
|
679
679
|
<ul>
|
|
680
680
|
<li><a href="install/install.html">Install</a></li>
|
|
681
681
|
<li><a href="auto_examples/index.html">Tutorials</a></li>
|
|
682
|
-
<li><a href="models/
|
|
682
|
+
<li><a href="models/models_table.html">Models</a></li>
|
|
683
683
|
<li><a href="api.html">API reference</a></li>
|
|
684
684
|
</ul>
|
|
685
685
|
</div>
|
|
@@ -68,12 +68,12 @@ With this, in this model's sub-pages, we provide:
|
|
|
68
68
|
- 4. :doc:`A visualization of the common important information from the models
|
|
69
69
|
<models_visualization>`.
|
|
70
70
|
|
|
71
|
-
.. button-ref::
|
|
71
|
+
.. button-ref:: models_table
|
|
72
72
|
:ref-type: doc
|
|
73
73
|
:color: primary
|
|
74
74
|
:expand:
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
Browse the models table →
|
|
77
77
|
|
|
78
78
|
.. rubric:: References
|
|
79
79
|
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/models_table.rst
RENAMED
|
@@ -191,6 +191,15 @@ Braindecode.
|
|
|
191
191
|
// Initial color pass
|
|
192
192
|
applyTagPalette(document);
|
|
193
193
|
|
|
194
|
+
function applyInitialModelFilter() {
|
|
195
|
+
var model = new URLSearchParams(window.location.search).get('model');
|
|
196
|
+
if (!model) return;
|
|
197
|
+
table.search(model).draw();
|
|
198
|
+
$(table.table().container()).find('div.dataTables_filter input').val(model);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
applyInitialModelFilter();
|
|
202
|
+
|
|
194
203
|
/* --- Bonus UX: click a column header to open panes focused there ----- */
|
|
195
204
|
$('.sortable thead th').each(function (i) {
|
|
196
205
|
if (!FILTER_COLS.includes(i)) return;
|
|
@@ -49,7 +49,22 @@ Requirements
|
|
|
49
49
|
Bug fixes
|
|
50
50
|
==========
|
|
51
51
|
|
|
52
|
-
-
|
|
52
|
+
- Clarify that :func:`braindecode.training.scoring.predict_trials`,
|
|
53
|
+
:meth:`braindecode.EEGClassifier.predict_trials`, and
|
|
54
|
+
:meth:`braindecode.EEGRegressor.predict_trials` return ground-truth dataset
|
|
55
|
+
targets alongside predictions. By `Sarthak Tayal`_.
|
|
56
|
+
|
|
57
|
+
- Make :class:`braindecode.models.EEGMiner` compatible with TorchScript across
|
|
58
|
+
magnitude, correlation, and phase-locking-value feature modes by replacing
|
|
59
|
+
runtime callable dispatch with a scriptable feature module. (:gh:`1101` by
|
|
60
|
+
`Sarthak Tayal`_)
|
|
61
|
+
|
|
62
|
+
- Make the :class:`braindecode.models.REVE` position bank robust on offline /
|
|
63
|
+
limited-network nodes: it is now cached in the writable MNE data directory
|
|
64
|
+
(resolved via the ``REVE_POSITIONS_PATH`` config key, defaulting under
|
|
65
|
+
``~/mne_data``) instead of the package folder, so a prefetched
|
|
66
|
+
``reve_positions.json`` there is used without any download (:gh:`1098` by
|
|
67
|
+
`Bruno Aristimunha`_)
|
|
53
68
|
|
|
54
69
|
Code health
|
|
55
70
|
============
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "1.7.0.dev179223210"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/augmentation/base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/__init__.py
RENAMED
|
File without changes
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/base.py
RENAMED
|
File without changes
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bbci.py
RENAMED
|
File without changes
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bcicomp.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/hub.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/chb_mit.py
RENAMED
|
File without changes
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/collate.py
RENAMED
|
File without changes
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/mne.py
RENAMED
|
File without changes
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/moabb.py
RENAMED
|
File without changes
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/nmt.py
RENAMED
|
File without changes
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/registry.py
RENAMED
|
File without changes
|
{braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/siena.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|