Braindecode 1.3.0.dev172913106__tar.gz → 1.3.0.dev173577785__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 (141) hide show
  1. {braindecode-1.3.0.dev172913106/braindecode.egg-info → braindecode-1.3.0.dev173577785}/PKG-INFO +2 -6
  2. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/augmentation/base.py +1 -1
  3. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/datasets/__init__.py +2 -10
  4. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/datasets/base.py +151 -115
  5. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/datasets/bcicomp.py +4 -4
  6. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/datasets/bids.py +3 -3
  7. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/datasets/experimental.py +2 -2
  8. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/datasets/mne.py +5 -3
  9. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/datasets/moabb.py +2 -2
  10. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/datasets/nmt.py +2 -2
  11. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/datasets/sleep_physio_challe_18.py +2 -2
  12. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/datasets/sleep_physionet.py +2 -2
  13. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/datasets/tuh.py +2 -2
  14. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/datasets/xy.py +2 -2
  15. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/datautil/__init__.py +1 -11
  16. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/datautil/serialization.py +7 -7
  17. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/eegneuralnet.py +0 -2
  18. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/functional/functions.py +2 -6
  19. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/functional/initialization.py +3 -2
  20. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/__init__.py +0 -6
  21. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/atcnet.py +28 -27
  22. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/attentionbasenet.py +32 -39
  23. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/attn_sleep.py +0 -2
  24. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/base.py +2 -280
  25. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/biot.py +0 -2
  26. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/contrawr.py +0 -2
  27. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/ctnet.py +3 -8
  28. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/deepsleepnet.py +19 -28
  29. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/eegconformer.py +2 -2
  30. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/eeginception_erp.py +25 -31
  31. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/eegitnet.py +0 -2
  32. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/eegminer.py +0 -2
  33. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/eegnet.py +1 -1
  34. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/eegtcnet.py +0 -2
  35. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/fbcnet.py +1 -5
  36. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/fblightconvnet.py +0 -2
  37. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/fbmsnet.py +6 -20
  38. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/ifnet.py +0 -2
  39. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/labram.py +87 -193
  40. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/msvtnet.py +0 -2
  41. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/signal_jepa.py +27 -111
  42. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/sinc_shallow.py +9 -12
  43. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/sstdpn.py +11 -11
  44. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/summary.csv +0 -3
  45. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/syncnet.py +0 -2
  46. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/tcn.py +0 -2
  47. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/usleep.py +21 -26
  48. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/util.py +0 -3
  49. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/modules/attention.py +10 -10
  50. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/modules/blocks.py +3 -3
  51. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/modules/filter.py +9 -2
  52. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/modules/layers.py +17 -18
  53. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/preprocessing/__init__.py +0 -24
  54. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/preprocessing/preprocess.py +12 -12
  55. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/preprocessing/windowers.py +20 -26
  56. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/samplers/base.py +8 -8
  57. braindecode-1.3.0.dev173577785/braindecode/version.py +1 -0
  58. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785/braindecode.egg-info}/PKG-INFO +2 -6
  59. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode.egg-info/SOURCES.txt +0 -6
  60. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode.egg-info/requires.txt +1 -7
  61. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/api.rst +10 -38
  62. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/index.rst +1 -1
  63. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/models/categorization/attention.rst +2 -2
  64. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/models/categorization/channel.rst +2 -2
  65. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/models/categorization/convolution.rst +2 -2
  66. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/models/categorization/filterbank.rst +3 -3
  67. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/models/categorization/gnn.rst +6 -3
  68. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/models/categorization/interpretable.rst +3 -3
  69. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/models/categorization/lbm.rst +2 -2
  70. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/models/categorization/recurrent.rst +3 -3
  71. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/models/categorization/spd.rst +3 -3
  72. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/whats_new.rst +1 -18
  73. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/pyproject.toml +1 -3
  74. braindecode-1.3.0.dev172913106/braindecode/datautil/channel_utils.py +0 -114
  75. braindecode-1.3.0.dev172913106/braindecode/models/bendr.py +0 -469
  76. braindecode-1.3.0.dev172913106/braindecode/models/eegsym.py +0 -917
  77. braindecode-1.3.0.dev172913106/braindecode/models/patchedtransformer.py +0 -640
  78. braindecode-1.3.0.dev172913106/braindecode/preprocessing/eegprep_preprocess.py +0 -1202
  79. braindecode-1.3.0.dev172913106/braindecode/preprocessing/util.py +0 -166
  80. braindecode-1.3.0.dev172913106/braindecode/version.py +0 -1
  81. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/LICENSE.txt +0 -0
  82. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/MANIFEST.in +0 -0
  83. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/NOTICE.txt +0 -0
  84. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/README.rst +0 -0
  85. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/__init__.py +0 -0
  86. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/augmentation/__init__.py +0 -0
  87. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/augmentation/functional.py +0 -0
  88. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/augmentation/transforms.py +0 -0
  89. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/classifier.py +0 -0
  90. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/datasets/bbci.py +0 -0
  91. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/datautil/util.py +0 -0
  92. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/functional/__init__.py +0 -0
  93. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/deep4.py +0 -0
  94. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/eeginception_mi.py +0 -0
  95. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/eegnex.py +0 -0
  96. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/eegsimpleconv.py +0 -0
  97. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/hybrid.py +0 -0
  98. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/sccnet.py +0 -0
  99. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/shallow_fbcsp.py +0 -0
  100. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
  101. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
  102. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/sparcnet.py +0 -0
  103. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/tidnet.py +0 -0
  104. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/models/tsinception.py +0 -0
  105. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/modules/__init__.py +0 -0
  106. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/modules/activation.py +0 -0
  107. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/modules/convolution.py +0 -0
  108. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/modules/linear.py +0 -0
  109. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/modules/parametrization.py +0 -0
  110. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/modules/stats.py +0 -0
  111. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/modules/util.py +0 -0
  112. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/modules/wrapper.py +0 -0
  113. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/preprocessing/mne_preprocess.py +0 -0
  114. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/regressor.py +0 -0
  115. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/samplers/__init__.py +0 -0
  116. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/samplers/ssl.py +0 -0
  117. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/training/__init__.py +0 -0
  118. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/training/callbacks.py +0 -0
  119. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/training/losses.py +0 -0
  120. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/training/scoring.py +0 -0
  121. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/util.py +0 -0
  122. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/visualization/__init__.py +0 -0
  123. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/visualization/confusion_matrices.py +0 -0
  124. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode/visualization/gradients.py +0 -0
  125. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode.egg-info/dependency_links.txt +0 -0
  126. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/braindecode.egg-info/top_level.txt +0 -0
  127. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/Makefile +0 -0
  128. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/_templates/autosummary/class.rst +0 -0
  129. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/_templates/autosummary/function.rst +0 -0
  130. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/cite.rst +0 -0
  131. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/conf.py +0 -0
  132. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/help.rst +0 -0
  133. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/install/install.rst +0 -0
  134. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/install/install_pip.rst +0 -0
  135. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/install/install_source.rst +0 -0
  136. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/models/models.rst +0 -0
  137. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/models/models_categorization.rst +0 -0
  138. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/models/models_table.rst +0 -0
  139. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/models/models_visualization.rst +0 -0
  140. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/docs/sg_execution_times.rst +0 -0
  141. {braindecode-1.3.0.dev172913106 → braindecode-1.3.0.dev173577785}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: braindecode
3
- Version: 1.3.0.dev172913106
3
+ Version: 1.3.0.dev173577785
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>
@@ -40,10 +40,6 @@ Requires-Dist: linear_attention_transformer
40
40
  Requires-Dist: docstring_inheritance
41
41
  Provides-Extra: moabb
42
42
  Requires-Dist: moabb>=1.2.0; extra == "moabb"
43
- Provides-Extra: eegprep
44
- Requires-Dist: eegprep[eeglabio]>=0.1.1; extra == "eegprep"
45
- Provides-Extra: hug
46
- Requires-Dist: huggingface_hub[torch]>=0.20.0; extra == "hug"
47
43
  Provides-Extra: tests
48
44
  Requires-Dist: pytest; extra == "tests"
49
45
  Requires-Dist: pytest-cov; extra == "tests"
@@ -69,7 +65,7 @@ Requires-Dist: pre-commit; extra == "docs"
69
65
  Requires-Dist: openneuro-py; extra == "docs"
70
66
  Requires-Dist: plotly; extra == "docs"
71
67
  Provides-Extra: all
72
- Requires-Dist: braindecode[docs,eegprep,hug,moabb,tests]; extra == "all"
68
+ Requires-Dist: braindecode[docs,moabb,tests]; extra == "all"
73
69
  Dynamic: license-file
74
70
 
75
71
  .. image:: https://badges.gitter.im/braindecodechat/community.svg
@@ -189,7 +189,7 @@ class AugmentedDataLoader(DataLoader):
189
189
 
190
190
  Parameters
191
191
  ----------
192
- dataset : RecordDataset
192
+ dataset : BaseDataset
193
193
  The dataset containing the signals.
194
194
  transforms : list | Transform, optional
195
195
  Transform or sequence of Transform to be applied to each batch.
@@ -2,13 +2,7 @@
2
2
  Loader code for some datasets.
3
3
  """
4
4
 
5
- from .base import (
6
- BaseConcatDataset,
7
- EEGWindowsDataset,
8
- RawDataset,
9
- RecordDataset,
10
- WindowsDataset,
11
- )
5
+ from .base import BaseConcatDataset, BaseDataset, WindowsDataset
12
6
  from .bcicomp import BCICompetitionIVDataset4
13
7
  from .bids import BIDSDataset, BIDSEpochsDataset
14
8
  from .mne import create_from_mne_epochs, create_from_mne_raw
@@ -21,9 +15,7 @@ from .xy import create_from_X_y
21
15
 
22
16
  __all__ = [
23
17
  "WindowsDataset",
24
- "EEGWindowsDataset",
25
- "RecordDataset",
26
- "RawDataset",
18
+ "BaseDataset",
27
19
  "BaseConcatDataset",
28
20
  "BIDSDataset",
29
21
  "BIDSEpochsDataset",
@@ -16,17 +16,14 @@ import json
16
16
  import os
17
17
  import shutil
18
18
  import warnings
19
- from abc import abstractmethod
20
19
  from collections.abc import Callable
21
20
  from glob import glob
22
- from typing import Generic, Iterable, no_type_check
21
+ from typing import Iterable, no_type_check
23
22
 
24
23
  import mne.io
25
24
  import numpy as np
26
25
  import pandas as pd
27
- from mne.utils.docs import deprecated
28
26
  from torch.utils.data import ConcatDataset, Dataset
29
- from typing_extensions import TypeVar
30
27
 
31
28
 
32
29
  def _create_description(description) -> pd.Series:
@@ -40,64 +37,7 @@ def _create_description(description) -> pd.Series:
40
37
  return description
41
38
 
42
39
 
43
- class RecordDataset(Dataset[tuple[np.ndarray, int | str, tuple[int, int, int]]]):
44
- def __init__(
45
- self,
46
- description: dict | pd.Series | None = None,
47
- transform: Callable | None = None,
48
- ):
49
- self._description = _create_description(description)
50
- self.transform = transform
51
-
52
- @abstractmethod
53
- def __len__(self) -> int:
54
- pass
55
-
56
- @property
57
- def description(self) -> pd.Series:
58
- return self._description
59
-
60
- def set_description(self, description: dict | pd.Series, overwrite: bool = False):
61
- """Update (add or overwrite) the dataset description.
62
-
63
- Parameters
64
- ----------
65
- description: dict | pd.Series
66
- Description in the form key: value.
67
- overwrite: bool
68
- Has to be True if a key in description already exists in the
69
- dataset description.
70
- """
71
- description = _create_description(description)
72
- if self.description is None:
73
- self._description = description
74
- else:
75
- for key, value in description.items():
76
- # if the key is already in the existing description, drop it
77
- if key in self._description:
78
- assert overwrite, (
79
- f"'{key}' already in description. Please "
80
- f"rename or set overwrite to True."
81
- )
82
- self._description.pop(key)
83
- self._description = pd.concat([self.description, description])
84
-
85
- @property
86
- def transform(self) -> Callable | None:
87
- return self._transform
88
-
89
- @transform.setter
90
- def transform(self, value: Callable | None):
91
- if value is not None and not callable(value):
92
- raise ValueError("Transform needs to be a callable.")
93
- self._transform = value
94
-
95
-
96
- # Type of the datasets contained in BaseConcatDataset
97
- T = TypeVar("T", bound=RecordDataset)
98
-
99
-
100
- class RawDataset(RecordDataset):
40
+ class BaseDataset(Dataset):
101
41
  """Returns samples from an mne.io.Raw object along with a target.
102
42
 
103
43
  Dataset which serves samples from an mne.io.Raw object along with a target.
@@ -124,8 +64,9 @@ class RawDataset(RecordDataset):
124
64
  target_name: str | tuple[str, ...] | None = None,
125
65
  transform: Callable | None = None,
126
66
  ):
127
- super().__init__(description, transform)
128
67
  self.raw = raw
68
+ self._description = _create_description(description)
69
+ self.transform = transform
129
70
 
130
71
  # save target name for load/save later
131
72
  self.target_name = self._target_name(target_name)
@@ -144,6 +85,45 @@ class RawDataset(RecordDataset):
144
85
  def __len__(self):
145
86
  return len(self.raw)
146
87
 
88
+ @property
89
+ def transform(self):
90
+ return self._transform
91
+
92
+ @transform.setter
93
+ def transform(self, value):
94
+ if value is not None and not callable(value):
95
+ raise ValueError("Transform needs to be a callable.")
96
+ self._transform = value
97
+
98
+ @property
99
+ def description(self) -> pd.Series:
100
+ return self._description
101
+
102
+ def set_description(self, description: dict | pd.Series, overwrite: bool = False):
103
+ """Update (add or overwrite) the dataset description.
104
+
105
+ Parameters
106
+ ----------
107
+ description: dict | pd.Series
108
+ Description in the form key: value.
109
+ overwrite: bool
110
+ Has to be True if a key in description already exists in the
111
+ dataset description.
112
+ """
113
+ description = _create_description(description)
114
+ for key, value in description.items():
115
+ # if the key is already in the existing description, drop it
116
+ if self._description is not None and key in self._description:
117
+ assert overwrite, (
118
+ f"'{key}' already in description. Please "
119
+ f"rename or set overwrite to True."
120
+ )
121
+ self._description.pop(key)
122
+ if self._description is None:
123
+ self._description = description
124
+ else:
125
+ self._description = pd.concat([self.description, description])
126
+
147
127
  def _target_name(self, target_name):
148
128
  if target_name is not None and not isinstance(target_name, (str, tuple, list)):
149
129
  raise ValueError("target_name has to be None, str, tuple or list")
@@ -170,17 +150,7 @@ class RawDataset(RecordDataset):
170
150
  return target_name if len(target_name) > 1 else target_name[0]
171
151
 
172
152
 
173
- @deprecated(
174
- "The BaseDataset class is deprecated. "
175
- "If you want to instantiate a dataset containing raws, use RawDataset instead. "
176
- "If you want to type a Braindecode dataset (i.e. RawDataset|EEGWindowsDataset|WindowsDataset), "
177
- "use the RecordDataset class instead."
178
- )
179
- class BaseDataset(RawDataset):
180
- pass
181
-
182
-
183
- class EEGWindowsDataset(RecordDataset):
153
+ class EEGWindowsDataset(BaseDataset):
184
154
  """Returns windows from an mne.Raw object, its window indices, along with a target.
185
155
 
186
156
  Dataset which serves windows from an mne.Epochs object along with their
@@ -191,12 +161,12 @@ class EEGWindowsDataset(RecordDataset):
191
161
  required to serve information about the windowing (e.g., useful for cropped
192
162
  training).
193
163
  See `braindecode.datautil.windowers` to directly create a `WindowsDataset`
194
- from a `RawDataset` object.
164
+ from a `BaseDataset` object.
195
165
 
196
166
  Parameters
197
167
  ----------
198
168
  windows : mne.Raw or mne.Epochs (Epochs is outdated)
199
- Windows obtained through the application of a windower to a ``RawDataset``
169
+ Windows obtained through the application of a windower to a BaseDataset
200
170
  (see `braindecode.datautil.windowers`).
201
171
  description : dict | pandas.Series | None
202
172
  Holds additional info about the windows.
@@ -215,17 +185,18 @@ class EEGWindowsDataset(RecordDataset):
215
185
 
216
186
  def __init__(
217
187
  self,
218
- raw: mne.io.BaseRaw,
188
+ raw: mne.io.BaseRaw | mne.BaseEpochs,
219
189
  metadata: pd.DataFrame,
220
190
  description: dict | pd.Series | None = None,
221
191
  transform: Callable | None = None,
222
192
  targets_from: str = "metadata",
223
193
  last_target_only: bool = True,
224
194
  ):
225
- super().__init__(description, transform)
226
195
  self.raw = raw
227
196
  self.metadata = metadata
197
+ self._description = _create_description(description)
228
198
 
199
+ self.transform = transform
229
200
  self.last_target_only = last_target_only
230
201
  if targets_from not in ("metadata", "channels"):
231
202
  raise ValueError("Wrong value for parameter `targets_from`.")
@@ -284,8 +255,44 @@ class EEGWindowsDataset(RecordDataset):
284
255
  def __len__(self):
285
256
  return len(self.crop_inds)
286
257
 
258
+ @property
259
+ def transform(self):
260
+ return self._transform
261
+
262
+ @transform.setter
263
+ def transform(self, value):
264
+ if value is not None and not callable(value):
265
+ raise ValueError("Transform needs to be a callable.")
266
+ self._transform = value
267
+
268
+ @property
269
+ def description(self) -> pd.Series:
270
+ return self._description
271
+
272
+ def set_description(self, description: dict | pd.Series, overwrite: bool = False):
273
+ """Update (add or overwrite) the dataset description.
274
+
275
+ Parameters
276
+ ----------
277
+ description: dict | pd.Series
278
+ Description in the form key: value.
279
+ overwrite: bool
280
+ Has to be True if a key in description already exists in the
281
+ dataset description.
282
+ """
283
+ description = _create_description(description)
284
+ for key, value in description.items():
285
+ # if they key is already in the existing description, drop it
286
+ if key in self._description:
287
+ assert overwrite, (
288
+ f"'{key}' already in description. Please "
289
+ f"rename or set overwrite to True."
290
+ )
291
+ self._description.pop(key)
292
+ self._description = pd.concat([self.description, description])
287
293
 
288
- class WindowsDataset(RecordDataset):
294
+
295
+ class WindowsDataset(BaseDataset):
289
296
  """Returns windows from an mne.Epochs object along with a target.
290
297
 
291
298
  Dataset which serves windows from an mne.Epochs object along with their
@@ -296,12 +303,12 @@ class WindowsDataset(RecordDataset):
296
303
  required to serve information about the windowing (e.g., useful for cropped
297
304
  training).
298
305
  See `braindecode.datautil.windowers` to directly create a `WindowsDataset`
299
- from a ``RawDataset`` object.
306
+ from a `BaseDataset` object.
300
307
 
301
308
  Parameters
302
309
  ----------
303
310
  windows : mne.Epochs
304
- Windows obtained through the application of a windower to a RawDataset
311
+ Windows obtained through the application of a windower to a BaseDataset
305
312
  (see `braindecode.datautil.windowers`).
306
313
  description : dict | pandas.Series | None
307
314
  Holds additional info about the windows.
@@ -320,20 +327,19 @@ class WindowsDataset(RecordDataset):
320
327
  targets_from: str = "metadata",
321
328
  last_target_only: bool = True,
322
329
  ):
323
- super().__init__(description, transform)
324
330
  self.windows = windows
331
+ self._description = _create_description(description)
332
+ self.transform = transform
325
333
  self.last_target_only = last_target_only
326
334
  if targets_from not in ("metadata", "channels"):
327
335
  raise ValueError("Wrong value for parameter `targets_from`.")
328
336
  self.targets_from = targets_from
329
337
 
330
- metadata = self.windows.metadata
331
- assert metadata is not None, "WindowsDataset requires windows with metadata."
332
- self.crop_inds = metadata.loc[
338
+ self.crop_inds = self.windows.metadata.loc[
333
339
  :, ["i_window_in_trial", "i_start_in_trial", "i_stop_in_trial"]
334
340
  ].to_numpy()
335
341
  if self.targets_from == "metadata":
336
- self.y = metadata.loc[:, "target"].to_list()
342
+ self.y = self.windows.metadata.loc[:, "target"].to_list()
337
343
 
338
344
  def __getitem__(self, index: int):
339
345
  """Get a window and its target.
@@ -373,8 +379,44 @@ class WindowsDataset(RecordDataset):
373
379
  def __len__(self) -> int:
374
380
  return len(self.windows.events)
375
381
 
382
+ @property
383
+ def transform(self):
384
+ return self._transform
385
+
386
+ @transform.setter
387
+ def transform(self, value):
388
+ if value is not None and not callable(value):
389
+ raise ValueError("Transform needs to be a callable.")
390
+ self._transform = value
376
391
 
377
- class BaseConcatDataset(ConcatDataset, Generic[T]):
392
+ @property
393
+ def description(self) -> pd.Series:
394
+ return self._description
395
+
396
+ def set_description(self, description: dict | pd.Series, overwrite: bool = False):
397
+ """Update (add or overwrite) the dataset description.
398
+
399
+ Parameters
400
+ ----------
401
+ description: dict | pd.Series
402
+ Description in the form key: value.
403
+ overwrite: bool
404
+ Has to be True if a key in description already exists in the
405
+ dataset description.
406
+ """
407
+ description = _create_description(description)
408
+ for key, value in description.items():
409
+ # if they key is already in the existing description, drop it
410
+ if key in self._description:
411
+ assert overwrite, (
412
+ f"'{key}' already in description. Please "
413
+ f"rename or set overwrite to True."
414
+ )
415
+ self._description.pop(key)
416
+ self._description = pd.concat([self.description, description])
417
+
418
+
419
+ class BaseConcatDataset(ConcatDataset):
378
420
  """A base class for concatenated datasets.
379
421
 
380
422
  Holds either mne.Raw or mne.Epoch in self.datasets and has
@@ -383,27 +425,22 @@ class BaseConcatDataset(ConcatDataset, Generic[T]):
383
425
  Parameters
384
426
  ----------
385
427
  list_of_ds : list
386
- list of RecordDataset
428
+ list of BaseDataset, BaseConcatDataset or WindowsDataset
387
429
  target_transform : callable | None
388
430
  Optional function to call on targets before returning them.
389
431
 
390
432
  """
391
433
 
392
- datasets: list[T]
393
-
394
434
  def __init__(
395
435
  self,
396
- list_of_ds: list[T | BaseConcatDataset[T]],
436
+ list_of_ds: list[BaseDataset | BaseConcatDataset | WindowsDataset]
437
+ | None = None,
397
438
  target_transform: Callable | None = None,
398
439
  ):
399
440
  # if we get a list of BaseConcatDataset, get all the individual datasets
400
- flattened_list_of_ds: list[T] = []
401
- for ds in list_of_ds:
402
- if isinstance(ds, BaseConcatDataset):
403
- flattened_list_of_ds.extend(ds.datasets)
404
- else:
405
- flattened_list_of_ds.append(ds)
406
- super().__init__(flattened_list_of_ds)
441
+ if list_of_ds and isinstance(list_of_ds[0], BaseConcatDataset):
442
+ list_of_ds = [d for ds in list_of_ds for d in ds.datasets]
443
+ super().__init__(list_of_ds)
407
444
 
408
445
  self.target_transform = target_transform
409
446
 
@@ -666,23 +703,22 @@ class BaseConcatDataset(ConcatDataset, Generic[T]):
666
703
  ds.set_description({key: value_}, overwrite=overwrite)
667
704
 
668
705
  def save(self, path: str, overwrite: bool = False, offset: int = 0):
669
- """Save datasets to files by creating one subdirectory for each dataset::
670
-
671
- path/
672
- 0/
673
- 0-raw.fif | 0-epo.fif
674
- description.json
675
- raw_preproc_kwargs.json (if raws were preprocessed)
676
- window_kwargs.json (if this is a windowed dataset)
677
- window_preproc_kwargs.json (if windows were preprocessed)
678
- target_name.json (if target_name is not None and dataset is raw)
679
- 1/
680
- 1-raw.fif | 1-epo.fif
681
- description.json
682
- raw_preproc_kwargs.json (if raws were preprocessed)
683
- window_kwargs.json (if this is a windowed dataset)
684
- window_preproc_kwargs.json (if windows were preprocessed)
685
- target_name.json (if target_name is not None and dataset is raw)
706
+ """Save datasets to files by creating one subdirectory for each dataset:
707
+ path/
708
+ 0/
709
+ 0-raw.fif | 0-epo.fif
710
+ description.json
711
+ raw_preproc_kwargs.json (if raws were preprocessed)
712
+ window_kwargs.json (if this is a windowed dataset)
713
+ window_preproc_kwargs.json (if windows were preprocessed)
714
+ target_name.json (if target_name is not None and dataset is raw)
715
+ 1/
716
+ 1-raw.fif | 1-epo.fif
717
+ description.json
718
+ raw_preproc_kwargs.json (if raws were preprocessed)
719
+ window_kwargs.json (if this is a windowed dataset)
720
+ window_preproc_kwargs.json (if windows were preprocessed)
721
+ target_name.json (if target_name is not None and dataset is raw)
686
722
 
687
723
  Parameters
688
724
  ----------
@@ -16,7 +16,7 @@ import numpy as np
16
16
  from mne.utils import verbose
17
17
  from scipy.io import loadmat
18
18
 
19
- from braindecode.datasets import BaseConcatDataset, RawDataset
19
+ from braindecode.datasets import BaseConcatDataset, BaseDataset
20
20
 
21
21
  DATASET_URL = (
22
22
  "https://stacks.stanford.edu/file/druid:zk881ps0522/"
@@ -73,8 +73,8 @@ class BCICompetitionIVDataset4(BaseConcatDataset):
73
73
  file_name=file_path.split("/")[-1],
74
74
  session="test",
75
75
  )
76
- datasets.append(RawDataset(raw_train, description=desc_train))
77
- datasets.append(RawDataset(raw_test, description=desc_test))
76
+ datasets.append(BaseDataset(raw_train, description=desc_train))
77
+ datasets.append(BaseDataset(raw_test, description=desc_test))
78
78
  super().__init__(datasets)
79
79
 
80
80
  @staticmethod
@@ -85,7 +85,7 @@ class BCICompetitionIVDataset4(BaseConcatDataset):
85
85
  ----------
86
86
  path (None | str) – Location of where to look for the data storing location.
87
87
  If None, the environment variable or config parameter
88
- MNE_DATASETS_(dataset)_PATH is used. If it doesn't exist, the “~/mne_data”
88
+ MNE_DATASETS_(dataset)_PATH is used. If it doesn’t exist, the “~/mne_data”
89
89
  directory is used. If the dataset is not found under the given path, the data
90
90
  will be automatically downloaded to the specified folder.
91
91
  force_update (bool) – Force update of the dataset even if a local copy exists.
@@ -19,7 +19,7 @@ import numpy as np
19
19
  import pandas as pd
20
20
  from joblib import Parallel, delayed
21
21
 
22
- from .base import BaseConcatDataset, RawDataset, WindowsDataset
22
+ from .base import BaseConcatDataset, BaseDataset, WindowsDataset
23
23
 
24
24
 
25
25
  def _description_from_bids_path(bids_path: mne_bids.BIDSPath) -> dict[str, Any]:
@@ -186,12 +186,12 @@ class BIDSDataset(BaseConcatDataset):
186
186
  )
187
187
  super().__init__(all_base_ds)
188
188
 
189
- def _get_dataset(self, bids_path: mne_bids.BIDSPath) -> RawDataset:
189
+ def _get_dataset(self, bids_path: mne_bids.BIDSPath) -> BaseDataset:
190
190
  description = _description_from_bids_path(bids_path)
191
191
  raw = mne_bids.read_raw_bids(bids_path, verbose=False)
192
192
  if self.preload:
193
193
  raw.load_data()
194
- return RawDataset(raw, description)
194
+ return BaseDataset(raw, description)
195
195
 
196
196
 
197
197
  class BIDSEpochsDataset(BIDSDataset):
@@ -25,14 +25,14 @@ class BIDSIterableDataset(IterableDataset):
25
25
 
26
26
  Examples
27
27
  --------
28
- >>> from braindecode.datasets import RecordDataset, BaseConcatDataset
28
+ >>> from braindecode.datasets import BaseDataset, BaseConcatDataset
29
29
  >>> from braindecode.datasets.bids import BIDSIterableDataset, _description_from_bids_path
30
30
  >>> from braindecode.preprocessing import create_fixed_length_windows
31
31
  >>>
32
32
  >>> def my_reader_fn(path):
33
33
  ... raw = mne_bids.read_raw_bids(path)
34
34
  ... desc = _description_from_bids_path(path)
35
- ... ds = RawDataset(raw, description=desc)
35
+ ... ds = BaseDataset(raw, description=desc)
36
36
  ... windows_ds = create_fixed_length_windows(
37
37
  ... BaseConcatDataset([ds]),
38
38
  ... window_size_samples=400,
@@ -9,7 +9,7 @@ import mne
9
9
  import numpy as np
10
10
  import pandas as pd
11
11
 
12
- from .base import BaseConcatDataset, RawDataset, WindowsDataset
12
+ from .base import BaseConcatDataset, BaseDataset, WindowsDataset
13
13
 
14
14
 
15
15
  def create_from_mne_raw(
@@ -75,9 +75,11 @@ def create_from_mne_raw(
75
75
  f"length of 'raws' ({len(raws)}) and 'description' "
76
76
  f"({len(descriptions)}) has to match"
77
77
  )
78
- base_datasets = [RawDataset(raw, desc) for raw, desc in zip(raws, descriptions)]
78
+ base_datasets = [
79
+ BaseDataset(raw, desc) for raw, desc in zip(raws, descriptions)
80
+ ]
79
81
  else:
80
- base_datasets = [RawDataset(raw) for raw in raws]
82
+ base_datasets = [BaseDataset(raw) for raw in raws]
81
83
 
82
84
  base_datasets = BaseConcatDataset(base_datasets)
83
85
  windows_datasets = create_windows_from_events(
@@ -18,7 +18,7 @@ import pandas as pd
18
18
 
19
19
  from braindecode.util import _update_moabb_docstring
20
20
 
21
- from .base import BaseConcatDataset, RawDataset
21
+ from .base import BaseConcatDataset, BaseDataset
22
22
 
23
23
 
24
24
  def _find_dataset_in_moabb(dataset_name, dataset_kwargs=None):
@@ -164,7 +164,7 @@ class MOABBDataset(BaseConcatDataset):
164
164
  dataset_load_kwargs=dataset_load_kwargs,
165
165
  )
166
166
  all_base_ds = [
167
- RawDataset(raw, row) for raw, (_, row) in zip(raws, description.iterrows())
167
+ BaseDataset(raw, row) for raw, (_, row) in zip(raws, description.iterrows())
168
168
  ]
169
169
  super().__init__(all_base_ds)
170
170
 
@@ -31,7 +31,7 @@ import pandas as pd
31
31
  from joblib import Parallel, delayed
32
32
  from mne.datasets import fetch_dataset
33
33
 
34
- from braindecode.datasets.base import BaseConcatDataset, RawDataset
34
+ from braindecode.datasets.base import BaseConcatDataset, BaseDataset
35
35
 
36
36
  NMT_URL = "https://zenodo.org/record/10909103/files/NMT.zip"
37
37
  NMT_archive_name = "NMT.zip"
@@ -172,7 +172,7 @@ class NMT(BaseConcatDataset):
172
172
  d["n_samples"] = raw.n_times
173
173
  d["sfreq"] = raw.info["sfreq"]
174
174
  d["train"] = "train" in d.path.split(os.sep)
175
- base_dataset = RawDataset(raw, d, target_name)
175
+ base_dataset = BaseDataset(raw, d, target_name)
176
176
  return base_dataset
177
177
 
178
178
 
@@ -21,7 +21,7 @@ from mne.datasets.sleep_physionet._utils import _fetch_one
21
21
  from mne.datasets.utils import _get_path
22
22
  from mne.utils import warn
23
23
 
24
- from braindecode.datasets import BaseConcatDataset, RawDataset
24
+ from braindecode.datasets import BaseConcatDataset, BaseDataset
25
25
 
26
26
  PC18_DIR = op.join(op.dirname(__file__), "data", "pc18")
27
27
  PC18_RECORDS = op.join(PC18_DIR, "sleep_records.csv")
@@ -403,7 +403,7 @@ class SleepPhysionetChallenge2018(BaseConcatDataset):
403
403
  },
404
404
  name="",
405
405
  )
406
- base_dataset = RawDataset(raw_file, desc)
406
+ base_dataset = BaseDataset(raw_file, desc)
407
407
 
408
408
  if preproc is not None:
409
409
  from braindecode.preprocessing.preprocess import _preprocess
@@ -12,7 +12,7 @@ import numpy as np
12
12
  import pandas as pd
13
13
  from mne.datasets.sleep_physionet.age import fetch_data
14
14
 
15
- from .base import BaseConcatDataset, RawDataset
15
+ from .base import BaseConcatDataset, BaseDataset
16
16
 
17
17
 
18
18
  class SleepPhysionet(BaseConcatDataset):
@@ -71,7 +71,7 @@ class SleepPhysionet(BaseConcatDataset):
71
71
  crop_wake_mins=crop_wake_mins,
72
72
  crop=crop,
73
73
  )
74
- base_ds = RawDataset(raw, desc)
74
+ base_ds = BaseDataset(raw, desc)
75
75
  all_base_ds.append(base_ds)
76
76
  super().__init__(all_base_ds)
77
77
 
@@ -22,7 +22,7 @@ import numpy as np
22
22
  import pandas as pd
23
23
  from joblib import Parallel, delayed
24
24
 
25
- from .base import BaseConcatDataset, RawDataset
25
+ from .base import BaseConcatDataset, BaseDataset
26
26
 
27
27
 
28
28
  class TUH(BaseConcatDataset):
@@ -214,7 +214,7 @@ class TUH(BaseConcatDataset):
214
214
  d["report"] = physician_report
215
215
  additional_description = pd.Series(d)
216
216
  description = pd.concat([description, additional_description])
217
- base_dataset = RawDataset(raw, description, target_name=target_name)
217
+ base_dataset = BaseDataset(raw, description, target_name=target_name)
218
218
  return base_dataset
219
219
 
220
220
 
@@ -12,7 +12,7 @@ import numpy as np
12
12
  import pandas as pd
13
13
  from numpy.typing import ArrayLike, NDArray
14
14
 
15
- from .base import BaseConcatDataset, RawDataset
15
+ from .base import BaseConcatDataset, BaseDataset
16
16
 
17
17
  log = logging.getLogger(__name__)
18
18
 
@@ -69,7 +69,7 @@ def create_from_X_y(
69
69
  n_samples_per_x.append(x.shape[1])
70
70
  info = mne.create_info(ch_names=ch_names, sfreq=sfreq)
71
71
  raw = mne.io.RawArray(x, info)
72
- base_dataset = RawDataset(
72
+ base_dataset = BaseDataset(
73
73
  raw, pd.Series({"target": target}), target_name="target"
74
74
  )
75
75
  base_datasets.append(base_dataset)