braindecode 1.7.0.dev183981614__tar.gz → 1.8.0.dev1122__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.dev183981614/braindecode.egg-info → braindecode-1.8.0.dev1122}/PKG-INFO +1 -1
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/augmentation/base.py +25 -1
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/augmentation/functional.py +2 -4
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/augmentation/transforms.py +5 -3
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/classifier.py +2 -1
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/sleep_physionet.py +9 -3
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/eegneuralnet.py +4 -2
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/__init__.py +2 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/fblightconvnet.py +31 -4
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/summary.csv +1 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/util.py +9 -0
- braindecode-1.8.0.dev1122/braindecode/models/zuna.py +612 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/preprocessing/eegprep_preprocess.py +1 -1
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/regressor.py +2 -1
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/training/losses.py +7 -4
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/util.py +16 -10
- braindecode-1.8.0.dev1122/braindecode/version.py +1 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122/braindecode.egg-info}/PKG-INFO +1 -1
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode.egg-info/SOURCES.txt +1 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/api.rst +1 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/whats_new.rst +97 -1
- braindecode-1.7.0.dev183981614/braindecode/version.py +0 -1
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/LICENSE.txt +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/MANIFEST.in +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/NOTICE.txt +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/README.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/__init__.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/augmentation/__init__.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/__init__.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/base.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/bbci.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/bcicomp.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/__init__.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/datasets.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/format.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/hub.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/hub_format.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/hub_io.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/hub_validation.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/bids/iterable.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/chb_mit.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/collate.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/mne.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/moabb.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/nmt.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/registry.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/siena.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/sleep_physio_challe_18.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/tuh.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/utils.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/xy.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datautil/__init__.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datautil/channel_utils.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datautil/hub_formats.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datautil/serialization.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datautil/util.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/functional/__init__.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/functional/functions.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/functional/initialization.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/atcnet.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/attentionbasenet.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/attn_sleep.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/base.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/bendr.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/biot.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/brainmodule.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/cbramod.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/codebrain.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/config.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/contrawr.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/ctnet.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/dance.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/deep4.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/deepsleepnet.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/dgcnn.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/eegconformer.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/eegdino.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/eeginception_erp.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/eeginception_mi.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/eegitnet.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/eegminer.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/eegnet.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/eegnex.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/eegpt.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/eegsimpleconv.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/eegsym.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/eegtcnet.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/emg2qwerty.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/fbcnet.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/fbmsnet.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/hybrid.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/ifnet.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/interpolated.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/labram.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/luna.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/medformer.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/meta_neuromotor.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/msvtnet.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/mvpformer.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/patchedtransformer.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/reve.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/sccnet.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/shallow_fbcsp.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/signal_jepa.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/sinc_shallow.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/sparcnet.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/sstdpn.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/steegformer.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/syncnet.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/tcformer.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/tcn.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/tidnet.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/tsinception.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/usleep.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/modules/__init__.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/modules/activation.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/modules/attention.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/modules/blocks.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/modules/convolution.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/modules/dance_modules.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/modules/filter.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/modules/interpolation.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/modules/layers.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/modules/linear.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/modules/parametrization.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/modules/stats.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/modules/util.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/modules/wrapper.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/preprocessing/__init__.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/preprocessing/mne_preprocess.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/preprocessing/preprocess.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/preprocessing/util.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/preprocessing/windowers.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/samplers/__init__.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/samplers/base.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/samplers/ssl.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/training/__init__.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/training/callbacks.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/training/scoring.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/visualization/__init__.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/visualization/attribution.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/visualization/confusion_matrices.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/visualization/frequency.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/visualization/metrics.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/visualization/sanity.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/visualization/topology.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode.egg-info/dependency_links.txt +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode.egg-info/requires.txt +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode.egg-info/top_level.txt +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/Makefile +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/_templates/autosummary/class.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/_templates/autosummary/class_in_subdir.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/_templates/autosummary/function.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/_templates/autosummary/function_in_subdir.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/cite.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/conf.py +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/help.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/index.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/install/install.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/install/install_pip.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/install/install_source.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/models/categorization/attention.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/models/categorization/channel.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/models/categorization/convolution.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/models/categorization/filterbank.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/models/categorization/gnn.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/models/categorization/interpretable.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/models/categorization/lbm.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/models/categorization/recurrent.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/models/categorization/spd.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/models/models.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/models/models_categorization.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/models/models_table.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/models/models_visualization.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/docs/sg_execution_times.rst +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/pyproject.toml +0 -0
- {braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: braindecode
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.8.0.dev1122
|
|
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>
|
{braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/augmentation/base.py
RENAMED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
# Bruno Aristimunha <b.aristimunha@gmail.com>
|
|
4
4
|
# Martin Wimpff <martin.wimpff@iss.uni-stuttgart.de>
|
|
5
5
|
# Valentin Iovene <val@too.gy>
|
|
6
|
+
# Sarthak Tayal <sarthaktayal2@gmail.com>
|
|
6
7
|
# License: BSD (3-clause)
|
|
7
8
|
|
|
8
9
|
from numbers import Real
|
|
@@ -176,6 +177,14 @@ class Compose(Transform):
|
|
|
176
177
|
return X, y
|
|
177
178
|
|
|
178
179
|
|
|
180
|
+
def _as_mixed_target(y, lam_dtype):
|
|
181
|
+
# an untouched target is the same as being mixed with itself with lam of one
|
|
182
|
+
if isinstance(y, (tuple, list)) and len(y) == 3:
|
|
183
|
+
return tuple(y)
|
|
184
|
+
lam = torch.ones(y.shape[0], device=y.device, dtype=lam_dtype)
|
|
185
|
+
return y, y, lam
|
|
186
|
+
|
|
187
|
+
|
|
179
188
|
class _AugmentationCollate:
|
|
180
189
|
"""Collate that applies a transform to each batch, with optional expansion.
|
|
181
190
|
|
|
@@ -193,7 +202,10 @@ class _AugmentationCollate:
|
|
|
193
202
|
``0`` (default) applies the transform in place (batch size unchanged).
|
|
194
203
|
``> 0`` keeps the clean originals and appends ``n_augmentation``
|
|
195
204
|
independently transformed copies, returning ``(X, y)`` of
|
|
196
|
-
``(1 + n_augmentation)`` times the original size.
|
|
205
|
+
``(1 + n_augmentation)`` times the original size. When the transform
|
|
206
|
+
mixes targets, as :class:`braindecode.augmentation.Mixup` does, ``y``
|
|
207
|
+
stays the ``(y_a, y_b, lam)`` triple and the clean originals get a
|
|
208
|
+
mixing coefficient of one.
|
|
197
209
|
"""
|
|
198
210
|
|
|
199
211
|
def __init__(self, transform, device=None, n_augmentation=0):
|
|
@@ -216,6 +228,18 @@ class _AugmentationCollate:
|
|
|
216
228
|
aug_X, aug_y = self.transform(X, y)
|
|
217
229
|
xs.append(aug_X)
|
|
218
230
|
ys.append(aug_y)
|
|
231
|
+
mixed_ys = [
|
|
232
|
+
aug_y
|
|
233
|
+
for aug_y in ys
|
|
234
|
+
if isinstance(aug_y, (tuple, list)) and len(aug_y) == 3
|
|
235
|
+
]
|
|
236
|
+
if mixed_ys:
|
|
237
|
+
# a target-mixing transform such as Mixup returns (y_a, y_b, lam),
|
|
238
|
+
# so the parts are concatenated one by one and the untouched copies
|
|
239
|
+
# are given a mixing coefficient of one
|
|
240
|
+
lam_dtype = mixed_ys[0][2].dtype
|
|
241
|
+
ys = [_as_mixed_target(aug_y, lam_dtype) for aug_y in ys]
|
|
242
|
+
return torch.cat(xs), tuple(torch.cat(part) for part in zip(*ys))
|
|
219
243
|
return torch.cat(xs), torch.cat(ys)
|
|
220
244
|
|
|
221
245
|
|
{braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/augmentation/functional.py
RENAMED
|
@@ -1065,13 +1065,11 @@ def mixup(
|
|
|
1065
1065
|
batch_size, n_channels, n_times = X.shape
|
|
1066
1066
|
|
|
1067
1067
|
X_mix = torch.zeros((batch_size, n_channels, n_times)).to(device)
|
|
1068
|
-
y_a =
|
|
1069
|
-
y_b =
|
|
1068
|
+
y_a = y.clone()
|
|
1069
|
+
y_b = y[idx_perm].clone()
|
|
1070
1070
|
|
|
1071
1071
|
for idx in range(batch_size):
|
|
1072
1072
|
X_mix[idx] = lam[idx] * X[idx] + (1 - lam[idx]) * X[idx_perm[idx]]
|
|
1073
|
-
y_a[idx] = y[idx]
|
|
1074
|
-
y_b[idx] = y[idx_perm[idx]]
|
|
1075
1073
|
|
|
1076
1074
|
return X_mix, (y_a, y_b, lam)
|
|
1077
1075
|
|
{braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/augmentation/transforms.py
RENAMED
|
@@ -1068,16 +1068,18 @@ class Mixup(Transform):
|
|
|
1068
1068
|
device = X.device
|
|
1069
1069
|
batch_size, _, _ = X.shape
|
|
1070
1070
|
|
|
1071
|
+
# lam follows the dtype of X, numpy draws float64 and that would leak
|
|
1072
|
+
# into the mixed signal and into the loss returned by mixup_criterion
|
|
1071
1073
|
if self.alpha > 0:
|
|
1072
1074
|
if self.beta_per_sample:
|
|
1073
1075
|
lam = torch.as_tensor(
|
|
1074
1076
|
self.rng.beta(self.alpha, self.alpha, batch_size)
|
|
1075
|
-
).to(device)
|
|
1077
|
+
).to(device=device, dtype=X.dtype)
|
|
1076
1078
|
else:
|
|
1077
|
-
lam = torch.ones(batch_size).to(device)
|
|
1079
|
+
lam = torch.ones(batch_size, dtype=X.dtype).to(device)
|
|
1078
1080
|
lam *= self.rng.beta(self.alpha, self.alpha)
|
|
1079
1081
|
else:
|
|
1080
|
-
lam = torch.ones(batch_size).to(device)
|
|
1082
|
+
lam = torch.ones(batch_size, dtype=X.dtype).to(device)
|
|
1081
1083
|
|
|
1082
1084
|
idx_perm = torch.as_tensor(
|
|
1083
1085
|
self.rng.permutation(
|
|
@@ -228,8 +228,9 @@ class EEGClassifier(_EEGNeuralNet, NeuralNetClassifier):
|
|
|
228
228
|
if return_targets:
|
|
229
229
|
return preds, X.get_metadata()["target"].to_numpy()
|
|
230
230
|
return preds
|
|
231
|
+
self.check_is_fitted()
|
|
231
232
|
return predict_trials(
|
|
232
|
-
module=self.
|
|
233
|
+
module=self.module_,
|
|
233
234
|
dataset=X,
|
|
234
235
|
return_targets=return_targets,
|
|
235
236
|
batch_size=self.batch_size,
|
{braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/datasets/sleep_physionet.py
RENAMED
|
@@ -117,9 +117,15 @@ class SleepPhysionet(BaseConcatDataset):
|
|
|
117
117
|
sleep_event_inds = np.where(mask)[0]
|
|
118
118
|
|
|
119
119
|
# Crop raw
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
120
|
+
a_tmin = annots[sleep_event_inds[0]]
|
|
121
|
+
a_tmax = annots[sleep_event_inds[-1]]
|
|
122
|
+
tmin = a_tmin["onset"] - crop_wake_mins * 60
|
|
123
|
+
tmax = a_tmax["onset"] + a_tmax["duration"] + crop_wake_mins * 60
|
|
124
|
+
raw.crop(
|
|
125
|
+
tmin=max(tmin, raw.times[0]),
|
|
126
|
+
tmax=min(tmax, raw.times[-1] + 1 / raw.info["sfreq"]),
|
|
127
|
+
include_tmax=False,
|
|
128
|
+
)
|
|
123
129
|
|
|
124
130
|
# Rename EEG channels
|
|
125
131
|
ch_names = {i: i.replace("EEG ", "") for i in raw.ch_names if "EEG" in i}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# Authors: Bruno Aristimunha <b.aristimunha@gmail.com>
|
|
2
2
|
# Pierre Guetschel <pierre.guetschel@gmail.com>
|
|
3
|
+
# Sarthak Tayal <sarthaktayal2@gmail.com>
|
|
3
4
|
#
|
|
4
5
|
# License: BSD (3-clause)
|
|
5
6
|
|
|
@@ -126,7 +127,8 @@ class _EEGNeuralNet(NeuralNet, abc.ABC):
|
|
|
126
127
|
self._last_window_inds_ = None
|
|
127
128
|
|
|
128
129
|
def predict_with_window_inds_and_ys(self, dataset):
|
|
129
|
-
self.module.
|
|
130
|
+
# self.module can still be a name or a class, self.module_ is the built one
|
|
131
|
+
self.module_.eval()
|
|
130
132
|
preds = []
|
|
131
133
|
i_window_in_trials = []
|
|
132
134
|
i_window_stops = []
|
|
@@ -142,7 +144,7 @@ class _EEGNeuralNet(NeuralNet, abc.ABC):
|
|
|
142
144
|
i_window_in_trials.append(i[0].cpu().numpy())
|
|
143
145
|
i_window_stops.append(i[2].cpu().numpy())
|
|
144
146
|
with torch.no_grad():
|
|
145
|
-
preds.append(to_numpy(self.
|
|
147
|
+
preds.append(to_numpy(self.module_.forward(X.to(self.device))))
|
|
146
148
|
window_ys.append(y.cpu().numpy())
|
|
147
149
|
preds = np.concatenate(preds)
|
|
148
150
|
i_window_in_trials = np.concatenate(i_window_in_trials)
|
|
@@ -71,6 +71,7 @@ from .util import (
|
|
|
71
71
|
models_mandatory_parameters,
|
|
72
72
|
positions_from_chs_info,
|
|
73
73
|
)
|
|
74
|
+
from .zuna import ZUNA
|
|
74
75
|
|
|
75
76
|
# Call this last in order to make sure the dataset list is populated with
|
|
76
77
|
# the models imported in this file.
|
|
@@ -145,6 +146,7 @@ __all__ = [
|
|
|
145
146
|
"TIDNet",
|
|
146
147
|
"TSception",
|
|
147
148
|
"USleep",
|
|
149
|
+
"ZUNA",
|
|
148
150
|
"build_model_config",
|
|
149
151
|
"_init_models_dict",
|
|
150
152
|
"models_mandatory_parameters",
|
{braindecode-1.7.0.dev183981614 → braindecode-1.8.0.dev1122}/braindecode/models/fblightconvnet.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
|
|
@@ -61,15 +65,18 @@ class FBLightConvNet(EEGModuleMixin, nn.Module):
|
|
|
61
65
|
|
|
62
66
|
Parameters
|
|
63
67
|
----------
|
|
64
|
-
n_bands : int or None or list of tuple of int, default=
|
|
68
|
+
n_bands : int or None or list of tuple of int, default=9
|
|
65
69
|
Number of frequency bands or a list of frequency band tuples. If a list of tuples is provided,
|
|
66
70
|
each tuple defines the lower and upper bounds of a frequency band.
|
|
67
71
|
n_filters_spat : int, default=32
|
|
68
72
|
Number of spatial filters in the depthwise convolutional layer.
|
|
69
73
|
n_dim : int, default=3
|
|
70
74
|
Number of dimensions for the temporal reduction layer.
|
|
71
|
-
|
|
72
|
-
|
|
75
|
+
win_len : int, default=250
|
|
76
|
+
Length in samples of the non-overlapping temporal windows the signal is
|
|
77
|
+
split into before the variance based feature extraction. The number of
|
|
78
|
+
windows passed to the attention module is ``n_times // win_len``, so
|
|
79
|
+
``n_times`` has to be at least ``win_len``.
|
|
73
80
|
activation : nn.Module, default=nn.ELU
|
|
74
81
|
Activation function class to apply after convolutional layers.
|
|
75
82
|
verbose : bool, default=False
|
|
@@ -82,6 +89,9 @@ class FBLightConvNet(EEGModuleMixin, nn.Module):
|
|
|
82
89
|
If True, applies softmax to the attention weights.
|
|
83
90
|
bias : bool, default=False
|
|
84
91
|
If True, includes a bias term in the convolutional layers.
|
|
92
|
+
stride_factor : int or None, default=None
|
|
93
|
+
Deprecated and ignored, it will be removed in a future release. The
|
|
94
|
+
temporal segmentation of this model is controlled by ``win_len``.
|
|
85
95
|
|
|
86
96
|
References
|
|
87
97
|
----------
|
|
@@ -106,7 +116,7 @@ class FBLightConvNet(EEGModuleMixin, nn.Module):
|
|
|
106
116
|
n_bands=9,
|
|
107
117
|
n_filters_spat: int = 32,
|
|
108
118
|
n_dim: int = 3,
|
|
109
|
-
stride_factor: int =
|
|
119
|
+
stride_factor: Optional[int] = None,
|
|
110
120
|
win_len: int = 250,
|
|
111
121
|
heads: int = 8,
|
|
112
122
|
weight_softmax: bool = True,
|
|
@@ -125,6 +135,14 @@ class FBLightConvNet(EEGModuleMixin, nn.Module):
|
|
|
125
135
|
)
|
|
126
136
|
del n_outputs, n_chans, chs_info, n_times, input_window_seconds, sfreq
|
|
127
137
|
|
|
138
|
+
if stride_factor is not None:
|
|
139
|
+
warn(
|
|
140
|
+
"The parameter `stride_factor` is deprecated and ignored, it "
|
|
141
|
+
"will be removed in a future release. The temporal "
|
|
142
|
+
"segmentation of FBLightConvNet is set by `win_len`.",
|
|
143
|
+
DeprecationWarning,
|
|
144
|
+
)
|
|
145
|
+
|
|
128
146
|
# Parameters
|
|
129
147
|
self.n_bands = n_bands
|
|
130
148
|
self.n_filters_spat = n_filters_spat
|
|
@@ -138,6 +156,13 @@ class FBLightConvNet(EEGModuleMixin, nn.Module):
|
|
|
138
156
|
self.filter_parameters = filter_parameters or {}
|
|
139
157
|
|
|
140
158
|
# Checkers
|
|
159
|
+
if self.n_times < self.win_len:
|
|
160
|
+
raise ValueError(
|
|
161
|
+
f"Time dimension ({self.n_times}) is shorter than win_len "
|
|
162
|
+
f"({self.win_len}), so the model cannot build a single "
|
|
163
|
+
f"temporal window. Pass a longer input or lower `win_len`."
|
|
164
|
+
)
|
|
165
|
+
|
|
141
166
|
self.n_times_truncated = self.n_times
|
|
142
167
|
if self.n_times % self.win_len != 0:
|
|
143
168
|
warn(
|
|
@@ -194,10 +219,12 @@ class FBLightConvNet(EEGModuleMixin, nn.Module):
|
|
|
194
219
|
def forward(self, x: torch.Tensor) -> torch.Tensor:
|
|
195
220
|
"""
|
|
196
221
|
Forward pass of the FBLightConvNet model.
|
|
222
|
+
|
|
197
223
|
Parameters
|
|
198
224
|
----------
|
|
199
225
|
x : torch.Tensor
|
|
200
226
|
Input tensor with shape (batch_size, n_chans, n_times).
|
|
227
|
+
|
|
201
228
|
Returns
|
|
202
229
|
-------
|
|
203
230
|
torch.Tensor
|
|
@@ -61,3 +61,4 @@ EEGDINO,General,Classification,200,"n_chans, n_outputs, n_times",4539698,"EEGDIN
|
|
|
61
61
|
DANCE,General,Event Detection,200,"n_chans, n_outputs, n_times, sfreq, chs_info",29813542,"DANCE(n_chans=19, n_outputs=4, n_times=6400, sfreq=200, input_window_seconds=32.0, chs_info=[{'ch_name': f'E{i+1}', 'kind': 'eeg', 'loc': numpy.random.default_rng(2024).random(12)} for i in range(19)])","Convolution,Attention/Transformer,Channel",EEG
|
|
62
62
|
STEEGFormer,General,Classification,250,"n_chans, n_outputs, n_times",25305604,"STEEGFormer(n_chans=22, n_outputs=4, n_times=1000)","Attention/Transformer,Foundation Model",EEG
|
|
63
63
|
MVPFormer,General,"Prediction, Embedding",512,"n_chans, n_outputs, n_times, sfreq",3356978,"MVPFormer(n_chans=22, n_outputs=4, n_times=2000, sfreq=100)","Foundation Model,Attention/Transformer",EEG
|
|
64
|
+
ZUNA,General,"Classification,Embedding",256,"chs_info, n_outputs, n_times",172104100,"ZUNA(chs_info=<user>, n_outputs=4, n_times=1280)","Foundation Model,Channel,Attention/Transformer",EEG
|
|
@@ -503,6 +503,15 @@ models_mandatory_parameters: list[
|
|
|
503
503
|
],
|
|
504
504
|
},
|
|
505
505
|
),
|
|
506
|
+
(
|
|
507
|
+
"ZUNA",
|
|
508
|
+
["chs_info", "n_outputs", "n_times"],
|
|
509
|
+
{
|
|
510
|
+
"n_times": 1280,
|
|
511
|
+
"sfreq": 256.0,
|
|
512
|
+
"input_window_seconds": 5.0,
|
|
513
|
+
},
|
|
514
|
+
),
|
|
506
515
|
]
|
|
507
516
|
|
|
508
517
|
################################################################
|