Braindecode 1.8.1.dev172462378__tar.gz → 1.8.1.dev172484635__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.dev172462378 → braindecode-1.8.1.dev172484635}/NOTICE.txt +3 -23
- {braindecode-1.8.1.dev172462378/braindecode.egg-info → braindecode-1.8.1.dev172484635}/PKG-INFO +2 -2
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/augmentation/__init__.py +0 -6
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/augmentation/base.py +1 -7
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/augmentation/functional.py +15 -187
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/augmentation/transforms.py +3 -341
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/classifier.py +5 -6
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/base.py +12 -236
- braindecode-1.8.1.dev172484635/braindecode/datasets/bids/format.py +717 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/chb_mit.py +39 -5
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/mne.py +0 -5
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/siena.py +39 -5
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/sleep_physio_challe_18.py +46 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/tuh.py +14 -22
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/utils.py +0 -37
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datautil/serialization.py +10 -21
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/eegneuralnet.py +2 -7
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/functional/__init__.py +1 -12
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/functional/_real_dft.py +0 -55
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/functional/functions.py +16 -174
- braindecode-1.8.1.dev172484635/braindecode/functional/initialization.py +47 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/__init__.py +14 -37
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/atcnet.py +8 -17
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/attn_sleep.py +15 -9
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/barista.py +22 -40
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/base.py +20 -219
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/bendr.py +75 -93
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/biot.py +72 -61
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/brainbert.py +25 -55
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/brainmodule.py +12 -19
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/brant.py +21 -35
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/cbramod.py +37 -76
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/codebrain.py +84 -202
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/config.py +2 -1
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/contrawr.py +4 -26
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/ctnet.py +34 -21
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/dance.py +12 -7
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/deep4.py +15 -43
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/dgcnn.py +1 -10
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/diver1.py +60 -55
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/eegconformer.py +18 -22
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/eegdino.py +18 -34
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/eeginception_erp.py +0 -4
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/eeginception_mi.py +17 -48
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/eegminer.py +0 -4
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/eegnet.py +0 -4
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/eegnex.py +1 -20
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/eegpt.py +175 -97
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/eegsym.py +24 -102
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/emg2qwerty.py +2 -19
- braindecode-1.8.1.dev172484635/braindecode/models/interpolated.py +185 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/labram.py +254 -311
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/luna.py +108 -105
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/medformer.py +67 -87
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/meta_neuromotor.py +55 -102
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/mirepnet.py +18 -41
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/mscformer.py +32 -24
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/msvtnet.py +8 -127
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/mvpformer.py +202 -196
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/neuropose.py +18 -18
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/patchedtransformer.py +28 -39
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/popt.py +4 -179
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/reve.py +86 -176
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/sensingdynamics.py +23 -27
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/shallow_fbcsp.py +10 -21
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/signal_jepa.py +39 -166
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/sinc_shallow.py +1 -17
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/sleep_stager_blanco_2020.py +6 -13
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/sparcnet.py +10 -14
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/sstdpn.py +10 -13
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/steegformer.py +43 -44
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/summary.csv +5 -17
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/syncnet.py +2 -2
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/tcformer.py +65 -45
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/tcn.py +0 -5
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/tidnet.py +4 -30
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/usleep.py +2 -3
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/util.py +210 -322
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/vemg2pose.py +22 -20
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/zuna.py +41 -109
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/modules/__init__.py +2 -13
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/modules/attention.py +29 -153
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/modules/blocks.py +10 -127
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/modules/convolution.py +9 -10
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/modules/dance_modules.py +27 -48
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/modules/filter.py +66 -93
- braindecode-1.8.1.dev172484635/braindecode/modules/interpolation.py +201 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/modules/layers.py +25 -104
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/modules/parametrization.py +0 -29
- braindecode-1.8.1.dev172484635/braindecode/modules/popt_modules.py +187 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/modules/stats.py +1 -6
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/preprocessing/eegprep_preprocess.py +3 -6
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/preprocessing/preprocess.py +0 -30
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/preprocessing/windowers.py +21 -33
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/regressor.py +6 -12
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/samplers/base.py +63 -73
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/training/losses.py +4 -5
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/training/scoring.py +6 -10
- braindecode-1.8.1.dev172484635/braindecode/version.py +1 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/visualization/topology.py +1 -1
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635/braindecode.egg-info}/PKG-INFO +2 -2
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode.egg-info/SOURCES.txt +5 -20
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode.egg-info/requires.txt +1 -1
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/api.rst +7 -65
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/index.rst +0 -1
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/models/models_categorization.rst +3 -10
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/whats_new.rst +1 -578
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/pyproject.toml +2 -5
- braindecode-1.8.1.dev172462378/braindecode/functional/initialization.py +0 -139
- braindecode-1.8.1.dev172462378/braindecode/models/axon.py +0 -562
- braindecode-1.8.1.dev172462378/braindecode/models/brainomni.py +0 -970
- braindecode-1.8.1.dev172462378/braindecode/models/csbrain.py +0 -786
- braindecode-1.8.1.dev172462378/braindecode/models/duin.py +0 -459
- braindecode-1.8.1.dev172462378/braindecode/models/eeg_clip.py +0 -369
- braindecode-1.8.1.dev172462378/braindecode/models/epint.py +0 -326
- braindecode-1.8.1.dev172462378/braindecode/models/gcnsnet.py +0 -338
- braindecode-1.8.1.dev172462378/braindecode/models/guetschel2026.py +0 -775
- braindecode-1.8.1.dev172462378/braindecode/models/mapa.py +0 -921
- braindecode-1.8.1.dev172462378/braindecode/models/neurorvq.py +0 -694
- braindecode-1.8.1.dev172462378/braindecode/models/neurorvq_tokenizer.py +0 -673
- braindecode-1.8.1.dev172462378/braindecode/models/seizure_transformer.py +0 -407
- braindecode-1.8.1.dev172462378/braindecode/models/sleepfm.py +0 -826
- braindecode-1.8.1.dev172462378/braindecode/models/tfm_tokenizer.py +0 -450
- braindecode-1.8.1.dev172462378/braindecode/models/tmsanet.py +0 -244
- braindecode-1.8.1.dev172462378/braindecode/modules/channels.py +0 -536
- braindecode-1.8.1.dev172462378/braindecode/modules/linear_attention.py +0 -128
- braindecode-1.8.1.dev172462378/braindecode/modules/quantization.py +0 -422
- braindecode-1.8.1.dev172462378/braindecode/version.py +0 -1
- braindecode-1.8.1.dev172462378/docs/user_guide/channel_strategies.rst +0 -59
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/LICENSE.txt +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/MANIFEST.in +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/README.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/__init__.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/__init__.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/_notebook_viewer.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/bbci.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/bcicomp.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/bids/__init__.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/bids/datasets.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/bids/hub.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/bids/hub_format.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/bids/hub_io.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/bids/hub_validation.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/bids/iterable.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/collate.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/moabb.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/nmt.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/registry.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/sleep_physionet.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datasets/xy.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datautil/__init__.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datautil/channel_utils.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datautil/hub_formats.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/datautil/util.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/attentionbasenet.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/deepsleepnet.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/eegitnet.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/eegsimpleconv.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/eegtcnet.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/fbcnet.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/fblightconvnet.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/fbmsnet.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/hybrid.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/ifnet.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/sccnet.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/models/tsinception.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/modules/activation.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/modules/linear.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/modules/util.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/modules/wrapper.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/preprocessing/__init__.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/preprocessing/mne_preprocess.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/preprocessing/util.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/samplers/__init__.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/samplers/ssl.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/training/__init__.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/training/callbacks.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/util.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/visualization/__init__.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/visualization/activations.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/visualization/attribution.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/visualization/confusion_matrices.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/visualization/frequency.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/visualization/metrics.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/visualization/sanity.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode.egg-info/dependency_links.txt +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode.egg-info/top_level.txt +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/Makefile +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/_templates/autosummary/class.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/_templates/autosummary/class_in_subdir.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/_templates/autosummary/function.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/_templates/autosummary/function_in_subdir.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/agent_docs.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/cite.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/conf.py +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/help.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/install/install.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/install/install_pip.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/install/install_source.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/models/categorization/attention.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/models/categorization/channel.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/models/categorization/convolution.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/models/categorization/filterbank.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/models/categorization/gnn.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/models/categorization/interpretable.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/models/categorization/lbm.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/models/categorization/recurrent.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/models/categorization/spd.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/models/models.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/models/models_table.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/models/models_visualization.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/docs/sg_execution_times.rst +0 -0
- {braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/setup.cfg +0 -0
|
@@ -13,10 +13,9 @@ The following components are licensed under the Creative Commons Attribution-Non
|
|
|
13
13
|
|
|
14
14
|
- `braindecode/models/eegminer.py`
|
|
15
15
|
- `braindecode/models/meta_neuromotor.py`
|
|
16
|
-
- `braindecode/models/sleepfm.py`
|
|
17
16
|
- `braindecode/models/brainmodule.py`
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
|
|
18
|
+
As well as class later imported into the `braindecode.models.module` named as GeneralizedGaussianFilter.
|
|
20
19
|
|
|
21
20
|
The `meta_neuromotor.py` file is a derivative of
|
|
22
21
|
`facebookresearch/generic-neuromotor-interface`, released by Meta Platforms,
|
|
@@ -40,39 +39,20 @@ The following components are licensed under the MIT License:
|
|
|
40
39
|
|
|
41
40
|
- `braindecode/models/ctnet.py`
|
|
42
41
|
- `braindecode/models/dance.py`
|
|
43
|
-
- `braindecode/models/duin.py`
|
|
44
42
|
- `braindecode/models/medformer.py`
|
|
45
43
|
- `braindecode/models/tcformer.py`
|
|
46
44
|
- `braindecode/models/ifnet.py`
|
|
47
45
|
- `braindecode/models/mirepnet.py`
|
|
48
46
|
- `braindecode/models/popt.py`
|
|
49
|
-
- `braindecode/
|
|
50
|
-
- `braindecode/models/brainomni.py`
|
|
51
|
-
- `braindecode/modules/quantization.py`
|
|
52
|
-
- `braindecode/modules/linear_attention.py`
|
|
53
|
-
- `braindecode/models/seizure_transformer.py`
|
|
54
|
-
- `docs/_static/model/seizure_transformer_arch.png`
|
|
55
|
-
- `braindecode/models/guetschel2026.py`
|
|
56
|
-
- `braindecode/models/tmsanet.py`
|
|
57
|
-
- `braindecode/models/epint.py`
|
|
58
|
-
- `braindecode/models/gcnsnet.py`
|
|
59
|
-
|
|
60
|
-
The `brainomni.py` file is a derivative of `OpenTSLab/BrainOmni` (MIT), whose
|
|
61
|
-
SEANet codec derives from Meta's `facebookresearch/encodec` (MIT). The
|
|
62
|
-
`quantization.py` module holds the residual vector quantization derived from
|
|
63
|
-
`lucidrains/vector-quantize-pytorch` (MIT) and the BrainOmni port.
|
|
64
|
-
The `linear_attention.py` module is the part of
|
|
65
|
-
`lucidrains/linear-attention-transformer` (MIT) that BIOT and TFMTokenizer run.
|
|
47
|
+
- `braindecode/modules/popt_modules.py`
|
|
66
48
|
|
|
67
49
|
### Apache-2.0 Licensed Files
|
|
68
50
|
|
|
69
51
|
The following components are licensed under the Apache License 2.0:
|
|
70
52
|
|
|
71
|
-
- `braindecode/models/axon.py`
|
|
72
53
|
- `braindecode/models/mvpformer.py`
|
|
73
54
|
- `braindecode/models/zuna.py`
|
|
74
55
|
- `braindecode/models/luna.py`
|
|
75
|
-
- `braindecode/models/mapa.py`
|
|
76
56
|
- `braindecode/models/brant.py`
|
|
77
57
|
- `braindecode/models/diver1.py`
|
|
78
58
|
- `braindecode/models/mscformer.py`
|
{braindecode-1.8.1.dev172462378/braindecode.egg-info → braindecode-1.8.1.dev172484635}/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.dev172484635
|
|
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>
|
|
@@ -32,8 +32,8 @@ Requires-Dist: joblib
|
|
|
32
32
|
Requires-Dist: torchinfo
|
|
33
33
|
Requires-Dist: pandas
|
|
34
34
|
Requires-Dist: wfdb>=4.3.1
|
|
35
|
+
Requires-Dist: linear_attention_transformer
|
|
35
36
|
Requires-Dist: docstring_inheritance
|
|
36
|
-
Requires-Dist: einops
|
|
37
37
|
Requires-Dist: pydantic>=2.0
|
|
38
38
|
Provides-Extra: moabb
|
|
39
39
|
Requires-Dist: moabb>=1.4.3; extra == "moabb"
|
|
@@ -10,11 +10,9 @@ from .transforms import (
|
|
|
10
10
|
ChannelsReref,
|
|
11
11
|
ChannelsShuffle,
|
|
12
12
|
ChannelsSymmetry,
|
|
13
|
-
CutMix,
|
|
14
13
|
FrequencyShift,
|
|
15
14
|
FTSurrogate,
|
|
16
15
|
GaussianNoise,
|
|
17
|
-
LabelSmoothing,
|
|
18
16
|
MaskEncoding,
|
|
19
17
|
Mixup,
|
|
20
18
|
SegmentationReconstruction,
|
|
@@ -25,7 +23,6 @@ from .transforms import (
|
|
|
25
23
|
SignFlip,
|
|
26
24
|
SmoothTimeMask,
|
|
27
25
|
TimeReverse,
|
|
28
|
-
TrivialAugment,
|
|
29
26
|
)
|
|
30
27
|
|
|
31
28
|
__all__ = [
|
|
@@ -33,15 +30,12 @@ __all__ = [
|
|
|
33
30
|
"IdentityTransform",
|
|
34
31
|
"Compose",
|
|
35
32
|
"AugmentedDataLoader",
|
|
36
|
-
"TrivialAugment",
|
|
37
33
|
"TimeReverse",
|
|
38
34
|
"SignFlip",
|
|
39
35
|
"FTSurrogate",
|
|
40
36
|
"ChannelsShuffle",
|
|
41
|
-
"CutMix",
|
|
42
37
|
"ChannelsDropout",
|
|
43
38
|
"GaussianNoise",
|
|
44
|
-
"LabelSmoothing",
|
|
45
39
|
"ChannelsSymmetry",
|
|
46
40
|
"SmoothTimeMask",
|
|
47
41
|
"BandstopFilter",
|
{braindecode-1.8.1.dev172462378 → braindecode-1.8.1.dev172484635}/braindecode/augmentation/base.py
RENAMED
|
@@ -171,13 +171,7 @@ class Compose(Transform):
|
|
|
171
171
|
self.transforms = transforms
|
|
172
172
|
super().__init__()
|
|
173
173
|
|
|
174
|
-
def forward(self, X, y
|
|
175
|
-
# like Transform.forward, return only X when no target is given (each
|
|
176
|
-
# transform then returns a single tensor, not an (X, y) pair)
|
|
177
|
-
if y is None:
|
|
178
|
-
for transform in self.transforms:
|
|
179
|
-
X = transform(X)
|
|
180
|
-
return X
|
|
174
|
+
def forward(self, X, y):
|
|
181
175
|
for transform in self.transforms:
|
|
182
176
|
X, y = transform(X, y)
|
|
183
177
|
return X, y
|
|
@@ -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
|
|
|
@@ -19,22 +18,7 @@ from mne.filter import notch_filter
|
|
|
19
18
|
from scipy.interpolate import Rbf
|
|
20
19
|
from sklearn.utils import check_random_state
|
|
21
20
|
from torch.fft import fft, ifft
|
|
22
|
-
from torch.nn.functional import
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def _max_float_dtype(device: torch.device | str) -> torch.dtype:
|
|
26
|
-
"""float64, or float32 on Apple MPS, which has no float64."""
|
|
27
|
-
return torch.float32 if torch.device(device).type == "mps" else torch.float64
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
def _to_device(t: torch.Tensor, device: torch.device | str) -> torch.Tensor:
|
|
31
|
-
"""Move ``t`` to ``device``, in single precision on MPS (no float64 there)."""
|
|
32
|
-
if torch.device(device).type == "mps":
|
|
33
|
-
if t.dtype == torch.float64:
|
|
34
|
-
return t.float().to(device)
|
|
35
|
-
if t.dtype == torch.complex128:
|
|
36
|
-
return t.to(torch.complex64).to(device)
|
|
37
|
-
return t.to(device)
|
|
21
|
+
from torch.nn.functional import pad
|
|
38
22
|
|
|
39
23
|
|
|
40
24
|
def identity(X: torch.Tensor, y: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]:
|
|
@@ -107,11 +91,10 @@ def _new_random_fft_phase_odd(
|
|
|
107
91
|
rng = check_random_state(random_state)
|
|
108
92
|
random_phase = torch.from_numpy(
|
|
109
93
|
2j * np.pi * rng.random((batch_size, c, (n - 1) // 2))
|
|
110
|
-
)
|
|
111
|
-
random_phase = _to_device(random_phase, device)
|
|
94
|
+
).to(device)
|
|
112
95
|
return torch.cat(
|
|
113
96
|
[
|
|
114
|
-
torch.zeros((batch_size, c, 1), device=device
|
|
97
|
+
torch.zeros((batch_size, c, 1), device=device),
|
|
115
98
|
random_phase,
|
|
116
99
|
-torch.flip(random_phase, [-1]),
|
|
117
100
|
],
|
|
@@ -129,13 +112,12 @@ def _new_random_fft_phase_even(
|
|
|
129
112
|
rng = check_random_state(random_state)
|
|
130
113
|
random_phase = torch.from_numpy(
|
|
131
114
|
2j * np.pi * rng.random((batch_size, c, n // 2 - 1))
|
|
132
|
-
)
|
|
133
|
-
random_phase = _to_device(random_phase, device)
|
|
115
|
+
).to(device)
|
|
134
116
|
return torch.cat(
|
|
135
117
|
[
|
|
136
|
-
torch.zeros((batch_size, c, 1), device=device
|
|
118
|
+
torch.zeros((batch_size, c, 1), device=device),
|
|
137
119
|
random_phase,
|
|
138
|
-
torch.zeros((batch_size, c, 1), device=device
|
|
120
|
+
torch.zeros((batch_size, c, 1), device=device),
|
|
139
121
|
-torch.flip(random_phase, [-1]),
|
|
140
122
|
],
|
|
141
123
|
dim=-1,
|
|
@@ -195,7 +177,7 @@ def ft_surrogate(
|
|
|
195
177
|
and 0 <= phase_noise_magnitude <= 1
|
|
196
178
|
), f"eps must be a float between 0 and 1. Got {phase_noise_magnitude}."
|
|
197
179
|
|
|
198
|
-
f = fft(X.
|
|
180
|
+
f = fft(X.double(), dim=-1)
|
|
199
181
|
device = X.device
|
|
200
182
|
|
|
201
183
|
n = f.shape[-1]
|
|
@@ -597,7 +579,6 @@ def _frequency_shift(X: torch.Tensor, fs: float, f_shift: float) -> torch.Tensor
|
|
|
597
579
|
_f_shift = torch.as_tensor(f_shift).float()
|
|
598
580
|
else:
|
|
599
581
|
raise ValueError(f"Invalid f_shift type: {type(f_shift)}")
|
|
600
|
-
_f_shift = _f_shift.to(X.device)
|
|
601
582
|
f_shift_stack = _f_shift.repeat(N_padded, n_channels, 1)
|
|
602
583
|
reshaped_f_shift = f_shift_stack.permute(
|
|
603
584
|
*torch.arange(f_shift_stack.ndim - 1, -1, -1)
|
|
@@ -929,15 +910,7 @@ def _rotate_signals(
|
|
|
929
910
|
sensors_positions_matrix: torch.Tensor,
|
|
930
911
|
spherical: bool = True,
|
|
931
912
|
) -> torch.Tensor:
|
|
932
|
-
|
|
933
|
-
# MPS has no float64: compute the small (n_chans x n_chans) spherical
|
|
934
|
-
# spline matrices on CPU in double precision, only move the result
|
|
935
|
-
# (two separate steps: a combined device + dtype .to() from MPS
|
|
936
|
-
# returns zeros with some torch versions)
|
|
937
|
-
sensors_positions_matrix = sensors_positions_matrix.cpu().double()
|
|
938
|
-
rotations = [rotation.cpu().double() for rotation in rotations]
|
|
939
|
-
else:
|
|
940
|
-
sensors_positions_matrix = sensors_positions_matrix.to(X.device)
|
|
913
|
+
sensors_positions_matrix = sensors_positions_matrix.to(X.device)
|
|
941
914
|
rot_sensors_matrices = [
|
|
942
915
|
rotation.matmul(sensors_positions_matrix) for rotation in rotations
|
|
943
916
|
]
|
|
@@ -947,10 +920,9 @@ def _rotate_signals(
|
|
|
947
920
|
torch.as_tensor(
|
|
948
921
|
_torch_make_interpolation_matrix(
|
|
949
922
|
sensors_positions_matrix.T, rot_sensors_matrix.T
|
|
950
|
-
)
|
|
951
|
-
|
|
952
|
-
.float()
|
|
953
|
-
.to(X.device)
|
|
923
|
+
),
|
|
924
|
+
device=X.device,
|
|
925
|
+
).float()
|
|
954
926
|
for rot_sensors_matrix in rot_sensors_matrices
|
|
955
927
|
]
|
|
956
928
|
)
|
|
@@ -959,7 +931,7 @@ def _rotate_signals(
|
|
|
959
931
|
transformed_X = X.clone()
|
|
960
932
|
sensors_positions = list(sensors_positions_matrix)
|
|
961
933
|
for s, rot_sensors_matrix in enumerate(rot_sensors_matrices):
|
|
962
|
-
rot_sensors_positions = list(rot_sensors_matrix)
|
|
934
|
+
rot_sensors_positions = list(rot_sensors_matrix.T)
|
|
963
935
|
for time in range(X.shape[-1]):
|
|
964
936
|
interpolator_t = Rbf(*sensors_positions, X[s, :, time])
|
|
965
937
|
transformed_X[s, :, time] = torch.from_numpy(
|
|
@@ -1089,12 +1061,10 @@ def mixup(
|
|
|
1089
1061
|
Online: https://arxiv.org/abs/1710.09412
|
|
1090
1062
|
.. [2] https://github.com/facebookresearch/mixup-cifar10/blob/master/train.py
|
|
1091
1063
|
"""
|
|
1064
|
+
device = X.device
|
|
1092
1065
|
batch_size, n_channels, n_times = X.shape
|
|
1093
1066
|
|
|
1094
|
-
X_mix =
|
|
1095
|
-
(batch_size, n_channels, n_times),
|
|
1096
|
-
dtype=X.dtype if X.is_floating_point() else torch.get_default_dtype(),
|
|
1097
|
-
)
|
|
1067
|
+
X_mix = torch.zeros((batch_size, n_channels, n_times)).to(device)
|
|
1098
1068
|
y_a = y.clone()
|
|
1099
1069
|
y_b = y[idx_perm].clone()
|
|
1100
1070
|
|
|
@@ -1104,145 +1074,6 @@ def mixup(
|
|
|
1104
1074
|
return X_mix, (y_a, y_b, lam)
|
|
1105
1075
|
|
|
1106
1076
|
|
|
1107
|
-
def cutmix(
|
|
1108
|
-
X: torch.Tensor,
|
|
1109
|
-
y: torch.Tensor,
|
|
1110
|
-
idx_perm: torch.Tensor,
|
|
1111
|
-
cut_t_start: torch.Tensor,
|
|
1112
|
-
cut_t_len: torch.Tensor,
|
|
1113
|
-
) -> tuple[torch.Tensor, torch.Tensor]:
|
|
1114
|
-
"""Paste a time region of shuffled examples into the original examples.
|
|
1115
|
-
|
|
1116
|
-
See [1]_ for details.
|
|
1117
|
-
|
|
1118
|
-
Parameters
|
|
1119
|
-
----------
|
|
1120
|
-
X : torch.Tensor
|
|
1121
|
-
EEG data in form ``batch_size, n_channels, n_times``
|
|
1122
|
-
y : torch.Tensor
|
|
1123
|
-
Target of length ``batch_size``
|
|
1124
|
-
idx_perm : torch.Tensor
|
|
1125
|
-
Permuted indices of example that are mixed into original examples.
|
|
1126
|
-
cut_t_start : torch.Tensor
|
|
1127
|
-
Start index of the pasted time region for each example.
|
|
1128
|
-
cut_t_len : torch.Tensor
|
|
1129
|
-
Length of the pasted time region for each example.
|
|
1130
|
-
|
|
1131
|
-
Returns
|
|
1132
|
-
-------
|
|
1133
|
-
tuple
|
|
1134
|
-
``X``, ``y``. Where ``X`` is augmented and ``y`` is a tuple of length
|
|
1135
|
-
3 containing the labels of the two mixed examples and the fraction of
|
|
1136
|
-
each example kept from the original, ``1 - cut_t_len / n_times``.
|
|
1137
|
-
|
|
1138
|
-
References
|
|
1139
|
-
----------
|
|
1140
|
-
.. [1] Sangdoo Yun, Dongyoon Han, Seong Joon Oh, Sanghyuk Chun,
|
|
1141
|
-
Junsuk Choe, Youngjoon Yoo (2019). CutMix: Regularization Strategy
|
|
1142
|
-
to Train Strong Classifiers with Localizable Features. In 2019
|
|
1143
|
-
IEEE/CVF International Conference on Computer Vision (ICCV)
|
|
1144
|
-
Online: https://arxiv.org/abs/1905.04899
|
|
1145
|
-
"""
|
|
1146
|
-
n_times = X.shape[-1]
|
|
1147
|
-
t = torch.arange(n_times, device=X.device)
|
|
1148
|
-
start = cut_t_start[:, None]
|
|
1149
|
-
in_cut = (t >= start) & (t < start + cut_t_len[:, None])
|
|
1150
|
-
X_mix = torch.where(in_cut[:, None], X[idx_perm], X)
|
|
1151
|
-
lam = (n_times - cut_t_len).to(X.dtype) / n_times
|
|
1152
|
-
return X_mix, (y.clone(), y[idx_perm].clone(), lam)
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
def label_smoothing(
|
|
1156
|
-
X: torch.Tensor,
|
|
1157
|
-
y: torch.Tensor,
|
|
1158
|
-
epsilon: float,
|
|
1159
|
-
num_classes: int | None = None,
|
|
1160
|
-
) -> tuple[torch.Tensor, torch.Tensor]:
|
|
1161
|
-
"""Smooth targets toward the uniform distribution over the classes.
|
|
1162
|
-
|
|
1163
|
-
See [1]_ for details.
|
|
1164
|
-
|
|
1165
|
-
Parameters
|
|
1166
|
-
----------
|
|
1167
|
-
X : torch.Tensor
|
|
1168
|
-
EEG data in form ``batch_size, n_channels, n_times``. Returned
|
|
1169
|
-
unchanged.
|
|
1170
|
-
y : torch.Tensor
|
|
1171
|
-
Target of length ``batch_size`` holding class indices (float values
|
|
1172
|
-
are accepted when they are integral), or a floating-point tensor of
|
|
1173
|
-
shape ``batch_size, num_classes`` holding target distributions.
|
|
1174
|
-
epsilon : float
|
|
1175
|
-
Smoothing parameter between 0 and 1: the weight of the uniform
|
|
1176
|
-
distribution mixed into the targets. ``0`` returns the unsmoothed
|
|
1177
|
-
targets.
|
|
1178
|
-
num_classes : int | None, optional
|
|
1179
|
-
Number of classes. Required when ``y`` holds class indices; when
|
|
1180
|
-
``y`` already holds distributions, it must match the size of the
|
|
1181
|
-
last dimension of ``y``. Defaults to None.
|
|
1182
|
-
|
|
1183
|
-
Returns
|
|
1184
|
-
-------
|
|
1185
|
-
tuple
|
|
1186
|
-
``X``, ``y``. Where ``X`` is unchanged and ``y`` is a
|
|
1187
|
-
floating-point tensor of shape ``batch_size, num_classes`` whose
|
|
1188
|
-
rows sum to one.
|
|
1189
|
-
|
|
1190
|
-
References
|
|
1191
|
-
----------
|
|
1192
|
-
.. [1] Christian Szegedy, Vincent Vanhoucke, Jonathon Shlens and
|
|
1193
|
-
Zbigniew Wojna (2016). Rethinking the Inception Architecture for
|
|
1194
|
-
Computer Vision. In 2016 IEEE Conference on Computer Vision and
|
|
1195
|
-
Pattern Recognition (CVPR), pp. 2818-2826.
|
|
1196
|
-
Online: https://arxiv.org/abs/1512.00567
|
|
1197
|
-
"""
|
|
1198
|
-
if not isinstance(epsilon, Real) or not 0.0 <= float(epsilon) <= 1.0:
|
|
1199
|
-
raise ValueError(
|
|
1200
|
-
f"epsilon should be a real number between 0 and 1. Got {epsilon!r}."
|
|
1201
|
-
)
|
|
1202
|
-
if num_classes is not None and (
|
|
1203
|
-
not isinstance(num_classes, int)
|
|
1204
|
-
or isinstance(num_classes, bool)
|
|
1205
|
-
or num_classes < 2
|
|
1206
|
-
):
|
|
1207
|
-
raise ValueError(
|
|
1208
|
-
f"num_classes should be an integer of at least 2. Got {num_classes!r}."
|
|
1209
|
-
)
|
|
1210
|
-
|
|
1211
|
-
if y.dim() == 1:
|
|
1212
|
-
# class-index targets: smooth their one-hot encoding
|
|
1213
|
-
if num_classes is None:
|
|
1214
|
-
raise ValueError("num_classes is required when y holds class indices.")
|
|
1215
|
-
if not torch.all(y == y.floor()):
|
|
1216
|
-
raise ValueError(
|
|
1217
|
-
"y holds non-integral values; class-index targets should be "
|
|
1218
|
-
"integers or integral floats."
|
|
1219
|
-
)
|
|
1220
|
-
if y.numel() > 0 and (y.min() < 0 or y.max() >= num_classes):
|
|
1221
|
-
raise ValueError(f"y holds class indices outside [0, {num_classes}).")
|
|
1222
|
-
one_hot_y = one_hot(y.long(), num_classes).to(dtype=X.dtype)
|
|
1223
|
-
return X, one_hot_y * (1.0 - epsilon) + epsilon / num_classes
|
|
1224
|
-
|
|
1225
|
-
if y.is_floating_point() and y.dim() >= 2:
|
|
1226
|
-
# target distributions: interpolate them toward the uniform one
|
|
1227
|
-
n_classes = y.shape[-1]
|
|
1228
|
-
if num_classes is not None and num_classes != n_classes:
|
|
1229
|
-
raise ValueError(
|
|
1230
|
-
f"num_classes ({num_classes}) does not match the size of the "
|
|
1231
|
-
f"last dimension of y ({n_classes})."
|
|
1232
|
-
)
|
|
1233
|
-
if n_classes < 2:
|
|
1234
|
-
raise ValueError(
|
|
1235
|
-
f"y should hold distributions over at least 2 classes. Got {n_classes}."
|
|
1236
|
-
)
|
|
1237
|
-
return X, y * (1.0 - epsilon) + epsilon / n_classes
|
|
1238
|
-
|
|
1239
|
-
raise ValueError(
|
|
1240
|
-
"y should hold class indices or floating-point target distributions "
|
|
1241
|
-
f"with a class dimension; got dtype {y.dtype} and shape "
|
|
1242
|
-
f"{tuple(y.shape)}."
|
|
1243
|
-
)
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
1077
|
def segmentation_reconstruction(
|
|
1247
1078
|
X: torch.Tensor,
|
|
1248
1079
|
y: torch.Tensor,
|
|
@@ -1262,8 +1093,7 @@ def segmentation_reconstruction(
|
|
|
1262
1093
|
y : torch.Tensor
|
|
1263
1094
|
EEG labels for the example or batch.
|
|
1264
1095
|
n_segments : int
|
|
1265
|
-
Number of segments to use in the batch.
|
|
1266
|
-
included in the last segment.
|
|
1096
|
+
Number of segments to use in the batch.
|
|
1267
1097
|
data_classes : list[tuple[int, torch.Tensor]]
|
|
1268
1098
|
List of tuples. Each tuple contains the class index and the corresponding EEG data.
|
|
1269
1099
|
rand_indices : array-like
|
|
@@ -1303,8 +1133,6 @@ def segmentation_reconstruction(
|
|
|
1303
1133
|
for idx_segment in range(n_segments):
|
|
1304
1134
|
start = idx_segment * segment_size
|
|
1305
1135
|
end = (idx_segment + 1) * segment_size
|
|
1306
|
-
if idx_segment == n_segments - 1:
|
|
1307
|
-
end = window_size
|
|
1308
1136
|
|
|
1309
1137
|
# Perform the data augmentation
|
|
1310
1138
|
X_aug[np.arange(n_trials), :, start:end] = X_class[
|