Braindecode 1.3.0.dev175563314__tar.gz → 1.3.0.dev175887834__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.3.0.dev175563314/braindecode.egg-info → braindecode-1.3.0.dev175887834}/PKG-INFO +9 -6
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/__init__.py +0 -16
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/hub.py +23 -238
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/nmt.py +8 -16
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/__init__.py +0 -2
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/base.py +2 -2
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/bendr.py +0 -25
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/biot.py +0 -29
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/config.py +2 -2
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/labram.py +0 -24
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/luna.py +0 -55
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/signal_jepa.py +0 -27
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/summary.csv +0 -1
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/util.py +0 -10
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/samplers/ssl.py +1 -1
- braindecode-1.3.0.dev175887834/braindecode/version.py +1 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834/braindecode.egg-info}/PKG-INFO +9 -6
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode.egg-info/SOURCES.txt +0 -2
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode.egg-info/requires.txt +8 -5
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/api.rst +7 -60
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/conf.py +1 -9
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/whats_new.rst +5 -8
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/pyproject.toml +13 -10
- braindecode-1.3.0.dev175563314/braindecode/datasets/bids_format.py +0 -714
- braindecode-1.3.0.dev175563314/braindecode/models/reve.py +0 -837
- braindecode-1.3.0.dev175563314/braindecode/version.py +0 -1
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/LICENSE.txt +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/MANIFEST.in +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/NOTICE.txt +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/README.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/__init__.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/augmentation/__init__.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/augmentation/base.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/augmentation/functional.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/augmentation/transforms.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/classifier.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/base.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/bbci.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/bcicomp.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/bids.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/chb_mit.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/experimental.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/hub_validation.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/mne.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/moabb.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/registry.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/siena.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/sleep_physio_challe_18.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/sleep_physionet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/tuh.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/utils.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/xy.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datautil/__init__.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datautil/channel_utils.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datautil/hub_formats.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datautil/serialization.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datautil/util.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/eegneuralnet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/functional/__init__.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/functional/functions.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/functional/initialization.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/atcnet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/attentionbasenet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/attn_sleep.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/contrawr.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/ctnet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/deep4.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/deepsleepnet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eegconformer.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eeginception_erp.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eeginception_mi.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eegitnet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eegminer.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eegnet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eegnex.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eegsimpleconv.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eegsym.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eegtcnet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/fbcnet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/fblightconvnet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/fbmsnet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/hybrid.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/ifnet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/medformer.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/msvtnet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/patchedtransformer.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/sccnet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/shallow_fbcsp.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/sinc_shallow.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/sparcnet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/sstdpn.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/syncnet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/tcn.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/tidnet.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/tsinception.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/usleep.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/__init__.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/activation.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/attention.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/blocks.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/convolution.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/filter.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/layers.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/linear.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/parametrization.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/stats.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/util.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/wrapper.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/preprocessing/__init__.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/preprocessing/eegprep_preprocess.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/preprocessing/mne_preprocess.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/preprocessing/preprocess.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/preprocessing/util.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/preprocessing/windowers.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/regressor.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/samplers/__init__.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/samplers/base.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/training/__init__.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/training/callbacks.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/training/losses.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/training/scoring.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/util.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/visualization/__init__.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/visualization/confusion_matrices.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/visualization/gradients.py +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode.egg-info/dependency_links.txt +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode.egg-info/top_level.txt +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/Makefile +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/_templates/autosummary/class.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/_templates/autosummary/function.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/cite.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/help.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/index.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/install/install.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/install/install_pip.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/install/install_source.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/attention.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/channel.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/convolution.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/filterbank.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/gnn.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/interpretable.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/lbm.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/recurrent.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/spd.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/models.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/models_categorization.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/models_table.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/models_visualization.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/sg_execution_times.rst +0 -0
- {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/setup.cfg +0 -0
{braindecode-1.3.0.dev175563314/braindecode.egg-info → braindecode-1.3.0.dev175887834}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: braindecode
|
|
3
|
-
Version: 1.3.0.
|
|
3
|
+
Version: 1.3.0.dev175887834
|
|
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>
|
|
@@ -22,12 +22,17 @@ Requires-Python: >=3.11
|
|
|
22
22
|
Description-Content-Type: text/x-rst
|
|
23
23
|
License-File: LICENSE.txt
|
|
24
24
|
License-File: NOTICE.txt
|
|
25
|
-
Requires-Dist: torch>=2.2
|
|
26
|
-
Requires-Dist: torchaudio>=2.0
|
|
27
25
|
Requires-Dist: mne>=1.11.0
|
|
28
26
|
Requires-Dist: mne_bids>=0.16
|
|
27
|
+
Requires-Dist: numpy
|
|
28
|
+
Requires-Dist: pandas
|
|
29
|
+
Requires-Dist: scipy
|
|
30
|
+
Requires-Dist: matplotlib
|
|
29
31
|
Requires-Dist: h5py
|
|
30
32
|
Requires-Dist: skorch>=1.3.0
|
|
33
|
+
Requires-Dist: torch>=2.0
|
|
34
|
+
Requires-Dist: torchaudio>=2.0
|
|
35
|
+
Requires-Dist: einops
|
|
31
36
|
Requires-Dist: joblib
|
|
32
37
|
Requires-Dist: torchinfo
|
|
33
38
|
Requires-Dist: wfdb
|
|
@@ -35,7 +40,7 @@ Requires-Dist: linear_attention_transformer
|
|
|
35
40
|
Requires-Dist: docstring_inheritance
|
|
36
41
|
Requires-Dist: rotary_embedding_torch
|
|
37
42
|
Provides-Extra: moabb
|
|
38
|
-
Requires-Dist: moabb>=1.4.
|
|
43
|
+
Requires-Dist: moabb>=1.4.2; extra == "moabb"
|
|
39
44
|
Provides-Extra: eegprep
|
|
40
45
|
Requires-Dist: eegprep[eeglabio]>=0.2.23; extra == "eegprep"
|
|
41
46
|
Provides-Extra: hub
|
|
@@ -47,7 +52,6 @@ Requires-Dist: pytest-cov; extra == "tests"
|
|
|
47
52
|
Requires-Dist: codecov; extra == "tests"
|
|
48
53
|
Requires-Dist: pytest_cases; extra == "tests"
|
|
49
54
|
Requires-Dist: mypy; extra == "tests"
|
|
50
|
-
Requires-Dist: transformers>=4.57.0; extra == "tests"
|
|
51
55
|
Provides-Extra: typing
|
|
52
56
|
Requires-Dist: exca==0.4; extra == "typing"
|
|
53
57
|
Requires-Dist: numpydantic>=1.7; extra == "typing"
|
|
@@ -71,7 +75,6 @@ Requires-Dist: openneuro-py; extra == "docs"
|
|
|
71
75
|
Requires-Dist: plotly; extra == "docs"
|
|
72
76
|
Requires-Dist: shap; extra == "docs"
|
|
73
77
|
Requires-Dist: nbformat; extra == "docs"
|
|
74
|
-
Requires-Dist: transformers; extra == "docs"
|
|
75
78
|
Provides-Extra: all
|
|
76
79
|
Requires-Dist: braindecode[moabb]; extra == "all"
|
|
77
80
|
Requires-Dist: braindecode[tests]; extra == "all"
|
{braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/__init__.py
RENAMED
|
@@ -11,15 +11,6 @@ from .base import (
|
|
|
11
11
|
)
|
|
12
12
|
from .bcicomp import BCICompetitionIVDataset4
|
|
13
13
|
from .bids import BIDSDataset, BIDSEpochsDataset
|
|
14
|
-
from .bids_format import (
|
|
15
|
-
BIDSDerivativesLayout,
|
|
16
|
-
create_channels_tsv,
|
|
17
|
-
create_eeg_json_sidecar,
|
|
18
|
-
create_events_tsv,
|
|
19
|
-
create_participants_tsv,
|
|
20
|
-
description_to_bids_path,
|
|
21
|
-
make_dataset_description,
|
|
22
|
-
)
|
|
23
14
|
from .chb_mit import CHBMIT
|
|
24
15
|
from .mne import create_from_mne_epochs, create_from_mne_raw
|
|
25
16
|
from .moabb import BNCI2014_001, HGD, MOABBDataset
|
|
@@ -38,13 +29,6 @@ __all__ = [
|
|
|
38
29
|
"BaseConcatDataset",
|
|
39
30
|
"BIDSDataset",
|
|
40
31
|
"BIDSEpochsDataset",
|
|
41
|
-
"BIDSDerivativesLayout",
|
|
42
|
-
"create_events_tsv",
|
|
43
|
-
"create_participants_tsv",
|
|
44
|
-
"create_channels_tsv",
|
|
45
|
-
"create_eeg_json_sidecar",
|
|
46
|
-
"make_dataset_description",
|
|
47
|
-
"description_to_bids_path",
|
|
48
32
|
"MOABBDataset",
|
|
49
33
|
"HGD",
|
|
50
34
|
"BNCI2014_001",
|
{braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/hub.py
RENAMED
|
@@ -3,21 +3,9 @@ Hugging Face Hub integration for EEG datasets.
|
|
|
3
3
|
|
|
4
4
|
This module provides push_to_hub() and pull_from_hub() functionality
|
|
5
5
|
for braindecode datasets, similar to the model Hub integration.
|
|
6
|
-
|
|
7
|
-
The format follows a BIDS-like derivatives structure:
|
|
8
|
-
- derivatives/braindecode/
|
|
9
|
-
- dataset_description.json
|
|
10
|
-
- participants.tsv
|
|
11
|
-
- dataset.zarr/ (main data for efficient training)
|
|
12
|
-
- sub-<label>/
|
|
13
|
-
- eeg/
|
|
14
|
-
- *_events.tsv
|
|
15
|
-
- *_channels.tsv
|
|
16
|
-
- *_eeg.json
|
|
17
6
|
"""
|
|
18
7
|
|
|
19
8
|
# Authors: Kuntal Kokate
|
|
20
|
-
# Bruno Aristimunha <b.aristimunha@gmail.com>
|
|
21
9
|
#
|
|
22
10
|
# License: BSD (3-clause)
|
|
23
11
|
|
|
@@ -42,8 +30,7 @@ if TYPE_CHECKING:
|
|
|
42
30
|
import braindecode
|
|
43
31
|
|
|
44
32
|
# Import shared validation utilities
|
|
45
|
-
|
|
46
|
-
from . import bids_format, hub_validation
|
|
33
|
+
from . import hub_validation
|
|
47
34
|
|
|
48
35
|
# Import registry for dynamic class lookup (avoids circular imports)
|
|
49
36
|
from .registry import get_dataset_class, get_dataset_type
|
|
@@ -89,15 +76,13 @@ class HubDatasetMixin:
|
|
|
89
76
|
create_pr: bool = False,
|
|
90
77
|
compression: str = "blosc",
|
|
91
78
|
compression_level: int = 5,
|
|
92
|
-
pipeline_name: str = "braindecode",
|
|
93
79
|
) -> str:
|
|
94
80
|
"""
|
|
95
|
-
Upload the dataset to the Hugging Face Hub in
|
|
81
|
+
Upload the dataset to the Hugging Face Hub in Zarr format.
|
|
96
82
|
|
|
97
83
|
The dataset is converted to Zarr format with blosc compression, which provides
|
|
98
|
-
optimal random access performance for PyTorch training
|
|
99
|
-
|
|
100
|
-
and participants.tsv sidecar files.
|
|
84
|
+
optimal random access performance for PyTorch training (based on comprehensive
|
|
85
|
+
benchmarking).
|
|
101
86
|
|
|
102
87
|
Parameters
|
|
103
88
|
----------
|
|
@@ -115,8 +100,6 @@ class HubDatasetMixin:
|
|
|
115
100
|
Compression algorithm for Zarr. Options: "blosc", "zstd", "gzip", None.
|
|
116
101
|
compression_level : int, default=5
|
|
117
102
|
Compression level (0-9). Level 5 provides optimal balance.
|
|
118
|
-
pipeline_name : str, default="braindecode"
|
|
119
|
-
Name of the processing pipeline for BIDS derivatives.
|
|
120
103
|
|
|
121
104
|
Returns
|
|
122
105
|
-------
|
|
@@ -133,11 +116,18 @@ class HubDatasetMixin:
|
|
|
133
116
|
Examples
|
|
134
117
|
--------
|
|
135
118
|
>>> dataset = NMT(path=path, preload=True)
|
|
136
|
-
>>> # Upload with
|
|
119
|
+
>>> # Upload with default settings (zarr with blosc compression)
|
|
137
120
|
>>> url = dataset.push_to_hub(
|
|
138
121
|
... repo_id="myusername/nmt-dataset",
|
|
139
122
|
... commit_message="Upload NMT EEG dataset"
|
|
140
123
|
... )
|
|
124
|
+
>>>
|
|
125
|
+
>>> # Or customize compression
|
|
126
|
+
>>> url = dataset.push_to_hub(
|
|
127
|
+
... repo_id="myusername/nmt-dataset",
|
|
128
|
+
... compression="blosc",
|
|
129
|
+
... compression_level=5
|
|
130
|
+
... )
|
|
141
131
|
"""
|
|
142
132
|
if huggingface_hub is False or zarr is False:
|
|
143
133
|
raise ImportError(
|
|
@@ -164,45 +154,25 @@ class HubDatasetMixin:
|
|
|
164
154
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
165
155
|
tmp_path = Path(tmpdir)
|
|
166
156
|
|
|
167
|
-
#
|
|
168
|
-
log.info("Creating BIDS-like derivatives structure...")
|
|
169
|
-
bids_layout = bids_format.BIDSDerivativesLayout(
|
|
170
|
-
tmp_path, pipeline_name=pipeline_name
|
|
171
|
-
)
|
|
172
|
-
derivatives_dir = bids_layout.create_structure()
|
|
173
|
-
|
|
174
|
-
# Save dataset_description.json
|
|
175
|
-
bids_layout.save_dataset_description()
|
|
176
|
-
|
|
177
|
-
# Save participants.tsv
|
|
178
|
-
descriptions = [ds.description for ds in self.datasets]
|
|
179
|
-
bids_layout.save_participants(descriptions)
|
|
180
|
-
|
|
181
|
-
# Save BIDS sidecar files for each recording
|
|
182
|
-
self._save_bids_sidecar_files(bids_layout)
|
|
183
|
-
|
|
184
|
-
# Convert dataset to Zarr format inside derivatives
|
|
157
|
+
# Convert dataset to Zarr format
|
|
185
158
|
log.info("Converting dataset to Zarr format...")
|
|
186
|
-
dataset_path =
|
|
187
|
-
|
|
159
|
+
dataset_path = tmp_path / "dataset.zarr"
|
|
188
160
|
self._convert_to_zarr_inline(
|
|
189
161
|
dataset_path,
|
|
190
162
|
compression,
|
|
191
163
|
compression_level,
|
|
192
164
|
)
|
|
193
165
|
|
|
194
|
-
# Save dataset metadata
|
|
166
|
+
# Save dataset metadata
|
|
195
167
|
self._save_dataset_card(tmp_path)
|
|
196
168
|
|
|
197
169
|
# Save format info
|
|
198
170
|
format_info_path = tmp_path / "format_info.json"
|
|
199
|
-
with open(format_info_path, "w"
|
|
171
|
+
with open(format_info_path, "w") as f:
|
|
200
172
|
format_info = self._get_format_info_inline()
|
|
201
173
|
json.dump(
|
|
202
174
|
{
|
|
203
175
|
"format": "zarr",
|
|
204
|
-
"bids_compatible": True,
|
|
205
|
-
"pipeline_name": pipeline_name,
|
|
206
176
|
"compression": compression,
|
|
207
177
|
"compression_level": compression_level,
|
|
208
178
|
"braindecode_version": braindecode.__version__,
|
|
@@ -215,8 +185,8 @@ class HubDatasetMixin:
|
|
|
215
185
|
# Default commit message
|
|
216
186
|
if commit_message is None:
|
|
217
187
|
commit_message = (
|
|
218
|
-
f"Upload EEG dataset in
|
|
219
|
-
f"
|
|
188
|
+
f"Upload EEG dataset in Zarr format "
|
|
189
|
+
f"({len(self.datasets)} recordings)"
|
|
220
190
|
)
|
|
221
191
|
|
|
222
192
|
# Upload folder to Hub
|
|
@@ -236,7 +206,7 @@ class HubDatasetMixin:
|
|
|
236
206
|
except Exception as e:
|
|
237
207
|
raise RuntimeError(f"Failed to upload dataset: {e}")
|
|
238
208
|
|
|
239
|
-
def _save_dataset_card(self, path: Path
|
|
209
|
+
def _save_dataset_card(self, path: Path) -> None:
|
|
240
210
|
"""Generate and save a dataset card (README.md) with metadata.
|
|
241
211
|
|
|
242
212
|
Parameters
|
|
@@ -278,71 +248,13 @@ class HubDatasetMixin:
|
|
|
278
248
|
sfreq=sfreq,
|
|
279
249
|
data_type=data_type,
|
|
280
250
|
n_windows=n_windows,
|
|
281
|
-
bids_compatible=True,
|
|
282
251
|
)
|
|
283
252
|
|
|
284
253
|
# Save README
|
|
285
254
|
readme_path = path / "README.md"
|
|
286
|
-
with open(readme_path, "w"
|
|
255
|
+
with open(readme_path, "w") as f:
|
|
287
256
|
f.write(readme_content)
|
|
288
257
|
|
|
289
|
-
def _save_bids_sidecar_files(
|
|
290
|
-
self, bids_layout: "bids_format.BIDSDerivativesLayout"
|
|
291
|
-
) -> None:
|
|
292
|
-
"""Save BIDS-compliant sidecar files for each recording.
|
|
293
|
-
|
|
294
|
-
This creates events.tsv, channels.tsv, and EEG sidecar JSON files
|
|
295
|
-
for each recording in a BIDS-like directory structure.
|
|
296
|
-
|
|
297
|
-
Parameters
|
|
298
|
-
----------
|
|
299
|
-
bids_layout : BIDSDerivativesLayout
|
|
300
|
-
BIDS layout object for path generation.
|
|
301
|
-
"""
|
|
302
|
-
dataset_type = get_dataset_type(self.datasets[0])
|
|
303
|
-
|
|
304
|
-
for i_ds, ds in enumerate(self.datasets):
|
|
305
|
-
# Get BIDS entities from description
|
|
306
|
-
description = ds.description if ds.description is not None else pd.Series()
|
|
307
|
-
|
|
308
|
-
# Get BIDSPath for this recording using mne_bids
|
|
309
|
-
bids_path = bids_layout.get_bids_path(description)
|
|
310
|
-
|
|
311
|
-
# Create subject directory
|
|
312
|
-
bids_path.mkdir(exist_ok=True)
|
|
313
|
-
|
|
314
|
-
# Get metadata and info based on dataset type
|
|
315
|
-
if dataset_type == "WindowsDataset":
|
|
316
|
-
info = ds.windows.info
|
|
317
|
-
metadata = ds.windows.metadata
|
|
318
|
-
sfreq = info["sfreq"]
|
|
319
|
-
elif dataset_type == "EEGWindowsDataset":
|
|
320
|
-
info = ds.raw.info
|
|
321
|
-
metadata = ds.metadata
|
|
322
|
-
sfreq = info["sfreq"]
|
|
323
|
-
elif dataset_type == "RawDataset":
|
|
324
|
-
info = ds.raw.info
|
|
325
|
-
metadata = None
|
|
326
|
-
sfreq = info["sfreq"]
|
|
327
|
-
else:
|
|
328
|
-
continue
|
|
329
|
-
|
|
330
|
-
# Determine task name from description or BIDSPath
|
|
331
|
-
task_name = bids_path.task or "unknown"
|
|
332
|
-
|
|
333
|
-
# Save BIDS sidecar files using mne_bids BIDSPath
|
|
334
|
-
bids_format.save_bids_sidecar_files(
|
|
335
|
-
bids_path=bids_path,
|
|
336
|
-
info=info,
|
|
337
|
-
metadata=metadata,
|
|
338
|
-
sfreq=sfreq,
|
|
339
|
-
task_name=str(task_name),
|
|
340
|
-
)
|
|
341
|
-
|
|
342
|
-
log.debug(
|
|
343
|
-
f"Saved BIDS sidecar files for recording {i_ds} to {bids_path.directory}"
|
|
344
|
-
)
|
|
345
|
-
|
|
346
258
|
@classmethod
|
|
347
259
|
def pull_from_hub(
|
|
348
260
|
cls,
|
|
@@ -428,22 +340,8 @@ class HubDatasetMixin:
|
|
|
428
340
|
else:
|
|
429
341
|
format_info = {}
|
|
430
342
|
|
|
431
|
-
#
|
|
432
|
-
|
|
433
|
-
pipeline_name = format_info.get("pipeline_name", "braindecode")
|
|
434
|
-
|
|
435
|
-
# Find zarr dataset path
|
|
436
|
-
if bids_compatible:
|
|
437
|
-
# Look in derivatives folder
|
|
438
|
-
zarr_path = (
|
|
439
|
-
Path(dataset_dir) / "derivatives" / pipeline_name / "dataset.zarr"
|
|
440
|
-
)
|
|
441
|
-
if not zarr_path.exists():
|
|
442
|
-
# Fall back to root level (backwards compatibility)
|
|
443
|
-
zarr_path = Path(dataset_dir) / "dataset.zarr"
|
|
444
|
-
else:
|
|
445
|
-
zarr_path = Path(dataset_dir) / "dataset.zarr"
|
|
446
|
-
|
|
343
|
+
# Load zarr dataset
|
|
344
|
+
zarr_path = Path(dataset_dir) / "dataset.zarr"
|
|
447
345
|
if not zarr_path.exists():
|
|
448
346
|
raise FileNotFoundError(
|
|
449
347
|
f"Zarr dataset not found at {zarr_path}. "
|
|
@@ -452,17 +350,11 @@ class HubDatasetMixin:
|
|
|
452
350
|
|
|
453
351
|
dataset = cls._load_from_zarr_inline(zarr_path, preload)
|
|
454
352
|
|
|
455
|
-
# Load BIDS metadata if available
|
|
456
|
-
if bids_compatible:
|
|
457
|
-
cls._load_bids_metadata(dataset, Path(dataset_dir), pipeline_name)
|
|
458
|
-
|
|
459
353
|
log.info(f"Dataset loaded successfully from {repo_id}")
|
|
460
354
|
log.info(f"Recordings: {len(dataset.datasets)}")
|
|
461
355
|
log.info(
|
|
462
356
|
f"Total windows/samples: {format_info.get('total_samples', 'N/A')}"
|
|
463
357
|
)
|
|
464
|
-
if bids_compatible:
|
|
465
|
-
log.info("BIDS sidecar files available in derivatives folder")
|
|
466
358
|
|
|
467
359
|
return dataset
|
|
468
360
|
|
|
@@ -477,71 +369,6 @@ class HubDatasetMixin:
|
|
|
477
369
|
except Exception as e:
|
|
478
370
|
raise RuntimeError(f"Failed to load dataset from Hub: {e}")
|
|
479
371
|
|
|
480
|
-
@classmethod
|
|
481
|
-
def _load_bids_metadata(
|
|
482
|
-
cls,
|
|
483
|
-
dataset,
|
|
484
|
-
dataset_dir: Path,
|
|
485
|
-
pipeline_name: str,
|
|
486
|
-
) -> None:
|
|
487
|
-
"""Load BIDS metadata from sidecar files and attach to dataset.
|
|
488
|
-
|
|
489
|
-
Parameters
|
|
490
|
-
----------
|
|
491
|
-
dataset : BaseConcatDataset
|
|
492
|
-
The loaded dataset to attach metadata to.
|
|
493
|
-
dataset_dir : Path
|
|
494
|
-
Root directory of the downloaded dataset.
|
|
495
|
-
pipeline_name : str
|
|
496
|
-
Name of the processing pipeline.
|
|
497
|
-
"""
|
|
498
|
-
derivatives_dir = dataset_dir / "derivatives" / pipeline_name
|
|
499
|
-
|
|
500
|
-
# Load participants.tsv if available
|
|
501
|
-
participants_path = derivatives_dir / "participants.tsv"
|
|
502
|
-
if participants_path.exists():
|
|
503
|
-
try:
|
|
504
|
-
participants_df = pd.read_csv(participants_path, sep="\t")
|
|
505
|
-
# Store as attribute on the concat dataset
|
|
506
|
-
dataset.participants = participants_df
|
|
507
|
-
log.debug(
|
|
508
|
-
f"Loaded participants info for {len(participants_df)} subjects"
|
|
509
|
-
)
|
|
510
|
-
except Exception as e:
|
|
511
|
-
log.warning(f"Failed to load participants.tsv: {e}")
|
|
512
|
-
|
|
513
|
-
# Create layout for path generation
|
|
514
|
-
bids_layout = bids_format.BIDSDerivativesLayout(
|
|
515
|
-
dataset_dir, pipeline_name=pipeline_name
|
|
516
|
-
)
|
|
517
|
-
|
|
518
|
-
# Try to load events.tsv files and attach to individual datasets
|
|
519
|
-
for i_ds, ds in enumerate(dataset.datasets):
|
|
520
|
-
description = ds.description if ds.description is not None else pd.Series()
|
|
521
|
-
|
|
522
|
-
# Get BIDSPath for this recording
|
|
523
|
-
bids_path = bids_layout.get_bids_path(description)
|
|
524
|
-
|
|
525
|
-
# Load events.tsv if available
|
|
526
|
-
events_path = bids_path.copy().update(suffix="events", extension=".tsv")
|
|
527
|
-
if events_path.fpath.exists():
|
|
528
|
-
try:
|
|
529
|
-
events_df = pd.read_csv(events_path.fpath, sep="\t")
|
|
530
|
-
ds.bids_events = events_df
|
|
531
|
-
log.debug(f"Loaded events for recording {i_ds}")
|
|
532
|
-
except Exception as e:
|
|
533
|
-
log.warning(f"Failed to load events for recording {i_ds}: {e}")
|
|
534
|
-
|
|
535
|
-
# Load channels.tsv if available
|
|
536
|
-
channels_path = bids_path.copy().update(suffix="channels", extension=".tsv")
|
|
537
|
-
if channels_path.fpath.exists():
|
|
538
|
-
try:
|
|
539
|
-
channels_df = pd.read_csv(channels_path.fpath, sep="\t")
|
|
540
|
-
ds.bids_channels = channels_df
|
|
541
|
-
log.debug(f"Loaded channels for recording {i_ds}")
|
|
542
|
-
except Exception as e:
|
|
543
|
-
log.warning(f"Failed to load channels for recording {i_ds}: {e}")
|
|
544
|
-
|
|
545
372
|
def _convert_to_zarr_inline(
|
|
546
373
|
self,
|
|
547
374
|
output_path: Path,
|
|
@@ -1036,7 +863,6 @@ def _generate_readme_content(
|
|
|
1036
863
|
data_type: str,
|
|
1037
864
|
n_windows: int,
|
|
1038
865
|
format: str = "zarr",
|
|
1039
|
-
bids_compatible: bool = True,
|
|
1040
866
|
):
|
|
1041
867
|
"""Generate README.md content for a dataset uploaded to the Hub."""
|
|
1042
868
|
# Use safe access for total size and format sfreq nicely
|
|
@@ -1045,52 +871,12 @@ def _generate_readme_content(
|
|
|
1045
871
|
)
|
|
1046
872
|
sfreq_str = f"{sfreq:g}" if sfreq is not None else "N/A"
|
|
1047
873
|
|
|
1048
|
-
bids_section = ""
|
|
1049
|
-
if bids_compatible:
|
|
1050
|
-
bids_section = """
|
|
1051
|
-
## BIDS-like Structure
|
|
1052
|
-
|
|
1053
|
-
This dataset follows a BIDS derivatives-like structure for compatibility with
|
|
1054
|
-
neuroimaging tools while maintaining efficiency for deep learning:
|
|
1055
|
-
|
|
1056
|
-
```
|
|
1057
|
-
derivatives/braindecode/
|
|
1058
|
-
├── dataset_description.json # BIDS dataset description
|
|
1059
|
-
├── participants.tsv # Subject-level metadata
|
|
1060
|
-
├── dataset.zarr/ # Main data (optimized for training)
|
|
1061
|
-
└── sub-<label>/
|
|
1062
|
-
└── eeg/
|
|
1063
|
-
├── *_events.tsv # Trial/window events
|
|
1064
|
-
├── *_channels.tsv # Channel information
|
|
1065
|
-
└── *_eeg.json # Recording metadata
|
|
1066
|
-
```
|
|
1067
|
-
|
|
1068
|
-
### Accessing BIDS Metadata
|
|
1069
|
-
|
|
1070
|
-
After loading the dataset, BIDS metadata is available:
|
|
1071
|
-
|
|
1072
|
-
```python
|
|
1073
|
-
# Access participants info
|
|
1074
|
-
if hasattr(dataset, "participants"):
|
|
1075
|
-
print(dataset.participants)
|
|
1076
|
-
|
|
1077
|
-
# Access events for a recording
|
|
1078
|
-
if hasattr(dataset.datasets[0], "bids_events"):
|
|
1079
|
-
print(dataset.datasets[0].bids_events)
|
|
1080
|
-
|
|
1081
|
-
# Access channel info
|
|
1082
|
-
if hasattr(dataset.datasets[0], "bids_channels"):
|
|
1083
|
-
print(dataset.datasets[0].bids_channels)
|
|
1084
|
-
```
|
|
1085
|
-
"""
|
|
1086
|
-
|
|
1087
874
|
return f"""---
|
|
1088
875
|
tags:
|
|
1089
876
|
- braindecode
|
|
1090
877
|
- eeg
|
|
1091
878
|
- neuroscience
|
|
1092
879
|
- brain-computer-interface
|
|
1093
|
-
- bids
|
|
1094
880
|
license: unknown
|
|
1095
881
|
---
|
|
1096
882
|
|
|
@@ -1109,7 +895,6 @@ This dataset was created using [braindecode](https://braindecode.org), a library
|
|
|
1109
895
|
| Number of windows / samples | {n_windows} |
|
|
1110
896
|
| Total size | {total_size_mb:.2f} MB |
|
|
1111
897
|
| Storage format | {format} |
|
|
1112
|
-
| BIDS compatible | {"Yes" if bids_compatible else "No"} |
|
|
1113
898
|
|
|
1114
899
|
## Usage
|
|
1115
900
|
|
|
@@ -1148,7 +933,7 @@ To load this dataset::
|
|
|
1148
933
|
# y shape: [batch_size]
|
|
1149
934
|
# metainfo shape: [batch_size, 2] (start and end indices)
|
|
1150
935
|
# Process your batch...
|
|
1151
|
-
|
|
936
|
+
|
|
1152
937
|
## Dataset Format
|
|
1153
938
|
|
|
1154
939
|
This dataset is stored in **Zarr** format, optimized for:
|
{braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/nmt.py
RENAMED
|
@@ -150,10 +150,7 @@ class NMT(BaseConcatDataset):
|
|
|
150
150
|
os.path.join(path, "Labels.csv"), index_col="recordname"
|
|
151
151
|
)
|
|
152
152
|
if recording_ids is not None:
|
|
153
|
-
|
|
154
|
-
# when CSV order differs from sorted file order
|
|
155
|
-
selected_recordnames = [os.path.basename(fp) for fp in file_paths]
|
|
156
|
-
description = description.loc[selected_recordnames]
|
|
153
|
+
description = description.iloc[recording_ids]
|
|
157
154
|
description.replace(
|
|
158
155
|
{
|
|
159
156
|
"not specified": "X",
|
|
@@ -199,23 +196,18 @@ def _get_header(*args):
|
|
|
199
196
|
|
|
200
197
|
def _fake_pd_read_csv(*args, **kwargs):
|
|
201
198
|
# Create a list of lists to hold the data
|
|
202
|
-
# Updated to match the file IDs from _NMT_PATHS (0000036-0000042)
|
|
203
|
-
# to align with the mocked glob.glob return value
|
|
204
199
|
data = [
|
|
205
|
-
["
|
|
206
|
-
["
|
|
207
|
-
["
|
|
208
|
-
["
|
|
209
|
-
["
|
|
210
|
-
["
|
|
211
|
-
["
|
|
200
|
+
["0000001.edf", "normal", 35, "male", "train"],
|
|
201
|
+
["0000002.edf", "abnormal", 28, "female", "test"],
|
|
202
|
+
["0000003.edf", "normal", 62, "male", "train"],
|
|
203
|
+
["0000004.edf", "abnormal", 41, "female", "test"],
|
|
204
|
+
["0000005.edf", "normal", 19, "male", "train"],
|
|
205
|
+
["0000006.edf", "abnormal", 55, "female", "test"],
|
|
206
|
+
["0000007.edf", "normal", 71, "male", "train"],
|
|
212
207
|
]
|
|
213
208
|
|
|
214
209
|
# Create the DataFrame, specifying column names
|
|
215
210
|
df = pd.DataFrame(data, columns=["recordname", "label", "age", "gender", "loc"])
|
|
216
|
-
|
|
217
|
-
# Set recordname as index to match the real pd.read_csv behavior with index_col="recordname"
|
|
218
|
-
df.set_index("recordname", inplace=True)
|
|
219
211
|
|
|
220
212
|
return df
|
|
221
213
|
|
{braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/__init__.py
RENAMED
|
@@ -32,7 +32,6 @@ from .luna import LUNA
|
|
|
32
32
|
from .medformer import MEDFormer
|
|
33
33
|
from .msvtnet import MSVTNet
|
|
34
34
|
from .patchedtransformer import PBT
|
|
35
|
-
from .reve import REVE
|
|
36
35
|
from .sccnet import SCCNet
|
|
37
36
|
from .shallow_fbcsp import ShallowFBCSPNet
|
|
38
37
|
from .signal_jepa import (
|
|
@@ -94,7 +93,6 @@ __all__ = [
|
|
|
94
93
|
"MEDFormer",
|
|
95
94
|
"MSVTNet",
|
|
96
95
|
"PBT",
|
|
97
|
-
"REVE",
|
|
98
96
|
"SCCNet",
|
|
99
97
|
"ShallowFBCSPNet",
|
|
100
98
|
"SignalJEPA",
|
{braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/base.py
RENAMED
|
@@ -192,7 +192,7 @@ class EEGModuleMixin(_BaseHubMixin, metaclass=NumpyDocstringInheritanceInitMeta)
|
|
|
192
192
|
n_times is not None
|
|
193
193
|
and input_window_seconds is not None
|
|
194
194
|
and sfreq is not None
|
|
195
|
-
and n_times !=
|
|
195
|
+
and n_times != int(input_window_seconds * sfreq)
|
|
196
196
|
):
|
|
197
197
|
raise ValueError(
|
|
198
198
|
f"{n_times=} different from {input_window_seconds=} * {sfreq=}"
|
|
@@ -236,7 +236,7 @@ class EEGModuleMixin(_BaseHubMixin, metaclass=NumpyDocstringInheritanceInitMeta)
|
|
|
236
236
|
and self._input_window_seconds is not None
|
|
237
237
|
and self._sfreq is not None
|
|
238
238
|
):
|
|
239
|
-
return
|
|
239
|
+
return int(self._input_window_seconds * self._sfreq)
|
|
240
240
|
elif self._n_times is None:
|
|
241
241
|
raise ValueError(
|
|
242
242
|
"n_times could not be inferred. "
|
{braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/bendr.py
RENAMED
|
@@ -95,31 +95,6 @@ class BENDR(EEGModuleMixin, nn.Module):
|
|
|
95
95
|
**self-supervised pre-training** on large, unlabeled EEG datasets (like TUEG) followed
|
|
96
96
|
by subsequent fine-tuning on the specific downstream classification task [bendr]_.
|
|
97
97
|
|
|
98
|
-
.. important::
|
|
99
|
-
**Pre-trained Weights Available**
|
|
100
|
-
|
|
101
|
-
This model has pre-trained weights available on the Hugging Face Hub.
|
|
102
|
-
You can load them using:
|
|
103
|
-
|
|
104
|
-
.. code-block:: python
|
|
105
|
-
|
|
106
|
-
from braindecode.models import BENDR
|
|
107
|
-
|
|
108
|
-
# Load pre-trained model from Hugging Face Hub
|
|
109
|
-
# you can specify `n_outputs` for your downstream task
|
|
110
|
-
model = BENDR.from_pretrained("braindecode/braindecode-bendr", n_outputs=2)
|
|
111
|
-
|
|
112
|
-
To push your own trained model to the Hub:
|
|
113
|
-
|
|
114
|
-
.. code-block:: python
|
|
115
|
-
|
|
116
|
-
# After training your model
|
|
117
|
-
model.push_to_hub(
|
|
118
|
-
repo_id="username/my-bendr-model", commit_message="Upload trained BENDR model"
|
|
119
|
-
)
|
|
120
|
-
|
|
121
|
-
Requires installing ``braindecode[hug]`` for Hub integration.
|
|
122
|
-
|
|
123
98
|
Parameters
|
|
124
99
|
----------
|
|
125
100
|
encoder_h : int, default=512
|
{braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/biot.py
RENAMED
|
@@ -41,35 +41,6 @@ class BIOT(EEGModuleMixin, nn.Module):
|
|
|
41
41
|
linear layer that takes the output of the `BIOTEncoder` and outputs
|
|
42
42
|
the classification probabilities.
|
|
43
43
|
|
|
44
|
-
.. important::
|
|
45
|
-
**Pre-trained Weights Available**
|
|
46
|
-
|
|
47
|
-
This model has pre-trained weights available on the Hugging Face Hub.
|
|
48
|
-
You can load them using:
|
|
49
|
-
|
|
50
|
-
.. code-block:: python
|
|
51
|
-
|
|
52
|
-
from braindecode.models import BIOT
|
|
53
|
-
|
|
54
|
-
# Load the original pre-trained model from Hugging Face Hub
|
|
55
|
-
# For 16-channel models:
|
|
56
|
-
model = BIOT.from_pretrained("braindecode/biot-pretrained-prest-16chs")
|
|
57
|
-
|
|
58
|
-
# For 18-channel models:
|
|
59
|
-
model = BIOT.from_pretrained("braindecode/biot-pretrained-shhs-prest-18chs")
|
|
60
|
-
model = BIOT.from_pretrained("braindecode/biot-pretrained-six-datasets-18chs")
|
|
61
|
-
|
|
62
|
-
To push your own trained model to the Hub:
|
|
63
|
-
|
|
64
|
-
.. code-block:: python
|
|
65
|
-
|
|
66
|
-
# After training your model
|
|
67
|
-
model.push_to_hub(
|
|
68
|
-
repo_id="username/my-biot-model", commit_message="Upload trained BIOT model"
|
|
69
|
-
)
|
|
70
|
-
|
|
71
|
-
Requires installing ``braindecode[hug]`` for Hub integration.
|
|
72
|
-
|
|
73
44
|
.. versionadded:: 0.9
|
|
74
45
|
|
|
75
46
|
Parameters
|
{braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/config.py
RENAMED
|
@@ -151,12 +151,12 @@ def make_model_config(
|
|
|
151
151
|
and sfreq is not None
|
|
152
152
|
and input_window_seconds is not None
|
|
153
153
|
):
|
|
154
|
-
if n_times !=
|
|
154
|
+
if n_times != int(input_window_seconds * sfreq):
|
|
155
155
|
raise ValueError(
|
|
156
156
|
f"Provided {n_times=} does not match {input_window_seconds=} * {sfreq=}."
|
|
157
157
|
)
|
|
158
158
|
elif n_times is None and sfreq is not None and input_window_seconds is not None:
|
|
159
|
-
data["n_times"] =
|
|
159
|
+
data["n_times"] = int(input_window_seconds * sfreq)
|
|
160
160
|
elif sfreq is None and n_times is not None and input_window_seconds is not None:
|
|
161
161
|
data["sfreq"] = n_times / input_window_seconds
|
|
162
162
|
elif input_window_seconds is None and n_times is not None and sfreq is not None:
|