braindecode 1.5.0.dev989__tar.gz → 1.5.0.dev176208946__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.5.0.dev989/braindecode.egg-info → braindecode-1.5.0.dev176208946}/PKG-INFO +1 -1
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/__init__.py +10 -2
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/biot.py +61 -1
- braindecode-1.5.0.dev176208946/braindecode/models/codebrain.py +977 -0
- braindecode-1.5.0.dev176208946/braindecode/models/interpolated.py +182 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/labram.py +208 -266
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/reve.py +1 -1
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/signal_jepa.py +463 -38
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/summary.csv +4 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/util.py +91 -19
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/modules/__init__.py +2 -0
- braindecode-1.5.0.dev176208946/braindecode/modules/interpolation.py +201 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/preprocessing/eegprep_preprocess.py +51 -6
- braindecode-1.5.0.dev176208946/braindecode/version.py +1 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946/braindecode.egg-info}/PKG-INFO +1 -1
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode.egg-info/SOURCES.txt +3 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/api.rst +8 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/whats_new.rst +33 -0
- braindecode-1.5.0.dev989/braindecode/version.py +0 -1
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/LICENSE.txt +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/MANIFEST.in +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/NOTICE.txt +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/README.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/__init__.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/augmentation/__init__.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/augmentation/base.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/augmentation/functional.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/augmentation/transforms.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/classifier.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/__init__.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/base.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/bbci.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/bcicomp.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/bids/__init__.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/bids/datasets.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/bids/format.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/bids/hub.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/bids/hub_format.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/bids/hub_io.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/bids/hub_validation.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/bids/iterable.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/chb_mit.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/mne.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/moabb.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/nmt.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/registry.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/siena.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/sleep_physio_challe_18.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/sleep_physionet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/tuh.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/utils.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datasets/xy.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datautil/__init__.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datautil/channel_utils.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datautil/hub_formats.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datautil/serialization.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/datautil/util.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/eegneuralnet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/functional/__init__.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/functional/functions.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/functional/initialization.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/atcnet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/attentionbasenet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/attn_sleep.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/base.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/bendr.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/brainmodule.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/cbramod.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/config.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/contrawr.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/ctnet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/deep4.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/deepsleepnet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/dgcnn.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/eegconformer.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/eeginception_erp.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/eeginception_mi.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/eegitnet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/eegminer.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/eegnet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/eegnex.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/eegpt.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/eegsimpleconv.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/eegsym.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/eegtcnet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/fbcnet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/fblightconvnet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/fbmsnet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/hybrid.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/ifnet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/luna.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/medformer.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/msvtnet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/patchedtransformer.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/sccnet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/shallow_fbcsp.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/sinc_shallow.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/sparcnet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/sstdpn.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/syncnet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/tcn.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/tidnet.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/tsinception.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/models/usleep.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/modules/activation.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/modules/attention.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/modules/blocks.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/modules/convolution.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/modules/filter.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/modules/layers.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/modules/linear.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/modules/parametrization.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/modules/stats.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/modules/util.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/modules/wrapper.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/preprocessing/__init__.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/preprocessing/mne_preprocess.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/preprocessing/preprocess.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/preprocessing/util.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/preprocessing/windowers.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/regressor.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/samplers/__init__.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/samplers/base.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/samplers/ssl.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/training/__init__.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/training/callbacks.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/training/losses.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/training/scoring.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/util.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/visualization/__init__.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/visualization/confusion_matrices.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode/visualization/gradients.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode.egg-info/dependency_links.txt +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode.egg-info/requires.txt +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/braindecode.egg-info/top_level.txt +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/Makefile +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/_templates/autosummary/class.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/_templates/autosummary/class_in_subdir.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/_templates/autosummary/function.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/_templates/autosummary/function_in_subdir.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/cite.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/conf.py +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/help.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/index.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/install/install.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/install/install_pip.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/install/install_source.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/models/categorization/attention.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/models/categorization/channel.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/models/categorization/convolution.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/models/categorization/filterbank.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/models/categorization/gnn.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/models/categorization/interpretable.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/models/categorization/lbm.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/models/categorization/recurrent.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/models/categorization/spd.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/models/models.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/models/models_categorization.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/models/models_table.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/models/models_visualization.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/docs/sg_execution_times.rst +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/pyproject.toml +0 -0
- {braindecode-1.5.0.dev989 → braindecode-1.5.0.dev176208946}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: braindecode
|
|
3
|
-
Version: 1.5.0.
|
|
3
|
+
Version: 1.5.0.dev176208946
|
|
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>
|
|
@@ -5,9 +5,10 @@ from .attentionbasenet import AttentionBaseNet
|
|
|
5
5
|
from .attn_sleep import AttnSleep
|
|
6
6
|
from .base import EEGModuleMixin
|
|
7
7
|
from .bendr import BENDR
|
|
8
|
-
from .biot import BIOT
|
|
8
|
+
from .biot import BIOT, InterpolatedBIOT
|
|
9
9
|
from .brainmodule import BrainModule
|
|
10
10
|
from .cbramod import CBraMod
|
|
11
|
+
from .codebrain import CodeBrain
|
|
11
12
|
from .contrawr import ContraWR
|
|
12
13
|
from .ctnet import CTNet
|
|
13
14
|
from .deep4 import Deep4Net
|
|
@@ -29,7 +30,8 @@ from .fblightconvnet import FBLightConvNet
|
|
|
29
30
|
from .fbmsnet import FBMSNet
|
|
30
31
|
from .hybrid import HybridNet
|
|
31
32
|
from .ifnet import IFNet
|
|
32
|
-
from .
|
|
33
|
+
from .interpolated import InterpolatedModel
|
|
34
|
+
from .labram import InterpolatedLaBraM, Labram
|
|
33
35
|
from .luna import LUNA
|
|
34
36
|
from .medformer import MEDFormer
|
|
35
37
|
from .msvtnet import MSVTNet
|
|
@@ -38,6 +40,7 @@ from .reve import REVE
|
|
|
38
40
|
from .sccnet import SCCNet
|
|
39
41
|
from .shallow_fbcsp import ShallowFBCSPNet
|
|
40
42
|
from .signal_jepa import (
|
|
43
|
+
InterpolatedSignalJEPA,
|
|
41
44
|
SignalJEPA,
|
|
42
45
|
SignalJEPA_Contextual,
|
|
43
46
|
SignalJEPA_PostLocal,
|
|
@@ -72,6 +75,7 @@ __all__ = [
|
|
|
72
75
|
"BIOT",
|
|
73
76
|
"BENDR",
|
|
74
77
|
"CBraMod",
|
|
78
|
+
"CodeBrain",
|
|
75
79
|
"ContraWR",
|
|
76
80
|
"CTNet",
|
|
77
81
|
"Deep4Net",
|
|
@@ -95,6 +99,10 @@ __all__ = [
|
|
|
95
99
|
"FBMSNet",
|
|
96
100
|
"HybridNet",
|
|
97
101
|
"IFNet",
|
|
102
|
+
"InterpolatedBIOT",
|
|
103
|
+
"InterpolatedLaBraM",
|
|
104
|
+
"InterpolatedModel",
|
|
105
|
+
"InterpolatedSignalJEPA",
|
|
98
106
|
"Labram",
|
|
99
107
|
"LUNA",
|
|
100
108
|
"extract_channel_locations_from_chs_info",
|
|
@@ -1,12 +1,57 @@
|
|
|
1
1
|
import math
|
|
2
2
|
from warnings import warn
|
|
3
3
|
|
|
4
|
+
import numpy as np
|
|
4
5
|
import torch
|
|
5
6
|
import torch.nn as nn
|
|
6
7
|
from linear_attention_transformer import LinearAttentionTransformer
|
|
7
8
|
|
|
8
9
|
from braindecode.models.base import EEGModuleMixin
|
|
9
10
|
|
|
11
|
+
# -----------------------------------------------------------------------------
|
|
12
|
+
# Canonical channel order for InterpolatedBIOT — the 18-channel TCP bipolar
|
|
13
|
+
# montage used by BIOT's shhs-prest and six-datasets pretrained checkpoints.
|
|
14
|
+
# Source: https://github.com/ycq091044/BIOT (README + datasets/TUAB/process.py
|
|
15
|
+
# + datasets/SHHS/process.py). Indices 0-15 are the TCP 16-channel bipolar
|
|
16
|
+
# derivations; indices 16-17 are SHHS differential channels.
|
|
17
|
+
#
|
|
18
|
+
# The `loc` values are only used to build an MNE interpolation matrix for
|
|
19
|
+
# InterpolatedBIOT. All entries are bipolar / differential derivations.
|
|
20
|
+
# TODO: positions are stored as the midpoint of the two constituent
|
|
21
|
+
# electrodes. This is a simplification — a bipolar signal V(A)-V(B) cannot
|
|
22
|
+
# be faithfully recovered by spatial interpolation at the midpoint. Revisit
|
|
23
|
+
# in a follow-up PR (e.g. a dedicated BipolarDerivationLayer).
|
|
24
|
+
# -----------------------------------------------------------------------------
|
|
25
|
+
|
|
26
|
+
# fmt: off
|
|
27
|
+
_BIOT_TARGET_CHS_TUPLES: list[tuple[str, tuple[float, float, float]]] = [
|
|
28
|
+
("FP1-F7", (-0.04984980, 0.06319570, -0.00920500)),
|
|
29
|
+
("F7-T7", (-0.07721200, 0.01322780, -0.01038300)),
|
|
30
|
+
("T7-P7", (-0.07829770, -0.04473570, -0.00591650)),
|
|
31
|
+
("P7-O1", (-0.05092385, -0.09295085, 0.00317600)),
|
|
32
|
+
("FP2-F8", (0.05145770, 0.06465880, -0.00954000)),
|
|
33
|
+
("F8-T8", (0.07906150, 0.01470070, -0.01074500)),
|
|
34
|
+
("T8-P8", (0.07906780, -0.04404430, -0.00601500)),
|
|
35
|
+
("P8-O2", (0.05144915, -0.09261215, 0.00313000)),
|
|
36
|
+
("FP1-F3", (-0.03984025, 0.06851415, 0.01760100)),
|
|
37
|
+
("F3-C3", (-0.05780095, 0.02073975, 0.05327500)),
|
|
38
|
+
("C3-P3", (-0.05918270, -0.04520975, 0.06014900)),
|
|
39
|
+
("P3-O1", (-0.04121035, -0.09561840, 0.03238950)),
|
|
40
|
+
("FP2-F4", (0.04085425, 0.06960035, 0.01686700)),
|
|
41
|
+
("F4-C4", (0.05947705, 0.02170225, 0.05219700)),
|
|
42
|
+
("C4-P4", (0.06139230, -0.04473025, 0.06007050)),
|
|
43
|
+
("P4-O2", (0.04275465, -0.09535810, 0.03268050)),
|
|
44
|
+
("C3-A2", (0.01021790, -0.01832050, -0.00183650)),
|
|
45
|
+
("C4-A1", (-0.00947910, -0.01794500, -0.00220300)),
|
|
46
|
+
]
|
|
47
|
+
# fmt: on
|
|
48
|
+
|
|
49
|
+
_BIOT_TARGET_CHS_INFO = [
|
|
50
|
+
{"ch_name": ch, "kind": "eeg", "loc": np.asarray(loc, dtype=float)}
|
|
51
|
+
for ch, loc in _BIOT_TARGET_CHS_TUPLES
|
|
52
|
+
]
|
|
53
|
+
BIOT_CHANNEL_ORDER = [ch for ch, _ in _BIOT_TARGET_CHS_TUPLES]
|
|
54
|
+
|
|
10
55
|
|
|
11
56
|
class BIOT(EEGModuleMixin, nn.Module):
|
|
12
57
|
r"""BIOT from Yang et al (2023) [Yang2023]_
|
|
@@ -439,7 +484,9 @@ class _BIOTEncoder(nn.Module):
|
|
|
439
484
|
self.channel_tokens = nn.Embedding(
|
|
440
485
|
num_embeddings=n_chans, embedding_dim=emb_size
|
|
441
486
|
)
|
|
442
|
-
self.register_buffer(
|
|
487
|
+
self.register_buffer(
|
|
488
|
+
"index", torch.arange(n_chans, dtype=torch.long), persistent=False
|
|
489
|
+
)
|
|
443
490
|
|
|
444
491
|
def stft(self, sample):
|
|
445
492
|
"""
|
|
@@ -553,3 +600,16 @@ class _BIOTEncoder(nn.Module):
|
|
|
553
600
|
# (batch_size, emb)
|
|
554
601
|
emb = self.transformer(emb).mean(dim=1)
|
|
555
602
|
return emb
|
|
603
|
+
|
|
604
|
+
|
|
605
|
+
# -----------------------------------------------------------------------------
|
|
606
|
+
# InterpolatedBIOT — experimental channel-interpolation variant of BIOT
|
|
607
|
+
# -----------------------------------------------------------------------------
|
|
608
|
+
# Wraps :class:`BIOT` with an MNE-backed channel-interpolation layer that
|
|
609
|
+
# projects arbitrary user ``chs_info`` to the canonical 18-channel BIOT
|
|
610
|
+
# montage (:data:`_BIOT_TARGET_CHS_INFO`). Frozen by default; set
|
|
611
|
+
# ``trainable=True`` to fine-tune the projection matrix.
|
|
612
|
+
|
|
613
|
+
from braindecode.models.interpolated import InterpolatedModel # noqa: E402
|
|
614
|
+
|
|
615
|
+
InterpolatedBIOT = InterpolatedModel(BIOT, _BIOT_TARGET_CHS_INFO)
|