Braindecode 1.3.0.dev176481332__tar.gz → 1.3.0.dev176529508__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.
Files changed (145) hide show
  1. {braindecode-1.3.0.dev176481332/braindecode.egg-info → braindecode-1.3.0.dev176529508}/PKG-INFO +2 -1
  2. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/datasets/__init__.py +2 -2
  3. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/datasets/base.py +6 -2
  4. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/datasets/moabb.py +15 -5
  5. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/datautil/__init__.py +11 -1
  6. braindecode-1.3.0.dev176529508/braindecode/datautil/channel_utils.py +114 -0
  7. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/datautil/serialization.py +0 -1
  8. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/__init__.py +12 -1
  9. braindecode-1.3.0.dev176529508/braindecode/models/eegsym.py +917 -0
  10. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/fbcnet.py +3 -1
  11. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/fbmsnet.py +18 -6
  12. braindecode-1.3.0.dev176529508/braindecode/models/luna.py +836 -0
  13. braindecode-1.3.0.dev176529508/braindecode/models/medformer.py +758 -0
  14. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/summary.csv +3 -0
  15. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/util.py +86 -0
  16. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/modules/filter.py +0 -6
  17. braindecode-1.3.0.dev176529508/braindecode/preprocessing/__init__.py +271 -0
  18. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/preprocessing/eegprep_preprocess.py +134 -19
  19. braindecode-1.3.0.dev176529508/braindecode/preprocessing/mne_preprocess.py +240 -0
  20. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/preprocessing/preprocess.py +134 -39
  21. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/preprocessing/util.py +11 -0
  22. braindecode-1.3.0.dev176529508/braindecode/version.py +1 -0
  23. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508/braindecode.egg-info}/PKG-INFO +2 -1
  24. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode.egg-info/SOURCES.txt +4 -0
  25. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode.egg-info/requires.txt +1 -0
  26. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/api.rst +110 -18
  27. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/conf.py +27 -0
  28. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/whats_new.rst +11 -0
  29. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/pyproject.toml +1 -0
  30. braindecode-1.3.0.dev176481332/braindecode/preprocessing/__init__.py +0 -61
  31. braindecode-1.3.0.dev176481332/braindecode/preprocessing/mne_preprocess.py +0 -77
  32. braindecode-1.3.0.dev176481332/braindecode/version.py +0 -1
  33. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/LICENSE.txt +0 -0
  34. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/MANIFEST.in +0 -0
  35. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/NOTICE.txt +0 -0
  36. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/README.rst +0 -0
  37. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/__init__.py +0 -0
  38. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/augmentation/__init__.py +0 -0
  39. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/augmentation/base.py +0 -0
  40. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/augmentation/functional.py +0 -0
  41. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/augmentation/transforms.py +0 -0
  42. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/classifier.py +0 -0
  43. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/datasets/bbci.py +0 -0
  44. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/datasets/bcicomp.py +0 -0
  45. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/datasets/bids.py +0 -0
  46. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/datasets/experimental.py +0 -0
  47. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/datasets/mne.py +0 -0
  48. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/datasets/nmt.py +0 -0
  49. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/datasets/sleep_physio_challe_18.py +0 -0
  50. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/datasets/sleep_physionet.py +0 -0
  51. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/datasets/tuh.py +0 -0
  52. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/datasets/xy.py +0 -0
  53. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/datautil/util.py +0 -0
  54. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/eegneuralnet.py +0 -0
  55. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/functional/__init__.py +0 -0
  56. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/functional/functions.py +0 -0
  57. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/functional/initialization.py +0 -0
  58. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/atcnet.py +0 -0
  59. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/attentionbasenet.py +0 -0
  60. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/attn_sleep.py +0 -0
  61. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/base.py +0 -0
  62. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/bendr.py +0 -0
  63. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/biot.py +0 -0
  64. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/contrawr.py +0 -0
  65. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/ctnet.py +0 -0
  66. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/deep4.py +0 -0
  67. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/deepsleepnet.py +0 -0
  68. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/eegconformer.py +0 -0
  69. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/eeginception_erp.py +0 -0
  70. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/eeginception_mi.py +0 -0
  71. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/eegitnet.py +0 -0
  72. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/eegminer.py +0 -0
  73. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/eegnet.py +0 -0
  74. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/eegnex.py +0 -0
  75. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/eegsimpleconv.py +0 -0
  76. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/eegtcnet.py +0 -0
  77. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/fblightconvnet.py +0 -0
  78. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/hybrid.py +0 -0
  79. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/ifnet.py +0 -0
  80. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/labram.py +0 -0
  81. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/msvtnet.py +0 -0
  82. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/patchedtransformer.py +0 -0
  83. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/sccnet.py +0 -0
  84. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/shallow_fbcsp.py +0 -0
  85. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/signal_jepa.py +0 -0
  86. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/sinc_shallow.py +0 -0
  87. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
  88. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
  89. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/sparcnet.py +0 -0
  90. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/sstdpn.py +0 -0
  91. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/syncnet.py +0 -0
  92. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/tcn.py +0 -0
  93. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/tidnet.py +0 -0
  94. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/tsinception.py +0 -0
  95. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/models/usleep.py +0 -0
  96. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/modules/__init__.py +0 -0
  97. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/modules/activation.py +0 -0
  98. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/modules/attention.py +0 -0
  99. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/modules/blocks.py +0 -0
  100. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/modules/convolution.py +0 -0
  101. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/modules/layers.py +0 -0
  102. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/modules/linear.py +0 -0
  103. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/modules/parametrization.py +0 -0
  104. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/modules/stats.py +0 -0
  105. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/modules/util.py +0 -0
  106. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/modules/wrapper.py +0 -0
  107. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/preprocessing/windowers.py +0 -0
  108. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/regressor.py +0 -0
  109. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/samplers/__init__.py +0 -0
  110. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/samplers/base.py +0 -0
  111. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/samplers/ssl.py +0 -0
  112. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/training/__init__.py +0 -0
  113. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/training/callbacks.py +0 -0
  114. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/training/losses.py +0 -0
  115. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/training/scoring.py +0 -0
  116. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/util.py +0 -0
  117. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/visualization/__init__.py +0 -0
  118. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/visualization/confusion_matrices.py +0 -0
  119. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode/visualization/gradients.py +0 -0
  120. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode.egg-info/dependency_links.txt +0 -0
  121. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/braindecode.egg-info/top_level.txt +0 -0
  122. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/Makefile +0 -0
  123. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/_templates/autosummary/class.rst +0 -0
  124. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/_templates/autosummary/function.rst +0 -0
  125. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/cite.rst +0 -0
  126. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/help.rst +0 -0
  127. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/index.rst +0 -0
  128. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/install/install.rst +0 -0
  129. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/install/install_pip.rst +0 -0
  130. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/install/install_source.rst +0 -0
  131. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/models/categorization/attention.rst +0 -0
  132. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/models/categorization/channel.rst +0 -0
  133. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/models/categorization/convolution.rst +0 -0
  134. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/models/categorization/filterbank.rst +0 -0
  135. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/models/categorization/gnn.rst +0 -0
  136. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/models/categorization/interpretable.rst +0 -0
  137. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/models/categorization/lbm.rst +0 -0
  138. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/models/categorization/recurrent.rst +0 -0
  139. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/models/categorization/spd.rst +0 -0
  140. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/models/models.rst +0 -0
  141. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/models/models_categorization.rst +0 -0
  142. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/models/models_table.rst +0 -0
  143. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/models/models_visualization.rst +0 -0
  144. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/docs/sg_execution_times.rst +0 -0
  145. {braindecode-1.3.0.dev176481332 → braindecode-1.3.0.dev176529508}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: braindecode
3
- Version: 1.3.0.dev176481332
3
+ Version: 1.3.0.dev176529508
4
4
  Summary: Deep learning software to decode EEG, ECG or MEG signals
5
5
  Author-email: Robin Tibor Schirrmeister <robintibor@gmail.com>
6
6
  Maintainer-email: Alexandre Gramfort <agramfort@meta.com>, Bruno Aristimunha Pinto <b.aristimunha@gmail.com>, Robin Tibor Schirrmeister <robintibor@gmail.com>
@@ -38,6 +38,7 @@ Requires-Dist: wfdb
38
38
  Requires-Dist: h5py
39
39
  Requires-Dist: linear_attention_transformer
40
40
  Requires-Dist: docstring_inheritance
41
+ Requires-Dist: rotary_embedding_torch
41
42
  Provides-Extra: moabb
42
43
  Requires-Dist: moabb>=1.2.0; extra == "moabb"
43
44
  Provides-Extra: eegprep
@@ -12,7 +12,7 @@ from .base import (
12
12
  from .bcicomp import BCICompetitionIVDataset4
13
13
  from .bids import BIDSDataset, BIDSEpochsDataset
14
14
  from .mne import create_from_mne_epochs, create_from_mne_raw
15
- from .moabb import BNCI2014001, HGD, MOABBDataset
15
+ from .moabb import BNCI2014_001, HGD, MOABBDataset
16
16
  from .nmt import NMT
17
17
  from .sleep_physio_challe_18 import SleepPhysionetChallenge2018
18
18
  from .sleep_physionet import SleepPhysionet
@@ -29,7 +29,7 @@ __all__ = [
29
29
  "BIDSEpochsDataset",
30
30
  "MOABBDataset",
31
31
  "HGD",
32
- "BNCI2014001",
32
+ "BNCI2014_001",
33
33
  "create_from_mne_raw",
34
34
  "create_from_mne_epochs",
35
35
  "TUH",
@@ -19,7 +19,7 @@ import warnings
19
19
  from abc import abstractmethod
20
20
  from collections.abc import Callable
21
21
  from glob import glob
22
- from typing import Generic, Iterable, no_type_check
22
+ from typing import Any, Generic, Iterable, no_type_check
23
23
 
24
24
  import mne.io
25
25
  import numpy as np
@@ -129,6 +129,7 @@ class RawDataset(RecordDataset):
129
129
 
130
130
  # save target name for load/save later
131
131
  self.target_name = self._target_name(target_name)
132
+ self.raw_preproc_kwargs: list[dict[str, Any]] = []
132
133
 
133
134
  def __getitem__(self, index):
134
135
  X = self.raw[:, index][0]
@@ -235,6 +236,7 @@ class EEGWindowsDataset(RecordDataset):
235
236
  ].to_numpy()
236
237
  if self.targets_from == "metadata":
237
238
  self.y = metadata.loc[:, "target"].to_list()
239
+ self.raw_preproc_kwargs: list[dict[str, Any]] = []
238
240
 
239
241
  def __getitem__(self, index: int):
240
242
  """Get a window and its target.
@@ -334,6 +336,8 @@ class WindowsDataset(RecordDataset):
334
336
  ].to_numpy()
335
337
  if self.targets_from == "metadata":
336
338
  self.y = metadata.loc[:, "target"].to_list()
339
+ self.raw_preproc_kwargs: list[dict[str, Any]] = []
340
+ self.window_preproc_kwargs: list[dict[str, Any]] = []
337
341
 
338
342
  def __getitem__(self, index: int):
339
343
  """Get a window and its target.
@@ -794,7 +798,7 @@ class BaseConcatDataset(ConcatDataset, Generic[T]):
794
798
  kwargs = getattr(ds, kwargs_name)
795
799
  if kwargs is not None:
796
800
  with open(kwargs_file_path, "w") as f:
797
- json.dump(kwargs, f)
801
+ json.dump(kwargs, f, indent=2)
798
802
 
799
803
  @staticmethod
800
804
  def _save_target_name(sub_dir, ds):
@@ -15,6 +15,7 @@ from typing import Any
15
15
 
16
16
  import mne
17
17
  import pandas as pd
18
+ from mne.utils import deprecated
18
19
 
19
20
  from braindecode.util import _update_moabb_docstring
20
21
 
@@ -169,8 +170,8 @@ class MOABBDataset(BaseConcatDataset):
169
170
  super().__init__(all_base_ds)
170
171
 
171
172
 
172
- class BNCI2014001(MOABBDataset):
173
- doc = """See moabb.datasets.bnci.BNCI2014001
173
+ class BNCI2014_001(MOABBDataset):
174
+ doc = """See moabb.datasets.bnci.BNCI2014_001
174
175
 
175
176
  Parameters
176
177
  ----------
@@ -179,14 +180,14 @@ class BNCI2014001(MOABBDataset):
179
180
  subjects is fetched.
180
181
  """
181
182
  try:
182
- from moabb.datasets import BNCI2014001
183
+ from moabb.datasets import BNCI2014_001
183
184
 
184
- __doc__ = _update_moabb_docstring(BNCI2014001, doc)
185
+ __doc__ = _update_moabb_docstring(BNCI2014_001, doc)
185
186
  except ModuleNotFoundError:
186
187
  pass # keep moabb soft dependency, otherwise crash on loading of datasets.__init__.py
187
188
 
188
189
  def __init__(self, subject_ids):
189
- super().__init__("BNCI2014001", subject_ids=subject_ids)
190
+ super().__init__("BNCI2014_001", subject_ids=subject_ids)
190
191
 
191
192
 
192
193
  class HGD(MOABBDataset):
@@ -207,3 +208,12 @@ class HGD(MOABBDataset):
207
208
 
208
209
  def __init__(self, subject_ids):
209
210
  super().__init__("Schirrmeister2017", subject_ids=subject_ids)
211
+
212
+
213
+ @deprecated(
214
+ "`BNCI2014001` was renamed to `BNCI2014_001` in v1.13; this alias will be removed in v1.14."
215
+ )
216
+ class BNCI2014001(BNCI2014_001):
217
+ """Deprecated alias for BNCI2014001."""
218
+
219
+ pass
@@ -2,6 +2,10 @@
2
2
  Utilities for data manipulation.
3
3
  """
4
4
 
5
+ from .channel_utils import (
6
+ division_channels_idx,
7
+ match_hemisphere_chans,
8
+ )
5
9
  from .serialization import (
6
10
  _check_save_dir_empty,
7
11
  load_concat_dataset,
@@ -49,4 +53,10 @@ def __getattr__(name):
49
53
  raise AttributeError("No possible import named " + name)
50
54
 
51
55
 
52
- __all__ = ["load_concat_dataset", "save_concat_dataset", "_check_save_dir_empty"]
56
+ __all__ = [
57
+ "load_concat_dataset",
58
+ "save_concat_dataset",
59
+ "_check_save_dir_empty",
60
+ "match_hemisphere_chans",
61
+ "division_channels_idx",
62
+ ]
@@ -0,0 +1,114 @@
1
+ """
2
+ Utilities for EEG channel manipulation and selection.
3
+
4
+ This module provides functions for dividing and matching EEG channels,
5
+ particularly for hemisphere-aware processing.
6
+ """
7
+
8
+ import re
9
+ from re import search
10
+
11
+
12
+ def match_hemisphere_chans(left_chs, right_chs):
13
+ """
14
+ Match channels of the left and right hemispheres based on their names.
15
+
16
+ This function pairs channels from the left and right hemispheres by matching
17
+ their numeric identifiers. For a left channel with number N, it finds the
18
+ corresponding right channel with number N+1.
19
+
20
+ Parameters
21
+ ----------
22
+ left_chs : list of str
23
+ A list of channel names from the left hemisphere.
24
+ right_chs : list of str
25
+ A list of channel names from the right hemisphere.
26
+
27
+ Returns
28
+ -------
29
+ list of tuples
30
+ List of tuples with matched channel names from the left and right hemispheres.
31
+ Each tuple contains (left_channel, right_channel).
32
+
33
+ Raises
34
+ ------
35
+ ValueError
36
+ If the left and right channels do not match in length.
37
+ ValueError
38
+ If a channel name does not contain a number.
39
+ ValueError
40
+ If no matching right hemisphere channel is found for a left channel.
41
+
42
+ Examples
43
+ --------
44
+ >>> left = ['C3', 'F3']
45
+ >>> right = ['C4', 'F4']
46
+ >>> match_hemisphere_chans(left, right)
47
+ [('C3', 'C4'), ('F3', 'F4')]
48
+ """
49
+ if len(left_chs) != len(right_chs):
50
+ raise ValueError("Left and right channels do not match.")
51
+ right_chs = list(right_chs)
52
+ regexp = r"\d+"
53
+ out = []
54
+ for left in left_chs:
55
+ match = re.search(regexp, left)
56
+ if match is None:
57
+ raise ValueError(f"Channel '{left}' does not contain a number.")
58
+ chan_idx = 1 + int(match.group())
59
+ target_r = re.sub(regexp, str(chan_idx), left)
60
+ for right in right_chs:
61
+ if right == target_r:
62
+ out.append((left, right))
63
+ right_chs.remove(right)
64
+ break
65
+ else:
66
+ raise ValueError(
67
+ f"Found no right hemisphere matching channel for '{left}'."
68
+ )
69
+ return out
70
+
71
+
72
+ def division_channels_idx(ch_names):
73
+ """
74
+ Divide EEG channel names into left, right, and middle based on numbering.
75
+
76
+ This function categorizes channels by their numeric suffix:
77
+ - Odd-numbered channels → left hemisphere
78
+ - Even-numbered channels → right hemisphere
79
+ - Channels without numbers → middle/midline
80
+
81
+ Parameters
82
+ ----------
83
+ ch_names : list of str
84
+ A list of EEG channel names to be divided based on their numbering.
85
+
86
+ Returns
87
+ -------
88
+ tuple of lists
89
+ Three lists containing the channel names:
90
+ - left: Odd-numbered channels (e.g., C3, F3, P3)
91
+ - right: Even-numbered channels (e.g., C4, F4, P4)
92
+ - middle: Channels without numbers (e.g., Cz, Fz, Pz)
93
+
94
+ Notes
95
+ -----
96
+ The function identifies channel numbers by searching for numeric characters
97
+ in the channel names. Standard 10-20 system EEG channel naming conventions
98
+ use odd numbers for left hemisphere and even numbers for right hemisphere.
99
+
100
+ Examples
101
+ --------
102
+ >>> channels = ['FP1', 'FP2', 'O1', 'O2', 'FZ']
103
+ >>> division_channels_idx(channels)
104
+ (['FP1', 'O1'], ['FP2', 'O2'], ['FZ'])
105
+ """
106
+ left, right, middle = [], [], []
107
+ for ch in ch_names:
108
+ number = search(r"\d+", ch)
109
+ if number is not None:
110
+ (left if int(number[0]) % 2 else right).append(ch)
111
+ else:
112
+ middle.append(ch)
113
+
114
+ return left, right, middle
@@ -302,7 +302,6 @@ def _load_kwargs_json(kwargs_name, sub_dir):
302
302
  kwargs_file_path = os.path.join(sub_dir, kwargs_file_name)
303
303
  if os.path.exists(kwargs_file_path):
304
304
  kwargs = json.load(open(kwargs_file_path, "r"))
305
- kwargs = [tuple(kwarg) for kwarg in kwargs]
306
305
  return kwargs
307
306
 
308
307
 
@@ -20,6 +20,7 @@ from .eegminer import EEGMiner
20
20
  from .eegnet import EEGNet, EEGNetv4
21
21
  from .eegnex import EEGNeX
22
22
  from .eegsimpleconv import EEGSimpleConv
23
+ from .eegsym import EEGSym
23
24
  from .eegtcnet import EEGTCNet
24
25
  from .fbcnet import FBCNet
25
26
  from .fblightconvnet import FBLightConvNet
@@ -27,6 +28,8 @@ from .fbmsnet import FBMSNet
27
28
  from .hybrid import HybridNet
28
29
  from .ifnet import IFNet
29
30
  from .labram import Labram
31
+ from .luna import LUNA
32
+ from .medformer import MEDFormer
30
33
  from .msvtnet import MSVTNet
31
34
  from .patchedtransformer import PBT
32
35
  from .sccnet import SCCNet
@@ -47,7 +50,11 @@ from .tcn import BDTCN, TCN
47
50
  from .tidnet import TIDNet
48
51
  from .tsinception import TSception
49
52
  from .usleep import USleep
50
- from .util import _init_models_dict, models_mandatory_parameters
53
+ from .util import (
54
+ _init_models_dict,
55
+ extract_channel_locations_from_chs_info,
56
+ models_mandatory_parameters,
57
+ )
51
58
 
52
59
  # Call this last in order to make sure the dataset list is populated with
53
60
  # the models imported in this file.
@@ -72,6 +79,7 @@ __all__ = [
72
79
  "EEGNet",
73
80
  "EEGNetv4",
74
81
  "EEGNeX",
82
+ "EEGSym",
75
83
  "EEGSimpleConv",
76
84
  "EEGTCNet",
77
85
  "FBCNet",
@@ -80,6 +88,9 @@ __all__ = [
80
88
  "HybridNet",
81
89
  "IFNet",
82
90
  "Labram",
91
+ "LUNA",
92
+ "extract_channel_locations_from_chs_info",
93
+ "MEDFormer",
83
94
  "MSVTNet",
84
95
  "PBT",
85
96
  "SCCNet",