Braindecode 1.8.1.dev170153392__tar.gz → 1.8.1.dev170225906__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.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/NOTICE.txt +0 -3
- {braindecode-1.8.1.dev170153392/braindecode.egg-info → braindecode-1.8.1.dev170225906}/PKG-INFO +1 -1
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/augmentation/__init__.py +0 -2
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/augmentation/functional.py +0 -48
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/augmentation/transforms.py +1 -52
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/base.py +3 -69
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/eegneuralnet.py +1 -6
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/__init__.py +0 -6
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/barista.py +11 -23
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/base.py +0 -18
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/brant.py +7 -18
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/codebrain.py +15 -90
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/csbrain.py +12 -24
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/eeg_clip.py +9 -71
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/mscformer.py +1 -21
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/msvtnet.py +5 -105
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/neurorvq.py +31 -118
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/neurorvq_tokenizer.py +10 -30
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/reve.py +39 -117
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/sinc_shallow.py +1 -2
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/sleepfm.py +12 -62
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/steegformer.py +9 -16
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/summary.csv +0 -3
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/tfm_tokenizer.py +3 -44
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/util.py +0 -8
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/__init__.py +1 -2
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/attention.py +9 -37
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/blocks.py +5 -121
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/channels.py +0 -77
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/quantization.py +5 -5
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/preprocessing/preprocess.py +0 -17
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/samplers/base.py +61 -60
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/training/losses.py +4 -5
- braindecode-1.8.1.dev170225906/braindecode/version.py +1 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906/braindecode.egg-info}/PKG-INFO +1 -1
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode.egg-info/SOURCES.txt +0 -3
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/api.rst +0 -11
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/whats_new.rst +0 -74
- braindecode-1.8.1.dev170153392/braindecode/models/duin.py +0 -454
- braindecode-1.8.1.dev170153392/braindecode/models/epint.py +0 -315
- braindecode-1.8.1.dev170153392/braindecode/models/gcnsnet.py +0 -338
- braindecode-1.8.1.dev170153392/braindecode/version.py +0 -1
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/LICENSE.txt +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/MANIFEST.in +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/README.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/__init__.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/augmentation/base.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/classifier.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/__init__.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/_notebook_viewer.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/bbci.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/bcicomp.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/bids/__init__.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/bids/datasets.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/bids/format.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/bids/hub.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/bids/hub_format.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/bids/hub_io.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/bids/hub_validation.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/bids/iterable.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/chb_mit.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/collate.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/mne.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/moabb.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/nmt.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/registry.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/siena.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/sleep_physio_challe_18.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/sleep_physionet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/tuh.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/utils.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/xy.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datautil/__init__.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datautil/channel_utils.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datautil/hub_formats.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datautil/serialization.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datautil/util.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/functional/__init__.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/functional/_real_dft.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/functional/functions.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/functional/initialization.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/atcnet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/attentionbasenet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/attn_sleep.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/axon.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/bendr.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/biot.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/brainbert.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/brainmodule.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/brainomni.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/cbramod.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/config.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/contrawr.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/ctnet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/dance.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/deep4.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/deepsleepnet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/dgcnn.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/diver1.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/eegconformer.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/eegdino.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/eeginception_erp.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/eeginception_mi.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/eegitnet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/eegminer.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/eegnet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/eegnex.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/eegpt.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/eegsimpleconv.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/eegsym.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/eegtcnet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/emg2qwerty.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/fbcnet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/fblightconvnet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/fbmsnet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/guetschel2026.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/hybrid.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/ifnet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/labram.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/luna.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/mapa.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/medformer.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/meta_neuromotor.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/mirepnet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/mvpformer.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/neuropose.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/patchedtransformer.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/popt.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/sccnet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/seizure_transformer.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/sensingdynamics.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/shallow_fbcsp.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/signal_jepa.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/sparcnet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/sstdpn.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/syncnet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/tcformer.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/tcn.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/tidnet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/tmsanet.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/tsinception.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/usleep.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/vemg2pose.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/zuna.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/activation.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/convolution.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/dance_modules.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/filter.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/layers.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/linear.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/linear_attention.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/parametrization.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/popt_modules.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/stats.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/util.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/modules/wrapper.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/preprocessing/__init__.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/preprocessing/eegprep_preprocess.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/preprocessing/mne_preprocess.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/preprocessing/util.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/preprocessing/windowers.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/regressor.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/samplers/__init__.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/samplers/ssl.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/training/__init__.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/training/callbacks.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/training/scoring.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/util.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/visualization/__init__.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/visualization/activations.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/visualization/attribution.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/visualization/confusion_matrices.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/visualization/frequency.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/visualization/metrics.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/visualization/sanity.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/visualization/topology.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode.egg-info/dependency_links.txt +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode.egg-info/requires.txt +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode.egg-info/top_level.txt +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/Makefile +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/_templates/autosummary/class.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/_templates/autosummary/class_in_subdir.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/_templates/autosummary/function.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/_templates/autosummary/function_in_subdir.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/agent_docs.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/cite.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/conf.py +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/help.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/index.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/install/install.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/install/install_pip.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/install/install_source.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/models/categorization/attention.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/models/categorization/channel.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/models/categorization/convolution.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/models/categorization/filterbank.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/models/categorization/gnn.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/models/categorization/interpretable.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/models/categorization/lbm.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/models/categorization/recurrent.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/models/categorization/spd.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/models/models.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/models/models_categorization.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/models/models_table.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/models/models_visualization.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/sg_execution_times.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/docs/user_guide/channel_strategies.rst +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/pyproject.toml +0 -0
- {braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/setup.cfg +0 -0
|
@@ -40,7 +40,6 @@ The following components are licensed under the MIT License:
|
|
|
40
40
|
|
|
41
41
|
- `braindecode/models/ctnet.py`
|
|
42
42
|
- `braindecode/models/dance.py`
|
|
43
|
-
- `braindecode/models/duin.py`
|
|
44
43
|
- `braindecode/models/medformer.py`
|
|
45
44
|
- `braindecode/models/tcformer.py`
|
|
46
45
|
- `braindecode/models/ifnet.py`
|
|
@@ -55,8 +54,6 @@ The following components are licensed under the MIT License:
|
|
|
55
54
|
- `docs/_static/model/seizure_transformer_arch.png`
|
|
56
55
|
- `braindecode/models/guetschel2026.py`
|
|
57
56
|
- `braindecode/models/tmsanet.py`
|
|
58
|
-
- `braindecode/models/epint.py`
|
|
59
|
-
- `braindecode/models/gcnsnet.py`
|
|
60
57
|
|
|
61
58
|
The `brainomni.py` file is a derivative of `OpenTSLab/BrainOmni` (MIT), whose
|
|
62
59
|
SEANet codec derives from Meta's `facebookresearch/encodec` (MIT). The
|
{braindecode-1.8.1.dev170153392/braindecode.egg-info → braindecode-1.8.1.dev170225906}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: braindecode
|
|
3
|
-
Version: 1.8.1.
|
|
3
|
+
Version: 1.8.1.dev170225906
|
|
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>
|
|
@@ -10,7 +10,6 @@ from .transforms import (
|
|
|
10
10
|
ChannelsReref,
|
|
11
11
|
ChannelsShuffle,
|
|
12
12
|
ChannelsSymmetry,
|
|
13
|
-
CutMix,
|
|
14
13
|
FrequencyShift,
|
|
15
14
|
FTSurrogate,
|
|
16
15
|
GaussianNoise,
|
|
@@ -37,7 +36,6 @@ __all__ = [
|
|
|
37
36
|
"SignFlip",
|
|
38
37
|
"FTSurrogate",
|
|
39
38
|
"ChannelsShuffle",
|
|
40
|
-
"CutMix",
|
|
41
39
|
"ChannelsDropout",
|
|
42
40
|
"GaussianNoise",
|
|
43
41
|
"ChannelsSymmetry",
|
|
@@ -1075,54 +1075,6 @@ def mixup(
|
|
|
1075
1075
|
return X_mix, (y_a, y_b, lam)
|
|
1076
1076
|
|
|
1077
1077
|
|
|
1078
|
-
def cutmix(
|
|
1079
|
-
X: torch.Tensor,
|
|
1080
|
-
y: torch.Tensor,
|
|
1081
|
-
idx_perm: torch.Tensor,
|
|
1082
|
-
cut_t_start: torch.Tensor,
|
|
1083
|
-
cut_t_len: torch.Tensor,
|
|
1084
|
-
) -> tuple[torch.Tensor, torch.Tensor]:
|
|
1085
|
-
"""Paste a time region of shuffled examples into the original examples.
|
|
1086
|
-
|
|
1087
|
-
See [1]_ for details.
|
|
1088
|
-
|
|
1089
|
-
Parameters
|
|
1090
|
-
----------
|
|
1091
|
-
X : torch.Tensor
|
|
1092
|
-
EEG data in form ``batch_size, n_channels, n_times``
|
|
1093
|
-
y : torch.Tensor
|
|
1094
|
-
Target of length ``batch_size``
|
|
1095
|
-
idx_perm : torch.Tensor
|
|
1096
|
-
Permuted indices of example that are mixed into original examples.
|
|
1097
|
-
cut_t_start : torch.Tensor
|
|
1098
|
-
Start index of the pasted time region for each example.
|
|
1099
|
-
cut_t_len : torch.Tensor
|
|
1100
|
-
Length of the pasted time region for each example.
|
|
1101
|
-
|
|
1102
|
-
Returns
|
|
1103
|
-
-------
|
|
1104
|
-
tuple
|
|
1105
|
-
``X``, ``y``. Where ``X`` is augmented and ``y`` is a tuple of length
|
|
1106
|
-
3 containing the labels of the two mixed examples and the fraction of
|
|
1107
|
-
each example kept from the original, ``1 - cut_t_len / n_times``.
|
|
1108
|
-
|
|
1109
|
-
References
|
|
1110
|
-
----------
|
|
1111
|
-
.. [1] Sangdoo Yun, Dongyoon Han, Seong Joon Oh, Sanghyuk Chun,
|
|
1112
|
-
Junsuk Choe, Youngjoon Yoo (2019). CutMix: Regularization Strategy
|
|
1113
|
-
to Train Strong Classifiers with Localizable Features. In 2019
|
|
1114
|
-
IEEE/CVF International Conference on Computer Vision (ICCV)
|
|
1115
|
-
Online: https://arxiv.org/abs/1905.04899
|
|
1116
|
-
"""
|
|
1117
|
-
n_times = X.shape[-1]
|
|
1118
|
-
t = torch.arange(n_times, device=X.device)
|
|
1119
|
-
start = cut_t_start[:, None]
|
|
1120
|
-
in_cut = (t >= start) & (t < start + cut_t_len[:, None])
|
|
1121
|
-
X_mix = torch.where(in_cut[:, None], X[idx_perm], X)
|
|
1122
|
-
lam = (n_times - cut_t_len).to(X.dtype) / n_times
|
|
1123
|
-
return X_mix, (y.clone(), y[idx_perm].clone(), lam)
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
1078
|
def segmentation_reconstruction(
|
|
1127
1079
|
X: torch.Tensor,
|
|
1128
1080
|
y: torch.Tensor,
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
# Gustavo Rodrigues <gustavenrique01@gmail.com>
|
|
4
4
|
# Bruna Lopes <brunajaflopes@gmail.com>
|
|
5
5
|
# Sarthak Tayal <sarthaktayal2@gmail.com>
|
|
6
|
-
# Anton Soloviev <anton@praviel.com>
|
|
7
6
|
#
|
|
8
7
|
# License: BSD (3-clause)
|
|
9
8
|
|
|
@@ -25,7 +24,6 @@ from .functional import (
|
|
|
25
24
|
channels_permute,
|
|
26
25
|
channels_rereference,
|
|
27
26
|
channels_shuffle,
|
|
28
|
-
cutmix,
|
|
29
27
|
frequency_shift,
|
|
30
28
|
ft_surrogate,
|
|
31
29
|
gaussian_noise,
|
|
@@ -1097,55 +1095,6 @@ class Mixup(Transform):
|
|
|
1097
1095
|
}
|
|
1098
1096
|
|
|
1099
1097
|
|
|
1100
|
-
class CutMix(Mixup):
|
|
1101
|
-
"""Implements CutMix for EEG data.
|
|
1102
|
-
|
|
1103
|
-
A random time region of each example is replaced by the same region of
|
|
1104
|
-
a shuffled example of the batch, see [1]_. As in the reference code [2]_,
|
|
1105
|
-
a coefficient ``lam`` is drawn from a Beta distribution, the region is
|
|
1106
|
-
``(1 - lam) * n_times`` long (the 1-D analogue of the cut area ratio
|
|
1107
|
-
``1 - lam``) around a uniformly drawn center, it is clipped at the trial
|
|
1108
|
-
boundaries, and ``lam`` is then recomputed from the pasted length.
|
|
1109
|
-
|
|
1110
|
-
Like :class:`Mixup`, it applies to whole batches and returns targets
|
|
1111
|
-
``(y_a, y_b, lam)`` for :func:`braindecode.training.mixup_criterion`.
|
|
1112
|
-
|
|
1113
|
-
Parameters
|
|
1114
|
-
----------
|
|
1115
|
-
alpha : float
|
|
1116
|
-
Parameter of the Beta distribution of ``lam``. ``alpha <= 0`` cuts
|
|
1117
|
-
nothing.
|
|
1118
|
-
beta_per_sample : bool (default=False)
|
|
1119
|
-
By default, one ``lam`` per batch is drawn. If True, one per sample.
|
|
1120
|
-
random_state : int | numpy.random.Generator, optional
|
|
1121
|
-
Seed to be used to instantiate numpy random number generator instance.
|
|
1122
|
-
Defaults to None.
|
|
1123
|
-
|
|
1124
|
-
References
|
|
1125
|
-
----------
|
|
1126
|
-
.. [1] Sangdoo Yun, Dongyoon Han, Seong Joon Oh, Sanghyuk Chun,
|
|
1127
|
-
Junsuk Choe, Youngjoon Yoo (2019). CutMix: Regularization Strategy
|
|
1128
|
-
to Train Strong Classifiers with Localizable Features. In 2019
|
|
1129
|
-
IEEE/CVF International Conference on Computer Vision (ICCV)
|
|
1130
|
-
Online: https://arxiv.org/abs/1905.04899
|
|
1131
|
-
.. [2] https://github.com/clovaai/CutMix-PyTorch/blob/master/train.py
|
|
1132
|
-
"""
|
|
1133
|
-
|
|
1134
|
-
operation = staticmethod(cutmix) # type: ignore[assignment]
|
|
1135
|
-
|
|
1136
|
-
def get_augmentation_params(self, *batch):
|
|
1137
|
-
"""Return idx_perm and the cut_t_start, cut_t_len of each region."""
|
|
1138
|
-
params = super().get_augmentation_params(*batch)
|
|
1139
|
-
lam = params.pop("lam")
|
|
1140
|
-
n_times = batch[0].shape[-1]
|
|
1141
|
-
half = ((1 - lam) * n_times).long() // 2
|
|
1142
|
-
center = torch.as_tensor(self.rng.randint(n_times, size=len(lam)))
|
|
1143
|
-
center = center.to(lam.device)
|
|
1144
|
-
start = (center - half).clamp(min=0)
|
|
1145
|
-
end = (center + half).clamp(max=n_times)
|
|
1146
|
-
return dict(params, cut_t_start=start, cut_t_len=end - start)
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
1098
|
class SegmentationReconstruction(Transform):
|
|
1150
1099
|
"""Segmentation Reconstruction from Lotte (2015) [Lotte2015]_.
|
|
1151
1100
|
|
|
@@ -1334,7 +1283,7 @@ class MaskEncoding(Transform):
|
|
|
1334
1283
|
)
|
|
1335
1284
|
|
|
1336
1285
|
time_start = self.rng.randint(
|
|
1337
|
-
0, n_times - segment_length
|
|
1286
|
+
0, n_times - segment_length, (batch_size, self.n_segments)
|
|
1338
1287
|
)
|
|
1339
1288
|
time_start = torch.from_numpy(time_start)
|
|
1340
1289
|
|
{braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/datasets/base.py
RENAMED
|
@@ -1281,49 +1281,6 @@ class WindowsDataset(_ZarrMixin, RecordDataset):
|
|
|
1281
1281
|
)
|
|
1282
1282
|
|
|
1283
1283
|
|
|
1284
|
-
def _lazy_source_files(ds) -> list:
|
|
1285
|
-
"""Return the files ``ds`` still reads its signal from (none once preloaded)."""
|
|
1286
|
-
signal = ds.raw if hasattr(ds, "raw") else getattr(ds, "windows", None)
|
|
1287
|
-
if signal is None or getattr(signal, "preload", True):
|
|
1288
|
-
return []
|
|
1289
|
-
files = list(
|
|
1290
|
-
getattr(signal, "filenames", None) or [getattr(signal, "filename", None)]
|
|
1291
|
-
)
|
|
1292
|
-
raw = getattr(signal, "_raw", None)
|
|
1293
|
-
if isinstance(raw, mne.io.BaseRaw) and not raw.preload:
|
|
1294
|
-
files += raw.filenames # mne.Epochs of a lazily read Raw read through it
|
|
1295
|
-
return [f for f in files if f is not None]
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
def _dir_key(directory):
|
|
1299
|
-
"""Identify a directory by device and inode, whatever its spelling."""
|
|
1300
|
-
stat = os.stat(directory)
|
|
1301
|
-
return stat.st_dev, stat.st_ino
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
def _overwrite_conflicts(datasets, path, offset):
|
|
1305
|
-
"""Yield ``(i_ds, i_target, target_dir)`` for each dataset ``i_ds`` that
|
|
1306
|
-
lazily reads from inside ``target_dir = path/<i_target + offset>``, which
|
|
1307
|
-
``save(overwrite=True)`` deletes before writing dataset ``i_target``.
|
|
1308
|
-
"""
|
|
1309
|
-
targets = {}
|
|
1310
|
-
for i in range(len(datasets)):
|
|
1311
|
-
target_dir = os.path.join(path, str(i + offset))
|
|
1312
|
-
if os.path.isdir(target_dir):
|
|
1313
|
-
targets[_dir_key(target_dir)] = (i, target_dir)
|
|
1314
|
-
if not targets:
|
|
1315
|
-
return
|
|
1316
|
-
for i_ds, ds in enumerate(datasets):
|
|
1317
|
-
for file in _lazy_source_files(ds):
|
|
1318
|
-
# ancestors of the name and of the file it links to (DataLad)
|
|
1319
|
-
parents = {
|
|
1320
|
-
*Path(os.path.abspath(file)).parents,
|
|
1321
|
-
*Path(os.path.realpath(file)).parents,
|
|
1322
|
-
}
|
|
1323
|
-
for key in {_dir_key(p) for p in parents if p.is_dir()} & targets.keys():
|
|
1324
|
-
yield (i_ds, *targets[key])
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
1284
|
@register_dataset
|
|
1328
1285
|
class BaseConcatDataset(ConcatDataset, HubDatasetMixin, Generic[T]):
|
|
1329
1286
|
"""A base class for concatenated datasets.
|
|
@@ -1561,9 +1518,7 @@ class BaseConcatDataset(ConcatDataset, HubDatasetMixin, Generic[T]):
|
|
|
1561
1518
|
metadata : pd.DataFrame
|
|
1562
1519
|
DataFrame containing as many rows as there are windows in the
|
|
1563
1520
|
BaseConcatDataset, with the metadata and description information
|
|
1564
|
-
for each window
|
|
1565
|
-
in ``datasets`` of the dataset (recording) each window comes from.
|
|
1566
|
-
Samplers use it to keep recordings apart.
|
|
1521
|
+
for each window.
|
|
1567
1522
|
"""
|
|
1568
1523
|
if not all(
|
|
1569
1524
|
[
|
|
@@ -1589,15 +1544,9 @@ class BaseConcatDataset(ConcatDataset, HubDatasetMixin, Generic[T]):
|
|
|
1589
1544
|
"Dataset descriptions cannot contain the reserved window "
|
|
1590
1545
|
"metadata key 'i_trial_in_dataset'."
|
|
1591
1546
|
)
|
|
1592
|
-
if "i_dataset" in df.columns or "i_dataset" in ds.description:
|
|
1593
|
-
raise ValueError(
|
|
1594
|
-
"Window metadata and dataset descriptions cannot contain the "
|
|
1595
|
-
"key 'i_dataset', which get_metadata() reserves for the "
|
|
1596
|
-
"position of the dataset each window comes from. Rename it."
|
|
1597
|
-
)
|
|
1598
1547
|
|
|
1599
1548
|
all_dfs = list()
|
|
1600
|
-
for
|
|
1549
|
+
for ds in self.datasets:
|
|
1601
1550
|
if hasattr(ds, "_windows") and ds._windows is not None:
|
|
1602
1551
|
df = ds._windows.metadata
|
|
1603
1552
|
else:
|
|
@@ -1607,7 +1556,6 @@ class BaseConcatDataset(ConcatDataset, HubDatasetMixin, Generic[T]):
|
|
|
1607
1556
|
df = df.copy()
|
|
1608
1557
|
for k, v in ds.description.items():
|
|
1609
1558
|
df[k] = v
|
|
1610
|
-
df["i_dataset"] = i_ds
|
|
1611
1559
|
all_dfs.append(df)
|
|
1612
1560
|
|
|
1613
1561
|
return pd.concat(all_dfs)
|
|
@@ -1900,11 +1848,6 @@ class BaseConcatDataset(ConcatDataset, HubDatasetMixin, Generic[T]):
|
|
|
1900
1848
|
dataset description.
|
|
1901
1849
|
"""
|
|
1902
1850
|
description = pd.DataFrame(description)
|
|
1903
|
-
if len(description.columns) and len(description) != len(self.datasets):
|
|
1904
|
-
raise ValueError(
|
|
1905
|
-
f"Length of values ({len(description)}) does not match "
|
|
1906
|
-
f"number of datasets ({len(self.datasets)})."
|
|
1907
|
-
)
|
|
1908
1851
|
for key, value in description.items():
|
|
1909
1852
|
for ds, value_ in zip(self.datasets, value):
|
|
1910
1853
|
ds.set_description({key: value_}, overwrite=overwrite)
|
|
@@ -1935,9 +1878,7 @@ class BaseConcatDataset(ConcatDataset, HubDatasetMixin, Generic[T]):
|
|
|
1935
1878
|
-raw.fif | -epo.fif and .json files to.
|
|
1936
1879
|
overwrite : bool
|
|
1937
1880
|
Whether to delete old subdirectories that will be saved to in this
|
|
1938
|
-
call.
|
|
1939
|
-
``ValueError`` is raised before anything is deleted: load the data
|
|
1940
|
-
into memory first (``preload=True``) or save to another directory.
|
|
1881
|
+
call.
|
|
1941
1882
|
offset : int
|
|
1942
1883
|
If provided, the integer is added to the id of the dataset in the
|
|
1943
1884
|
concat. This is useful in the setting of very large datasets, where
|
|
@@ -1950,13 +1891,6 @@ class BaseConcatDataset(ConcatDataset, HubDatasetMixin, Generic[T]):
|
|
|
1950
1891
|
hasattr(self.datasets[0], "raw") or hasattr(self.datasets[0], "windows")
|
|
1951
1892
|
):
|
|
1952
1893
|
raise ValueError("dataset should have either raw or windows attribute")
|
|
1953
|
-
if overwrite:
|
|
1954
|
-
for _, _, target_dir in _overwrite_conflicts(self.datasets, path, offset):
|
|
1955
|
-
raise ValueError(
|
|
1956
|
-
f"Saving with overwrite=True would delete {target_dir} while "
|
|
1957
|
-
"a dataset still reads its data from it. Load the data into "
|
|
1958
|
-
"memory first (preload=True) or save to another directory."
|
|
1959
|
-
)
|
|
1960
1894
|
|
|
1961
1895
|
# Create path if it doesn't exist
|
|
1962
1896
|
os.makedirs(path, exist_ok=True)
|
{braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/eegneuralnet.py
RENAMED
|
@@ -201,17 +201,12 @@ class _EEGNeuralNet(NeuralNet, abc.ABC):
|
|
|
201
201
|
if classes is None:
|
|
202
202
|
classes = getattr(self, "classes", None)
|
|
203
203
|
signal_kwargs = infer_signal_properties(X, y, mode=self.mode, classes=classes)
|
|
204
|
-
module = _get_model(self.module)
|
|
205
|
-
# Model-specific values computed from the data (e.g. GCNsNet's graph);
|
|
206
|
-
# the signal properties take precedence.
|
|
207
|
-
infer_model_kwargs = getattr(module, "_infer_model_kwargs", None)
|
|
208
|
-
if infer_model_kwargs is not None:
|
|
209
|
-
signal_kwargs = {**infer_model_kwargs(X, y), **signal_kwargs}
|
|
210
204
|
if not signal_kwargs:
|
|
211
205
|
return
|
|
212
206
|
|
|
213
207
|
# kick out missing kwargs:
|
|
214
208
|
module_kwargs = dict()
|
|
209
|
+
module = _get_model(self.module)
|
|
215
210
|
all_module_kwargs = inspect.signature(module.__init__).parameters.keys()
|
|
216
211
|
for k, v in signal_kwargs.items():
|
|
217
212
|
if v is None:
|
{braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/__init__.py
RENAMED
|
@@ -22,7 +22,6 @@ from .deep4 import Deep4Net
|
|
|
22
22
|
from .deepsleepnet import DeepSleepNet
|
|
23
23
|
from .dgcnn import DGCNN
|
|
24
24
|
from .diver1 import DIVER1
|
|
25
|
-
from .duin import DuIN
|
|
26
25
|
from .eeg_clip import EEGCLIP
|
|
27
26
|
from .eegconformer import EEGConformer
|
|
28
27
|
from .eegdino import EEGDINO
|
|
@@ -37,11 +36,9 @@ from .eegsimpleconv import EEGSimpleConv
|
|
|
37
36
|
from .eegsym import EEGSym
|
|
38
37
|
from .eegtcnet import EEGTCNet
|
|
39
38
|
from .emg2qwerty import EMG2QwertyNet
|
|
40
|
-
from .epint import EpiNT
|
|
41
39
|
from .fbcnet import FBCNet
|
|
42
40
|
from .fblightconvnet import FBLightConvNet
|
|
43
41
|
from .fbmsnet import FBMSNet
|
|
44
|
-
from .gcnsnet import GCNsNet
|
|
45
42
|
from .guetschel2026 import Guetschel2026
|
|
46
43
|
from .hybrid import HybridNet
|
|
47
44
|
from .ifnet import IFNet
|
|
@@ -120,7 +117,6 @@ __all__ = [
|
|
|
120
117
|
"Deep4Net",
|
|
121
118
|
"DeepSleepNet",
|
|
122
119
|
"DIVER1",
|
|
123
|
-
"DuIN",
|
|
124
120
|
"BrainModule",
|
|
125
121
|
"Brant",
|
|
126
122
|
"EEGCLIP",
|
|
@@ -138,14 +134,12 @@ __all__ = [
|
|
|
138
134
|
"EEGTCNet",
|
|
139
135
|
"DGCNN",
|
|
140
136
|
"EMG2QwertyNet",
|
|
141
|
-
"EpiNT",
|
|
142
137
|
"NeuroPose",
|
|
143
138
|
"SensingDynamics",
|
|
144
139
|
"VEMG2Pose",
|
|
145
140
|
"FBCNet",
|
|
146
141
|
"FBLightConvNet",
|
|
147
142
|
"FBMSNet",
|
|
148
|
-
"GCNsNet",
|
|
149
143
|
"Guetschel2026",
|
|
150
144
|
"MetaNeuromotorHand",
|
|
151
145
|
"HybridNet",
|
{braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/barista.py
RENAMED
|
@@ -14,7 +14,6 @@ from braindecode.models.base import EEGModuleMixin
|
|
|
14
14
|
from braindecode.models.util import extract_channel_locations_from_chs_info
|
|
15
15
|
from braindecode.modules import GatedLinearUnit, PatchTokenizer
|
|
16
16
|
from braindecode.modules.attention import _scaled_dot_product_attention
|
|
17
|
-
from braindecode.modules.blocks import _check_on_non_divisible, _patch_count
|
|
18
17
|
|
|
19
18
|
|
|
20
19
|
class BaRISTA(EEGModuleMixin, nn.Module, license="other"):
|
|
@@ -78,8 +77,7 @@ class BaRISTA(EEGModuleMixin, nn.Module, license="other"):
|
|
|
78
77
|
.. rubric:: Temporal, Spatial, and Spectral Encoding
|
|
79
78
|
|
|
80
79
|
- Temporal encoding uses non-overlapping patches and patch-index rotary
|
|
81
|
-
embeddings.
|
|
82
|
-
``on_non_divisible="crop"`` drops it, as the reference does.
|
|
80
|
+
embeddings. Samples beyond the last complete patch are dropped.
|
|
83
81
|
- Spatial encoding uses dataset-provided coordinate or region indices.
|
|
84
82
|
``spatial_scale="none"`` disables it.
|
|
85
83
|
- The CNN operates on waveforms. There is no explicit spectral transform.
|
|
@@ -96,8 +94,7 @@ class BaRISTA(EEGModuleMixin, nn.Module, license="other"):
|
|
|
96
94
|
Treebank's coordinate convention.
|
|
97
95
|
|
|
98
96
|
With ``pooling="mean"``, channel counts and window lengths can vary between
|
|
99
|
-
batches
|
|
100
|
-
full patch). Pass each recording's
|
|
97
|
+
batches, provided each window contains a full patch. Pass each recording's
|
|
101
98
|
indices to :meth:`forward`; otherwise it uses the constructor's indices
|
|
102
99
|
or MNE positions. All samples in one batch
|
|
103
100
|
share a montage. The encoder uses PyTorch attention on separate batch
|
|
@@ -144,13 +141,9 @@ class BaRISTA(EEGModuleMixin, nn.Module, license="other"):
|
|
|
144
141
|
in millimetres when deriving indices from ``chs_info``.
|
|
145
142
|
patch_size : int
|
|
146
143
|
Number of samples per temporal patch, default 512 (250 ms at the
|
|
147
|
-
paper's 2048 Hz).
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
is not a multiple of ``patch_size`` (right zero-pad, crop, or raise).
|
|
151
|
-
The reference implementation crops (``"crop"``: the trailing samples
|
|
152
|
-
are lost); both give the same model and output when ``n_times`` is a
|
|
153
|
-
multiple of ``patch_size``.
|
|
144
|
+
paper's 2048 Hz). Windows are tokenized into whole patches, so a window
|
|
145
|
+
that is not a multiple of ``patch_size`` loses its trailing samples, as
|
|
146
|
+
in the reference.
|
|
154
147
|
d_model : int
|
|
155
148
|
Token embedding dimension.
|
|
156
149
|
n_layers : int
|
|
@@ -187,9 +180,6 @@ class BaRISTA(EEGModuleMixin, nn.Module, license="other"):
|
|
|
187
180
|
Systems 38. https://arxiv.org/abs/2512.12135
|
|
188
181
|
"""
|
|
189
182
|
|
|
190
|
-
# Configs and checkpoints saved before ``on_non_divisible`` existed cropped.
|
|
191
|
-
_legacy_on_non_divisible = "crop"
|
|
192
|
-
|
|
193
183
|
def __init__(
|
|
194
184
|
self,
|
|
195
185
|
# --- signal-related (handled by EEGModuleMixin) ---
|
|
@@ -205,7 +195,6 @@ class BaRISTA(EEGModuleMixin, nn.Module, license="other"):
|
|
|
205
195
|
spatial_indices: list[int] | list[list[int]] | None = None,
|
|
206
196
|
coord_bins: int = 200,
|
|
207
197
|
patch_size: int = 512,
|
|
208
|
-
on_non_divisible: str = "pad",
|
|
209
198
|
d_model: int = 64,
|
|
210
199
|
n_layers: int = 12,
|
|
211
200
|
num_heads: int = 4,
|
|
@@ -254,7 +243,8 @@ class BaRISTA(EEGModuleMixin, nn.Module, license="other"):
|
|
|
254
243
|
raise ValueError(f"{name} must be positive, got {value}.")
|
|
255
244
|
if cnn_depth < 0:
|
|
256
245
|
raise ValueError(f"cnn_depth must be non-negative, got {cnn_depth}.")
|
|
257
|
-
|
|
246
|
+
if self.n_times < patch_size:
|
|
247
|
+
raise ValueError("n_times must contain at least one full patch.")
|
|
258
248
|
if d_model % num_heads:
|
|
259
249
|
raise ValueError(
|
|
260
250
|
f"d_model ({d_model}) must be divisible by num_heads ({num_heads})."
|
|
@@ -268,7 +258,6 @@ class BaRISTA(EEGModuleMixin, nn.Module, license="other"):
|
|
|
268
258
|
self.spatial_scale = spatial_scale
|
|
269
259
|
self.coord_bins = coord_bins
|
|
270
260
|
self.patch_size = patch_size
|
|
271
|
-
self.on_non_divisible = on_non_divisible
|
|
272
261
|
self.d_model = d_model
|
|
273
262
|
self.n_layers = n_layers
|
|
274
263
|
self.num_heads = num_heads
|
|
@@ -277,15 +266,14 @@ class BaRISTA(EEGModuleMixin, nn.Module, license="other"):
|
|
|
277
266
|
self.drop_prob = drop_prob
|
|
278
267
|
self.activation = activation
|
|
279
268
|
|
|
280
|
-
#
|
|
281
|
-
#
|
|
282
|
-
|
|
283
|
-
self.n_patches = _patch_count(self.n_times, patch_size, on_non_divisible)
|
|
269
|
+
# The trailing samples are dropped when n_times is not a multiple of
|
|
270
|
+
# patch_size, as in the reference.
|
|
271
|
+
self.n_patches = self.n_times // patch_size
|
|
284
272
|
|
|
285
273
|
self.patch_tokenizer = PatchTokenizer(
|
|
286
274
|
patch_size=patch_size,
|
|
287
275
|
n_times=self.n_times,
|
|
288
|
-
on_non_divisible=
|
|
276
|
+
on_non_divisible="crop",
|
|
289
277
|
output_order="patch_channel",
|
|
290
278
|
)
|
|
291
279
|
# Every (patch, channel) pair is encoded independently, so the grid is
|
{braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/base.py
RENAMED
|
@@ -608,24 +608,9 @@ class EEGModuleMixin(_BaseHubMixin, metaclass=_BraindecodeDocstringMeta):
|
|
|
608
608
|
"""
|
|
609
609
|
config = dict(config) # shallow copy
|
|
610
610
|
config.pop("braindecode_version", None)
|
|
611
|
-
cls._fill_legacy_defaults(config)
|
|
612
611
|
resolve_type_kwargs(cls, config)
|
|
613
612
|
return cls(**config)
|
|
614
613
|
|
|
615
|
-
@classmethod
|
|
616
|
-
def _fill_legacy_defaults(cls, kwargs: dict) -> None:
|
|
617
|
-
"""Rebuild configs saved before ``on_non_divisible`` existed as they were.
|
|
618
|
-
|
|
619
|
-
Models that used to crop a time axis not divisible by their patch size
|
|
620
|
-
set ``_legacy_on_non_divisible = "crop"``. A saved config or checkpoint
|
|
621
|
-
without the ``on_non_divisible`` key then loads with ``"crop"``, so its
|
|
622
|
-
head and position tables keep their shapes; a new model defaults to
|
|
623
|
-
``"pad"``.
|
|
624
|
-
"""
|
|
625
|
-
legacy = getattr(cls, "_legacy_on_non_divisible", None)
|
|
626
|
-
if legacy is not None and "on_non_divisible" not in kwargs:
|
|
627
|
-
kwargs["on_non_divisible"] = legacy
|
|
628
|
-
|
|
629
614
|
def _set_n_outputs(self, n_outputs: int) -> None:
|
|
630
615
|
"""Record a new ``n_outputs`` on the model and its saved configs.
|
|
631
616
|
|
|
@@ -926,9 +911,6 @@ class EEGModuleMixin(_BaseHubMixin, metaclass=_BraindecodeDocstringMeta):
|
|
|
926
911
|
):
|
|
927
912
|
model_kwargs.pop("braindecode_version", None)
|
|
928
913
|
filename = model_kwargs.pop("filename", None)
|
|
929
|
-
# The Hub mixin passes only the keys of config.json (plus the
|
|
930
|
-
# caller's), so a missing key means a pre-on_non_divisible save.
|
|
931
|
-
cls._fill_legacy_defaults(model_kwargs)
|
|
932
914
|
resolve_type_kwargs(cls, model_kwargs)
|
|
933
915
|
|
|
934
916
|
# Read saved n_outputs from config.json to detect when the
|
{braindecode-1.8.1.dev170153392 → braindecode-1.8.1.dev170225906}/braindecode/models/brant.py
RENAMED
|
@@ -13,7 +13,6 @@ from einops.layers.torch import Rearrange, Reduce
|
|
|
13
13
|
from braindecode.functional import spectral_input
|
|
14
14
|
from braindecode.models.base import EEGModuleMixin
|
|
15
15
|
from braindecode.modules import PatchTokenizer
|
|
16
|
-
from braindecode.modules.blocks import _check_on_non_divisible, _patch_count
|
|
17
16
|
|
|
18
17
|
# Standard rhythmic-activity bands (Hz) used by Brant's frequency encoding,
|
|
19
18
|
# from the paper (§ Frequency encoding): theta, alpha, beta, gamma1-5.
|
|
@@ -97,8 +96,6 @@ class Brant(EEGModuleMixin, nn.Module, license="apache-2.0"):
|
|
|
97
96
|
``return_features=True`` returns ``cls_token=None``. The learned temporal
|
|
98
97
|
positions require the runtime signal length to equal the configured
|
|
99
98
|
``n_times``, and the input must have the configured ``n_chans`` channels.
|
|
100
|
-
A window that is not a multiple of ``patch_size`` is right zero-padded to
|
|
101
|
-
``ceil(n_times / patch_size)`` patches by default (``on_non_divisible``).
|
|
102
99
|
|
|
103
100
|
The upstream model operates on signals down-sampled to **250 Hz**, but its
|
|
104
101
|
band-power features are computed at a fixed 256 Hz (upstream
|
|
@@ -130,11 +127,6 @@ class Brant(EEGModuleMixin, nn.Module, license="apache-2.0"):
|
|
|
130
127
|
patch_size : int, optional
|
|
131
128
|
Number of time samples per patch fed to the encoders. Default 250
|
|
132
129
|
(1 s at 250 Hz). The paper's large architecture uses 1500 (see above).
|
|
133
|
-
on_non_divisible : {"pad", "crop", "error"}, default="pad"
|
|
134
|
-
How :class:`~braindecode.modules.PatchTokenizer` treats a time axis that
|
|
135
|
-
is not a multiple of ``patch_size`` (right zero-pad, crop, or raise).
|
|
136
|
-
The reference implementation crops (``"crop"``); both give the same
|
|
137
|
-
model and output when ``n_times`` is a multiple of ``patch_size``.
|
|
138
130
|
embed_dim : int, optional
|
|
139
131
|
Model width ``D`` (patch embedding size). Default 256.
|
|
140
132
|
ffn_dim : int, optional
|
|
@@ -164,9 +156,6 @@ class Brant(EEGModuleMixin, nn.Module, license="apache-2.0"):
|
|
|
164
156
|
NeurIPS. Code: https://github.com/yzz673/Brant (Apache-2.0).
|
|
165
157
|
"""
|
|
166
158
|
|
|
167
|
-
# Configs and checkpoints saved before ``on_non_divisible`` existed cropped.
|
|
168
|
-
_legacy_on_non_divisible = "crop"
|
|
169
|
-
|
|
170
159
|
def __init__(
|
|
171
160
|
self,
|
|
172
161
|
# braindecode parameters
|
|
@@ -179,7 +168,6 @@ class Brant(EEGModuleMixin, nn.Module, license="apache-2.0"):
|
|
|
179
168
|
*,
|
|
180
169
|
# model-specific parameters
|
|
181
170
|
patch_size: int = 250,
|
|
182
|
-
on_non_divisible: str = "pad",
|
|
183
171
|
embed_dim: int = 256,
|
|
184
172
|
ffn_dim: int = 384,
|
|
185
173
|
temporal_n_layers: int = 4,
|
|
@@ -204,7 +192,6 @@ class Brant(EEGModuleMixin, nn.Module, license="apache-2.0"):
|
|
|
204
192
|
del n_outputs, n_chans, chs_info, n_times, input_window_seconds, sfreq
|
|
205
193
|
|
|
206
194
|
self.patch_size = patch_size
|
|
207
|
-
self.on_non_divisible = on_non_divisible
|
|
208
195
|
self.embed_dim = embed_dim
|
|
209
196
|
self.ffn_dim = ffn_dim
|
|
210
197
|
self.temporal_n_layers = temporal_n_layers
|
|
@@ -220,10 +207,12 @@ class Brant(EEGModuleMixin, nn.Module, license="apache-2.0"):
|
|
|
220
207
|
)
|
|
221
208
|
# Number of patches per channel, fixed by the input length. The learnable
|
|
222
209
|
# temporal positional encoding is sized to it, hence n_times is required.
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
210
|
+
self.seq_len = self.n_times // self.patch_size
|
|
211
|
+
if self.seq_len < 1:
|
|
212
|
+
raise ValueError(
|
|
213
|
+
f"n_times ({self.n_times}) must be >= patch_size "
|
|
214
|
+
f"({self.patch_size}) to form at least one patch."
|
|
215
|
+
)
|
|
227
216
|
|
|
228
217
|
# Shared non-overlapping patching (same tokenizer as the other
|
|
229
218
|
# transformer foundation models); non-learnable, so it is a pure reshape
|
|
@@ -233,7 +222,7 @@ class Brant(EEGModuleMixin, nn.Module, license="apache-2.0"):
|
|
|
233
222
|
patch_size=self.patch_size,
|
|
234
223
|
n_times=self.n_times,
|
|
235
224
|
learnable=False,
|
|
236
|
-
on_non_divisible=
|
|
225
|
+
on_non_divisible="crop",
|
|
237
226
|
)
|
|
238
227
|
# braindecode-native: band-power computed inside forward (see module).
|
|
239
228
|
self.band_power = _BandPowerFeatures(
|