Braindecode 1.3.0.dev177551367__tar.gz → 1.3.0.dev177628147__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 (147) hide show
  1. {braindecode-1.3.0.dev177551367/braindecode.egg-info → braindecode-1.3.0.dev177628147}/PKG-INFO +11 -5
  2. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/augmentation/functional.py +101 -0
  3. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/augmentation/transforms.py +74 -0
  4. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datasets/base.py +18 -3
  5. braindecode-1.3.0.dev177628147/braindecode/datasets/hub.py +962 -0
  6. braindecode-1.3.0.dev177628147/braindecode/datasets/hub_validation.py +113 -0
  7. braindecode-1.3.0.dev177628147/braindecode/datasets/registry.py +120 -0
  8. braindecode-1.3.0.dev177628147/braindecode/datautil/hub_formats.py +180 -0
  9. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datautil/serialization.py +0 -1
  10. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/__init__.py +10 -1
  11. braindecode-1.3.0.dev177628147/braindecode/models/luna.py +836 -0
  12. braindecode-1.3.0.dev177628147/braindecode/models/medformer.py +758 -0
  13. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/summary.csv +2 -0
  14. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/util.py +85 -0
  15. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/preprocessing/__init__.py +5 -0
  16. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/preprocessing/eegprep_preprocess.py +134 -19
  17. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/preprocessing/mne_preprocess.py +56 -25
  18. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/preprocessing/preprocess.py +126 -41
  19. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/preprocessing/util.py +11 -0
  20. braindecode-1.3.0.dev177628147/braindecode/version.py +1 -0
  21. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147/braindecode.egg-info}/PKG-INFO +11 -5
  22. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode.egg-info/SOURCES.txt +6 -0
  23. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode.egg-info/requires.txt +8 -2
  24. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/api.rst +6 -0
  25. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/conf.py +26 -14
  26. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/index.rst +4 -4
  27. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/install/install_pip.rst +7 -1
  28. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/install/install_source.rst +1 -1
  29. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/whats_new.rst +7 -1
  30. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/pyproject.toml +15 -3
  31. braindecode-1.3.0.dev177551367/braindecode/version.py +0 -1
  32. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/LICENSE.txt +0 -0
  33. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/MANIFEST.in +0 -0
  34. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/NOTICE.txt +0 -0
  35. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/README.rst +0 -0
  36. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/__init__.py +0 -0
  37. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/augmentation/__init__.py +0 -0
  38. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/augmentation/base.py +0 -0
  39. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/classifier.py +0 -0
  40. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datasets/__init__.py +0 -0
  41. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datasets/bbci.py +0 -0
  42. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datasets/bcicomp.py +0 -0
  43. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datasets/bids.py +0 -0
  44. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datasets/experimental.py +0 -0
  45. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datasets/mne.py +0 -0
  46. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datasets/moabb.py +0 -0
  47. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datasets/nmt.py +0 -0
  48. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datasets/sleep_physio_challe_18.py +0 -0
  49. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datasets/sleep_physionet.py +0 -0
  50. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datasets/tuh.py +0 -0
  51. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datasets/xy.py +0 -0
  52. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datautil/__init__.py +0 -0
  53. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datautil/channel_utils.py +0 -0
  54. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/datautil/util.py +0 -0
  55. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/eegneuralnet.py +0 -0
  56. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/functional/__init__.py +0 -0
  57. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/functional/functions.py +0 -0
  58. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/functional/initialization.py +0 -0
  59. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/atcnet.py +0 -0
  60. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/attentionbasenet.py +0 -0
  61. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/attn_sleep.py +0 -0
  62. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/base.py +0 -0
  63. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/bendr.py +0 -0
  64. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/biot.py +0 -0
  65. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/contrawr.py +0 -0
  66. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/ctnet.py +0 -0
  67. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/deep4.py +0 -0
  68. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/deepsleepnet.py +0 -0
  69. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/eegconformer.py +0 -0
  70. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/eeginception_erp.py +0 -0
  71. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/eeginception_mi.py +0 -0
  72. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/eegitnet.py +0 -0
  73. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/eegminer.py +0 -0
  74. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/eegnet.py +0 -0
  75. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/eegnex.py +0 -0
  76. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/eegsimpleconv.py +0 -0
  77. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/eegsym.py +0 -0
  78. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/eegtcnet.py +0 -0
  79. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/fbcnet.py +0 -0
  80. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/fblightconvnet.py +0 -0
  81. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/fbmsnet.py +0 -0
  82. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/hybrid.py +0 -0
  83. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/ifnet.py +0 -0
  84. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/labram.py +0 -0
  85. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/msvtnet.py +0 -0
  86. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/patchedtransformer.py +0 -0
  87. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/sccnet.py +0 -0
  88. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/shallow_fbcsp.py +0 -0
  89. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/signal_jepa.py +0 -0
  90. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/sinc_shallow.py +0 -0
  91. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
  92. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
  93. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/sparcnet.py +0 -0
  94. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/sstdpn.py +0 -0
  95. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/syncnet.py +0 -0
  96. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/tcn.py +0 -0
  97. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/tidnet.py +0 -0
  98. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/tsinception.py +0 -0
  99. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/models/usleep.py +0 -0
  100. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/modules/__init__.py +0 -0
  101. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/modules/activation.py +0 -0
  102. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/modules/attention.py +0 -0
  103. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/modules/blocks.py +0 -0
  104. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/modules/convolution.py +0 -0
  105. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/modules/filter.py +0 -0
  106. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/modules/layers.py +0 -0
  107. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/modules/linear.py +0 -0
  108. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/modules/parametrization.py +0 -0
  109. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/modules/stats.py +0 -0
  110. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/modules/util.py +0 -0
  111. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/modules/wrapper.py +0 -0
  112. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/preprocessing/windowers.py +0 -0
  113. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/regressor.py +0 -0
  114. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/samplers/__init__.py +0 -0
  115. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/samplers/base.py +0 -0
  116. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/samplers/ssl.py +0 -0
  117. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/training/__init__.py +0 -0
  118. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/training/callbacks.py +0 -0
  119. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/training/losses.py +0 -0
  120. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/training/scoring.py +0 -0
  121. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/util.py +0 -0
  122. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/visualization/__init__.py +0 -0
  123. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/visualization/confusion_matrices.py +0 -0
  124. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode/visualization/gradients.py +0 -0
  125. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode.egg-info/dependency_links.txt +0 -0
  126. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/braindecode.egg-info/top_level.txt +0 -0
  127. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/Makefile +0 -0
  128. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/_templates/autosummary/class.rst +0 -0
  129. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/_templates/autosummary/function.rst +0 -0
  130. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/cite.rst +0 -0
  131. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/help.rst +0 -0
  132. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/install/install.rst +0 -0
  133. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/models/categorization/attention.rst +0 -0
  134. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/models/categorization/channel.rst +0 -0
  135. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/models/categorization/convolution.rst +0 -0
  136. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/models/categorization/filterbank.rst +0 -0
  137. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/models/categorization/gnn.rst +0 -0
  138. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/models/categorization/interpretable.rst +0 -0
  139. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/models/categorization/lbm.rst +0 -0
  140. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/models/categorization/recurrent.rst +0 -0
  141. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/models/categorization/spd.rst +0 -0
  142. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/models/models.rst +0 -0
  143. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/models/models_categorization.rst +0 -0
  144. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/models/models_table.rst +0 -0
  145. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/models/models_visualization.rst +0 -0
  146. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/docs/sg_execution_times.rst +0 -0
  147. {braindecode-1.3.0.dev177551367 → braindecode-1.3.0.dev177628147}/setup.cfg +0 -0
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: braindecode
3
- Version: 1.3.0.dev177551367
3
+ Version: 1.3.0.dev177628147
4
4
  Summary: Deep learning software to decode EEG, ECG or MEG signals
5
- Author-email: Robin Tibor Schirrmeister <robintibor@gmail.com>
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>
7
7
  License: BSD-3-Clause
8
8
  Project-URL: homepage, https://braindecode.org
@@ -38,12 +38,14 @@ 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
44
45
  Requires-Dist: eegprep[eeglabio]>=0.1.1; extra == "eegprep"
45
- Provides-Extra: hug
46
- Requires-Dist: huggingface_hub[torch]>=0.20.0; extra == "hug"
46
+ Provides-Extra: hub
47
+ Requires-Dist: huggingface_hub[torch]>=0.20.0; extra == "hub"
48
+ Requires-Dist: zarr<3.0,>=2.18; extra == "hub"
47
49
  Provides-Extra: tests
48
50
  Requires-Dist: pytest; extra == "tests"
49
51
  Requires-Dist: pytest-cov; extra == "tests"
@@ -69,7 +71,11 @@ Requires-Dist: pre-commit; extra == "docs"
69
71
  Requires-Dist: openneuro-py; extra == "docs"
70
72
  Requires-Dist: plotly; extra == "docs"
71
73
  Provides-Extra: all
72
- Requires-Dist: braindecode[docs,eegprep,hug,moabb,tests]; extra == "all"
74
+ Requires-Dist: braindecode[moabb]; extra == "all"
75
+ Requires-Dist: braindecode[hub]; extra == "all"
76
+ Requires-Dist: braindecode[tests]; extra == "all"
77
+ Requires-Dist: braindecode[docs]; extra == "all"
78
+ Requires-Dist: braindecode[eegprep]; extra == "all"
73
79
  Dynamic: license-file
74
80
 
75
81
  .. image:: https://badges.gitter.im/braindecodechat/community.svg
@@ -1,6 +1,7 @@
1
1
  # Authors: Cédric Rommel <cedric.rommel@inria.fr>
2
2
  # Alexandre Gramfort <alexandre.gramfort@inria.fr>
3
3
  # Gustavo Rodrigues <gustavenrique01@gmail.com>
4
+ # Bruna Lopes <brunajaflopes@gmail.com>
4
5
  #
5
6
  # License: BSD (3-clause)
6
7
 
@@ -1194,3 +1195,103 @@ def mask_encoding(
1194
1195
  X[mask] = 0
1195
1196
 
1196
1197
  return X, y # Return the masked tensor and labels
1198
+
1199
+
1200
+ def channels_rereference(
1201
+ X: torch.Tensor,
1202
+ y: torch.Tensor,
1203
+ random_state: int | np.random.RandomState | None = None,
1204
+ ) -> tuple[torch.Tensor, torch.Tensor]:
1205
+ """Randomly re-reference channels in EEG data matrix.
1206
+
1207
+ Part of the augmentations proposed in [1]_
1208
+
1209
+ Parameters
1210
+ ----------
1211
+ X : torch.Tensor
1212
+ EEG input example or batch.
1213
+ y : torch.Tensor
1214
+ EEG labels for the example or batch.
1215
+ random_state: int | numpy.random.Generator, optional
1216
+ Seed to be used to instantiate numpy random number generator instance.
1217
+ Defaults to None.
1218
+
1219
+ Returns
1220
+ -------
1221
+ torch.Tensor
1222
+ Transformed inputs.
1223
+ torch.Tensor
1224
+ Transformed labels.
1225
+
1226
+ References
1227
+ ----------
1228
+ .. [1] Mohsenvand, M.N., Izadi, M.R. &amp; Maes, P.. (2020). Contrastive
1229
+ Representation Learning for Electroencephalogram Classification. Proceedings
1230
+ of the Machine Learning for Health NeurIPS Workshop, in Proceedings of Machine
1231
+ Learning Research 136:238-253
1232
+
1233
+ """
1234
+
1235
+ rng = check_random_state(random_state)
1236
+ batch_size, n_channels, _ = X.shape
1237
+
1238
+ ch = rng.randint(0, n_channels, size=batch_size)
1239
+
1240
+ X_ch = X[torch.arange(batch_size), ch, :]
1241
+ X = X - X_ch.unsqueeze(1)
1242
+ X[torch.arange(batch_size), ch, :] = -X_ch
1243
+
1244
+ return X, y
1245
+
1246
+
1247
+ def amplitude_scale(
1248
+ X: torch.Tensor,
1249
+ y: torch.Tensor,
1250
+ scale: tuple,
1251
+ random_state: int | np.random.RandomState | None = None,
1252
+ ) -> tuple[torch.Tensor, torch.Tensor]:
1253
+ """Rescale amplitude of each channel based on a random sampled scaling value.
1254
+
1255
+ Part of the augmentations proposed in [1]_
1256
+
1257
+ Parameters
1258
+ ----------
1259
+ X : torch.Tensor
1260
+ EEG input example or batch.
1261
+ y : torch.Tensor
1262
+ EEG labels for the example or batch.
1263
+ scale : tuple of floats
1264
+ Interval from which ypu sample the scaling value
1265
+ random_state: int | numpy.random.Generator, optional
1266
+ Seed to be used to instantiate numpy random number generator instance.
1267
+ Defaults to None.
1268
+
1269
+ Returns
1270
+ -------
1271
+ torch.Tensor
1272
+ Transformed inputs.
1273
+ torch.Tensor
1274
+ Transformed labels.
1275
+
1276
+ References
1277
+ ----------
1278
+ .. [1] Mohsenvand, M.N., Izadi, M.R. &amp; Maes, P.. (2020). Contrastive
1279
+ Representation Learning for Electroencephalogram Classification. Proceedings
1280
+ of the Machine Learning for Health NeurIPS Workshop, in Proceedings of Machine
1281
+ Learning Research 136:238-253
1282
+
1283
+ """
1284
+
1285
+ rng = torch.Generator()
1286
+ rng.manual_seed(random_state)
1287
+ batch_size, n_channels, _ = X.shape
1288
+
1289
+ # Parameter for scaling amplitude / channel / trial
1290
+ l, h = scale
1291
+ s = l + (h - l) * torch.rand(
1292
+ batch_size, n_channels, 1, generator=rng, device=X.device, dtype=X.dtype
1293
+ )
1294
+
1295
+ X = s * X
1296
+
1297
+ return X, y
@@ -1,6 +1,7 @@
1
1
  # Authors: Cédric Rommel <cedric.rommel@inria.fr>
2
2
  # Alexandre Gramfort <alexandre.gramfort@inria.fr>
3
3
  # Gustavo Rodrigues <gustavenrique01@gmail.com>
4
+ # Bruna Lopes <brunajaflopes@gmail.com>
4
5
  #
5
6
  # License: BSD (3-clause)
6
7
 
@@ -13,9 +14,11 @@ from mne.channels import make_standard_montage
13
14
 
14
15
  from .base import Transform
15
16
  from .functional import (
17
+ amplitude_scale,
16
18
  bandstop_filter,
17
19
  channels_dropout,
18
20
  channels_permute,
21
+ channels_rereference,
19
22
  channels_shuffle,
20
23
  frequency_shift,
21
24
  ft_surrogate,
@@ -1271,3 +1274,74 @@ class MaskEncoding(Transform):
1271
1274
  "segment_length": segment_length,
1272
1275
  "n_segments": self.n_segments,
1273
1276
  }
1277
+
1278
+
1279
+ class ChannelsReref(Transform):
1280
+ """Randomly re-reference channels in EEG data matrix.
1281
+
1282
+ Part of the augmentations proposed in [1]_
1283
+
1284
+ Parameters
1285
+ ----------
1286
+ probability: float
1287
+ Float setting the probability of applying the operation.
1288
+ random_state: int | numpy.random.Generator, optional
1289
+ Seed to be used to instantiate numpy random number generator instance.
1290
+ Used to decide whether or not to transform given the probability
1291
+ argument, to sample which channels to shuffle and to carry the shuffle.
1292
+ Defaults to None.
1293
+
1294
+ References
1295
+ ----------
1296
+ .. [1] Mohsenvand, M.N., Izadi, M.R. &amp; Maes, P.. (2020). Contrastive
1297
+ Representation Learning for Electroencephalogram Classification. Proceedings
1298
+ of the Machine Learning for Health NeurIPS Workshop, in Proceedings of Machine
1299
+ Learning Research 136:238-253 Available from https://proceedings.mlr.press/v136/mohsenvand20a.html.
1300
+
1301
+ """
1302
+
1303
+ operation = staticmethod(channels_rereference) # type: ignore[assignment]
1304
+
1305
+ def __init__(self, probability, random_state=None):
1306
+ super().__init__(probability=probability, random_state=random_state)
1307
+
1308
+ def get_augmentation_params(self, *batch):
1309
+ """Return transform parameters"""
1310
+ return {
1311
+ "random_state": self.rng,
1312
+ }
1313
+
1314
+
1315
+ class AmplitudeScale(Transform):
1316
+ """Rescale amplitude based on a random sampled scaling value.
1317
+
1318
+ Part of the augmentations proposed in [1]_
1319
+
1320
+ Parameters
1321
+ ----------
1322
+ probability: float
1323
+ Float setting the probability of applying the operation.
1324
+ random_state: int | numpy.random.Generator, optional
1325
+ Seed to be used to instantiate numpy random number generator instance.
1326
+ Used to decide whether or not to transform given the probability
1327
+ argument, to sample which channels to shuffle and to carry the shuffle.
1328
+ Defaults to None.
1329
+
1330
+ References
1331
+ ----------
1332
+ .. [1] Mohsenvand, M.N., Izadi, M.R. &amp; Maes, P.. (2020). Contrastive
1333
+ Representation Learning for Electroencephalogram Classification. Proceedings
1334
+ of the Machine Learning for Health NeurIPS Workshop, in Proceedings of Machine
1335
+ Learning Research 136:238-253 Available from https://proceedings.mlr.press/v136/mohsenvand20a.html.
1336
+
1337
+ """
1338
+
1339
+ operation = staticmethod(amplitude_scale) # type: ignore[assignment]
1340
+
1341
+ def __init__(self, probability, interval=(0.5, 2), random_state=None):
1342
+ super().__init__(probability=probability, random_state=random_state)
1343
+ self.scale = interval
1344
+
1345
+ def get_augmentation_params(self, *batch):
1346
+ """Return transform parameters"""
1347
+ return {"random_state": self.rng, "scale": self.scale}
@@ -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
@@ -28,6 +28,9 @@ from mne.utils.docs import deprecated
28
28
  from torch.utils.data import ConcatDataset, Dataset
29
29
  from typing_extensions import TypeVar
30
30
 
31
+ from .hub import HubDatasetMixin
32
+ from .registry import register_dataset
33
+
31
34
 
32
35
  def _create_description(description) -> pd.Series:
33
36
  if description is not None:
@@ -97,6 +100,7 @@ class RecordDataset(Dataset[tuple[np.ndarray, int | str, tuple[int, int, int]]])
97
100
  T = TypeVar("T", bound=RecordDataset)
98
101
 
99
102
 
103
+ @register_dataset
100
104
  class RawDataset(RecordDataset):
101
105
  """Returns samples from an mne.io.Raw object along with a target.
102
106
 
@@ -129,6 +133,7 @@ class RawDataset(RecordDataset):
129
133
 
130
134
  # save target name for load/save later
131
135
  self.target_name = self._target_name(target_name)
136
+ self.raw_preproc_kwargs: list[dict[str, Any]] = []
132
137
 
133
138
  def __getitem__(self, index):
134
139
  X = self.raw[:, index][0]
@@ -176,10 +181,12 @@ class RawDataset(RecordDataset):
176
181
  "If you want to type a Braindecode dataset (i.e. RawDataset|EEGWindowsDataset|WindowsDataset), "
177
182
  "use the RecordDataset class instead."
178
183
  )
184
+ @register_dataset
179
185
  class BaseDataset(RawDataset):
180
186
  pass
181
187
 
182
188
 
189
+ @register_dataset
183
190
  class EEGWindowsDataset(RecordDataset):
184
191
  """Returns windows from an mne.Raw object, its window indices, along with a target.
185
192
 
@@ -235,6 +242,7 @@ class EEGWindowsDataset(RecordDataset):
235
242
  ].to_numpy()
236
243
  if self.targets_from == "metadata":
237
244
  self.y = metadata.loc[:, "target"].to_list()
245
+ self.raw_preproc_kwargs: list[dict[str, Any]] = []
238
246
 
239
247
  def __getitem__(self, index: int):
240
248
  """Get a window and its target.
@@ -285,6 +293,7 @@ class EEGWindowsDataset(RecordDataset):
285
293
  return len(self.crop_inds)
286
294
 
287
295
 
296
+ @register_dataset
288
297
  class WindowsDataset(RecordDataset):
289
298
  """Returns windows from an mne.Epochs object along with a target.
290
299
 
@@ -334,6 +343,8 @@ class WindowsDataset(RecordDataset):
334
343
  ].to_numpy()
335
344
  if self.targets_from == "metadata":
336
345
  self.y = metadata.loc[:, "target"].to_list()
346
+ self.raw_preproc_kwargs: list[dict[str, Any]] = []
347
+ self.window_preproc_kwargs: list[dict[str, Any]] = []
337
348
 
338
349
  def __getitem__(self, index: int):
339
350
  """Get a window and its target.
@@ -374,12 +385,16 @@ class WindowsDataset(RecordDataset):
374
385
  return len(self.windows.events)
375
386
 
376
387
 
377
- class BaseConcatDataset(ConcatDataset, Generic[T]):
388
+ @register_dataset
389
+ class BaseConcatDataset(ConcatDataset, HubDatasetMixin, Generic[T]):
378
390
  """A base class for concatenated datasets.
379
391
 
380
392
  Holds either mne.Raw or mne.Epoch in self.datasets and has
381
393
  a pandas DataFrame with additional description.
382
394
 
395
+ Includes Hugging Face Hub integration via HubDatasetMixin for
396
+ uploading and downloading datasets.
397
+
383
398
  Parameters
384
399
  ----------
385
400
  list_of_ds : list
@@ -794,7 +809,7 @@ class BaseConcatDataset(ConcatDataset, Generic[T]):
794
809
  kwargs = getattr(ds, kwargs_name)
795
810
  if kwargs is not None:
796
811
  with open(kwargs_file_path, "w") as f:
797
- json.dump(kwargs, f)
812
+ json.dump(kwargs, f, indent=2)
798
813
 
799
814
  @staticmethod
800
815
  def _save_target_name(sub_dir, ds):