Braindecode 1.8.1.dev176771289__tar.gz → 1.8.1.dev176972175__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 (214) hide show
  1. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/NOTICE.txt +0 -1
  2. {braindecode-1.8.1.dev176771289/braindecode.egg-info → braindecode-1.8.1.dev176972175}/PKG-INFO +2 -2
  3. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/augmentation/__init__.py +2 -0
  4. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/augmentation/functional.py +96 -3
  5. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/augmentation/transforms.py +93 -0
  6. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/chb_mit.py +5 -39
  7. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/siena.py +5 -39
  8. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/sleep_physio_challe_18.py +0 -46
  9. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/utils.py +37 -0
  10. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/functional/__init__.py +19 -1
  11. braindecode-1.8.1.dev176972175/braindecode/functional/attention.py +152 -0
  12. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/functional/functions.py +106 -1
  13. braindecode-1.8.1.dev176972175/braindecode/functional/initialization.py +139 -0
  14. braindecode-1.8.1.dev176972175/braindecode/functional/patches.py +105 -0
  15. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/atcnet.py +10 -14
  16. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/attn_sleep.py +9 -13
  17. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/axon.py +11 -4
  18. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/barista.py +27 -26
  19. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/base.py +53 -0
  20. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/bendr.py +20 -12
  21. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/biot.py +4 -2
  22. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/brainbert.py +49 -17
  23. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/brainmodule.py +1 -1
  24. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/brainomni.py +23 -16
  25. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/brant.py +3 -3
  26. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/cbramod.py +12 -11
  27. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/codebrain.py +1 -1
  28. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/csbrain.py +14 -7
  29. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/ctnet.py +3 -30
  30. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/dance.py +6 -11
  31. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/deep4.py +6 -2
  32. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/diver1.py +11 -8
  33. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/duin.py +23 -14
  34. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/eegconformer.py +3 -15
  35. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/eegdino.py +13 -6
  36. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/eeginception_erp.py +4 -0
  37. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/eegminer.py +4 -0
  38. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/eegnet.py +4 -0
  39. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/eegpt.py +26 -151
  40. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/epint.py +26 -10
  41. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/ifnet.py +20 -24
  42. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/labram.py +18 -33
  43. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/luna.py +29 -73
  44. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/mapa.py +42 -26
  45. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/medformer.py +24 -39
  46. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/mirepnet.py +3 -12
  47. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/mscformer.py +3 -31
  48. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/mvpformer.py +18 -10
  49. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/neuropose.py +18 -18
  50. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/neurorvq.py +11 -29
  51. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/neurorvq_tokenizer.py +35 -9
  52. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/patchedtransformer.py +37 -22
  53. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/popt.py +169 -4
  54. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/reve.py +10 -10
  55. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/sensingdynamics.py +18 -19
  56. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/shallow_fbcsp.py +6 -2
  57. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/signal_jepa.py +24 -12
  58. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/sinc_shallow.py +15 -0
  59. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/sleepfm.py +3 -3
  60. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/sparcnet.py +14 -10
  61. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/steegformer.py +18 -30
  62. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/tcformer.py +37 -37
  63. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/tidnet.py +13 -4
  64. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/tmsanet.py +20 -9
  65. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/util.py +23 -149
  66. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/vemg2pose.py +20 -22
  67. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/zuna.py +79 -28
  68. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/modules/__init__.py +6 -0
  69. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/modules/attention.py +32 -98
  70. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/modules/blocks.py +47 -51
  71. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/modules/dance_modules.py +5 -3
  72. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/modules/layers.py +47 -0
  73. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/regressor.py +6 -1
  74. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/training/scoring.py +4 -1
  75. braindecode-1.8.1.dev176972175/braindecode/version.py +1 -0
  76. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175/braindecode.egg-info}/PKG-INFO +2 -2
  77. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode.egg-info/SOURCES.txt +2 -2
  78. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode.egg-info/requires.txt +1 -1
  79. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/api.rst +16 -0
  80. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/whats_new.rst +57 -0
  81. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/pyproject.toml +2 -2
  82. braindecode-1.8.1.dev176771289/braindecode/datasets/bids/format.py +0 -717
  83. braindecode-1.8.1.dev176771289/braindecode/functional/initialization.py +0 -47
  84. braindecode-1.8.1.dev176771289/braindecode/modules/popt_modules.py +0 -187
  85. braindecode-1.8.1.dev176771289/braindecode/version.py +0 -1
  86. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/LICENSE.txt +0 -0
  87. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/MANIFEST.in +0 -0
  88. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/README.rst +0 -0
  89. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/__init__.py +0 -0
  90. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/augmentation/base.py +0 -0
  91. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/classifier.py +0 -0
  92. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/__init__.py +0 -0
  93. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/_notebook_viewer.py +0 -0
  94. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/base.py +0 -0
  95. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/bbci.py +0 -0
  96. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/bcicomp.py +0 -0
  97. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/bids/__init__.py +0 -0
  98. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/bids/datasets.py +0 -0
  99. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/bids/hub.py +0 -0
  100. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/bids/hub_format.py +0 -0
  101. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/bids/hub_io.py +0 -0
  102. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/bids/hub_validation.py +0 -0
  103. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/bids/iterable.py +0 -0
  104. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/collate.py +0 -0
  105. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/mne.py +0 -0
  106. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/moabb.py +0 -0
  107. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/nmt.py +0 -0
  108. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/registry.py +0 -0
  109. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/sleep_physionet.py +0 -0
  110. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/tuh.py +0 -0
  111. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datasets/xy.py +0 -0
  112. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datautil/__init__.py +0 -0
  113. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datautil/channel_utils.py +0 -0
  114. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datautil/hub_formats.py +0 -0
  115. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datautil/serialization.py +0 -0
  116. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/datautil/util.py +0 -0
  117. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/eegneuralnet.py +0 -0
  118. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/functional/_real_dft.py +0 -0
  119. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/__init__.py +0 -0
  120. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/attentionbasenet.py +0 -0
  121. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/config.py +0 -0
  122. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/contrawr.py +0 -0
  123. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/deepsleepnet.py +0 -0
  124. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/dgcnn.py +0 -0
  125. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/eeg_clip.py +0 -0
  126. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/eeginception_mi.py +0 -0
  127. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/eegitnet.py +0 -0
  128. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/eegnex.py +0 -0
  129. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/eegsimpleconv.py +0 -0
  130. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/eegsym.py +0 -0
  131. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/eegtcnet.py +0 -0
  132. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/emg2qwerty.py +0 -0
  133. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/fbcnet.py +0 -0
  134. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/fblightconvnet.py +0 -0
  135. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/fbmsnet.py +0 -0
  136. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/gcnsnet.py +0 -0
  137. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/guetschel2026.py +0 -0
  138. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/hybrid.py +0 -0
  139. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/meta_neuromotor.py +0 -0
  140. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/msvtnet.py +0 -0
  141. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/sccnet.py +0 -0
  142. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/seizure_transformer.py +0 -0
  143. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
  144. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
  145. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/sstdpn.py +0 -0
  146. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/summary.csv +0 -0
  147. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/syncnet.py +0 -0
  148. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/tcn.py +0 -0
  149. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/tfm_tokenizer.py +0 -0
  150. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/tsinception.py +0 -0
  151. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/models/usleep.py +0 -0
  152. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/modules/activation.py +0 -0
  153. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/modules/channels.py +0 -0
  154. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/modules/convolution.py +0 -0
  155. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/modules/filter.py +0 -0
  156. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/modules/linear.py +0 -0
  157. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/modules/linear_attention.py +0 -0
  158. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/modules/parametrization.py +0 -0
  159. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/modules/quantization.py +0 -0
  160. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/modules/stats.py +0 -0
  161. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/modules/util.py +0 -0
  162. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/modules/wrapper.py +0 -0
  163. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/preprocessing/__init__.py +0 -0
  164. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/preprocessing/eegprep_preprocess.py +0 -0
  165. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/preprocessing/mne_preprocess.py +0 -0
  166. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/preprocessing/preprocess.py +0 -0
  167. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/preprocessing/util.py +0 -0
  168. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/preprocessing/windowers.py +0 -0
  169. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/samplers/__init__.py +0 -0
  170. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/samplers/base.py +0 -0
  171. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/samplers/ssl.py +0 -0
  172. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/training/__init__.py +0 -0
  173. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/training/callbacks.py +0 -0
  174. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/training/losses.py +0 -0
  175. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/util.py +0 -0
  176. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/visualization/__init__.py +0 -0
  177. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/visualization/activations.py +0 -0
  178. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/visualization/attribution.py +0 -0
  179. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/visualization/confusion_matrices.py +0 -0
  180. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/visualization/frequency.py +0 -0
  181. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/visualization/metrics.py +0 -0
  182. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/visualization/sanity.py +0 -0
  183. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode/visualization/topology.py +0 -0
  184. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode.egg-info/dependency_links.txt +0 -0
  185. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/braindecode.egg-info/top_level.txt +0 -0
  186. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/Makefile +0 -0
  187. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/_templates/autosummary/class.rst +0 -0
  188. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/_templates/autosummary/class_in_subdir.rst +0 -0
  189. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/_templates/autosummary/function.rst +0 -0
  190. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/_templates/autosummary/function_in_subdir.rst +0 -0
  191. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/agent_docs.rst +0 -0
  192. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/cite.rst +0 -0
  193. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/conf.py +0 -0
  194. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/help.rst +0 -0
  195. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/index.rst +0 -0
  196. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/install/install.rst +0 -0
  197. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/install/install_pip.rst +0 -0
  198. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/install/install_source.rst +0 -0
  199. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/models/categorization/attention.rst +0 -0
  200. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/models/categorization/channel.rst +0 -0
  201. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/models/categorization/convolution.rst +0 -0
  202. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/models/categorization/filterbank.rst +0 -0
  203. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/models/categorization/gnn.rst +0 -0
  204. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/models/categorization/interpretable.rst +0 -0
  205. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/models/categorization/lbm.rst +0 -0
  206. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/models/categorization/recurrent.rst +0 -0
  207. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/models/categorization/spd.rst +0 -0
  208. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/models/models.rst +0 -0
  209. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/models/models_categorization.rst +0 -0
  210. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/models/models_table.rst +0 -0
  211. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/models/models_visualization.rst +0 -0
  212. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/sg_execution_times.rst +0 -0
  213. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/docs/user_guide/channel_strategies.rst +0 -0
  214. {braindecode-1.8.1.dev176771289 → braindecode-1.8.1.dev176972175}/setup.cfg +0 -0
@@ -47,7 +47,6 @@ The following components are licensed under the MIT License:
47
47
  - `braindecode/models/mirepnet.py`
48
48
  - `braindecode/models/popt.py`
49
49
  - `braindecode/models/tfm_tokenizer.py`
50
- - `braindecode/modules/popt_modules.py`
51
50
  - `braindecode/models/brainomni.py`
52
51
  - `braindecode/modules/quantization.py`
53
52
  - `braindecode/modules/linear_attention.py`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: braindecode
3
- Version: 1.8.1.dev176771289
3
+ Version: 1.8.1.dev176972175
4
4
  Summary: Deep learning software to decode EEG, ECG or MEG signals
5
5
  Author-email: Robin Tibor Schirrmeister <robintibor@gmail.com>, Bruno Aristimunha Pinto <b.aristimunha@gmail.com>, Alexandre Gramfort <agramfort@meta.com>
6
6
  Maintainer-email: Alexandre Gramfort <agramfort@meta.com>, Bruno Aristimunha Pinto <b.aristimunha@gmail.com>, Robin Tibor Schirrmeister <robintibor@gmail.com>
@@ -32,8 +32,8 @@ Requires-Dist: joblib
32
32
  Requires-Dist: torchinfo
33
33
  Requires-Dist: pandas
34
34
  Requires-Dist: wfdb>=4.3.1
35
- Requires-Dist: linear_attention_transformer
36
35
  Requires-Dist: docstring_inheritance
36
+ Requires-Dist: einops
37
37
  Requires-Dist: pydantic>=2.0
38
38
  Provides-Extra: moabb
39
39
  Requires-Dist: moabb>=1.4.3; extra == "moabb"
@@ -14,6 +14,7 @@ from .transforms import (
14
14
  FrequencyShift,
15
15
  FTSurrogate,
16
16
  GaussianNoise,
17
+ LabelSmoothing,
17
18
  MaskEncoding,
18
19
  Mixup,
19
20
  SegmentationReconstruction,
@@ -40,6 +41,7 @@ __all__ = [
40
41
  "CutMix",
41
42
  "ChannelsDropout",
42
43
  "GaussianNoise",
44
+ "LabelSmoothing",
43
45
  "ChannelsSymmetry",
44
46
  "SmoothTimeMask",
45
47
  "BandstopFilter",
@@ -19,7 +19,7 @@ from mne.filter import notch_filter
19
19
  from scipy.interpolate import Rbf
20
20
  from sklearn.utils import check_random_state
21
21
  from torch.fft import fft, ifft
22
- from torch.nn.functional import pad
22
+ from torch.nn.functional import one_hot, pad
23
23
 
24
24
 
25
25
  def _max_float_dtype(device: torch.device | str) -> torch.dtype:
@@ -1089,10 +1089,12 @@ def mixup(
1089
1089
  Online: https://arxiv.org/abs/1710.09412
1090
1090
  .. [2] https://github.com/facebookresearch/mixup-cifar10/blob/master/train.py
1091
1091
  """
1092
- device = X.device
1093
1092
  batch_size, n_channels, n_times = X.shape
1094
1093
 
1095
- X_mix = torch.zeros((batch_size, n_channels, n_times)).to(device)
1094
+ X_mix = X.new_zeros(
1095
+ (batch_size, n_channels, n_times),
1096
+ dtype=X.dtype if X.is_floating_point() else torch.get_default_dtype(),
1097
+ )
1096
1098
  y_a = y.clone()
1097
1099
  y_b = y[idx_perm].clone()
1098
1100
 
@@ -1150,6 +1152,97 @@ def cutmix(
1150
1152
  return X_mix, (y.clone(), y[idx_perm].clone(), lam)
1151
1153
 
1152
1154
 
1155
+ def label_smoothing(
1156
+ X: torch.Tensor,
1157
+ y: torch.Tensor,
1158
+ epsilon: float,
1159
+ num_classes: int | None = None,
1160
+ ) -> tuple[torch.Tensor, torch.Tensor]:
1161
+ """Smooth targets toward the uniform distribution over the classes.
1162
+
1163
+ See [1]_ for details.
1164
+
1165
+ Parameters
1166
+ ----------
1167
+ X : torch.Tensor
1168
+ EEG data in form ``batch_size, n_channels, n_times``. Returned
1169
+ unchanged.
1170
+ y : torch.Tensor
1171
+ Target of length ``batch_size`` holding class indices (float values
1172
+ are accepted when they are integral), or a floating-point tensor of
1173
+ shape ``batch_size, num_classes`` holding target distributions.
1174
+ epsilon : float
1175
+ Smoothing parameter between 0 and 1: the weight of the uniform
1176
+ distribution mixed into the targets. ``0`` returns the unsmoothed
1177
+ targets.
1178
+ num_classes : int | None, optional
1179
+ Number of classes. Required when ``y`` holds class indices; when
1180
+ ``y`` already holds distributions, it must match the size of the
1181
+ last dimension of ``y``. Defaults to None.
1182
+
1183
+ Returns
1184
+ -------
1185
+ tuple
1186
+ ``X``, ``y``. Where ``X`` is unchanged and ``y`` is a
1187
+ floating-point tensor of shape ``batch_size, num_classes`` whose
1188
+ rows sum to one.
1189
+
1190
+ References
1191
+ ----------
1192
+ .. [1] Christian Szegedy, Vincent Vanhoucke, Jonathon Shlens and
1193
+ Zbigniew Wojna (2016). Rethinking the Inception Architecture for
1194
+ Computer Vision. In 2016 IEEE Conference on Computer Vision and
1195
+ Pattern Recognition (CVPR), pp. 2818-2826.
1196
+ Online: https://arxiv.org/abs/1512.00567
1197
+ """
1198
+ if not isinstance(epsilon, Real) or not 0.0 <= float(epsilon) <= 1.0:
1199
+ raise ValueError(
1200
+ f"epsilon should be a real number between 0 and 1. Got {epsilon!r}."
1201
+ )
1202
+ if num_classes is not None and (
1203
+ not isinstance(num_classes, int)
1204
+ or isinstance(num_classes, bool)
1205
+ or num_classes < 2
1206
+ ):
1207
+ raise ValueError(
1208
+ f"num_classes should be an integer of at least 2. Got {num_classes!r}."
1209
+ )
1210
+
1211
+ if y.dim() == 1:
1212
+ # class-index targets: smooth their one-hot encoding
1213
+ if num_classes is None:
1214
+ raise ValueError("num_classes is required when y holds class indices.")
1215
+ if not torch.all(y == y.floor()):
1216
+ raise ValueError(
1217
+ "y holds non-integral values; class-index targets should be "
1218
+ "integers or integral floats."
1219
+ )
1220
+ if y.numel() > 0 and (y.min() < 0 or y.max() >= num_classes):
1221
+ raise ValueError(f"y holds class indices outside [0, {num_classes}).")
1222
+ one_hot_y = one_hot(y.long(), num_classes).to(dtype=X.dtype)
1223
+ return X, one_hot_y * (1.0 - epsilon) + epsilon / num_classes
1224
+
1225
+ if y.is_floating_point() and y.dim() >= 2:
1226
+ # target distributions: interpolate them toward the uniform one
1227
+ n_classes = y.shape[-1]
1228
+ if num_classes is not None and num_classes != n_classes:
1229
+ raise ValueError(
1230
+ f"num_classes ({num_classes}) does not match the size of the "
1231
+ f"last dimension of y ({n_classes})."
1232
+ )
1233
+ if n_classes < 2:
1234
+ raise ValueError(
1235
+ f"y should hold distributions over at least 2 classes. Got {n_classes}."
1236
+ )
1237
+ return X, y * (1.0 - epsilon) + epsilon / n_classes
1238
+
1239
+ raise ValueError(
1240
+ "y should hold class indices or floating-point target distributions "
1241
+ f"with a class dimension; got dtype {y.dtype} and shape "
1242
+ f"{tuple(y.shape)}."
1243
+ )
1244
+
1245
+
1153
1246
  def segmentation_reconstruction(
1154
1247
  X: torch.Tensor,
1155
1248
  y: torch.Tensor,
@@ -30,6 +30,7 @@ from .functional import (
30
30
  frequency_shift,
31
31
  ft_surrogate,
32
32
  gaussian_noise,
33
+ label_smoothing,
33
34
  mask_encoding,
34
35
  mixup,
35
36
  segmentation_reconstruction,
@@ -1155,6 +1156,98 @@ class CutMix(Mixup):
1155
1156
  return dict(params, cut_t_start=start, cut_t_len=end - start)
1156
1157
 
1157
1158
 
1159
+ class LabelSmoothing(Transform):
1160
+ """Label smoothing from Szegedy et al. (2016) [1]_.
1161
+
1162
+ Replaces each target with its convex combination with the uniform
1163
+ distribution over the classes, penalizing over-confident predictions.
1164
+ The signals are returned unchanged; only the targets change.
1165
+
1166
+ The smoothed targets are floating-point distributions of shape
1167
+ ``batch_size, num_classes`` (each row sums to one), so the training
1168
+ loss must accept target distributions, e.g. soft cross-entropy
1169
+ ``-(y * torch.log_softmax(logits, dim=-1)).sum(-1).mean()`` or
1170
+ ``torch.nn.KLDivLoss``. The transform composes before target-mixing
1171
+ transforms such as :class:`braindecode.augmentation.Mixup`, whose
1172
+ fractional-target path then mixes the smoothed distributions. The
1173
+ fixed-expansion mode (``n_augmentation > 0``) of
1174
+ :class:`braindecode.augmentation.AugmentedDataLoader` is not supported:
1175
+ it cannot concatenate the unsmoothed original targets with the reshaped
1176
+ smoothed copies.
1177
+
1178
+ Parameters
1179
+ ----------
1180
+ epsilon : float
1181
+ Smoothing parameter between 0 and 1: the weight of the uniform
1182
+ distribution mixed into the targets. ``0`` disables smoothing.
1183
+ num_classes : int | None, optional
1184
+ Number of classes. Required when the targets are class indices;
1185
+ when the targets are already distributions of shape
1186
+ ``batch_size, num_classes``, it must match their last dimension.
1187
+ Defaults to None.
1188
+ random_state : int | numpy.random.Generator, optional
1189
+ Seed to be used to instantiate numpy random number generator
1190
+ instance. The transform is deterministic, so the seed only feeds
1191
+ the application-probability machinery, which is inactive here.
1192
+ Defaults to None.
1193
+
1194
+ References
1195
+ ----------
1196
+ .. [1] Christian Szegedy, Vincent Vanhoucke, Jonathon Shlens and
1197
+ Zbigniew Wojna (2016). Rethinking the Inception Architecture for
1198
+ Computer Vision. In 2016 IEEE Conference on Computer Vision and
1199
+ Pattern Recognition (CVPR), pp. 2818-2826.
1200
+ Online: https://arxiv.org/abs/1512.00567
1201
+ """
1202
+
1203
+ operation = staticmethod(label_smoothing) # type: ignore[assignment]
1204
+
1205
+ def __init__(self, epsilon, num_classes=None, random_state=None):
1206
+ super().__init__(
1207
+ probability=1.0, # LabelSmoothing has to be applied to whole batches
1208
+ random_state=random_state,
1209
+ )
1210
+ if not isinstance(epsilon, Real) or not 0.0 <= float(epsilon) <= 1.0:
1211
+ raise ValueError(
1212
+ f"epsilon should be a real number between 0 and 1. Got {epsilon!r}."
1213
+ )
1214
+ if num_classes is not None and (
1215
+ not isinstance(num_classes, int)
1216
+ or isinstance(num_classes, bool)
1217
+ or num_classes < 2
1218
+ ):
1219
+ raise ValueError(
1220
+ f"num_classes should be an integer of at least 2. Got {num_classes!r}."
1221
+ )
1222
+ self.epsilon = epsilon
1223
+ self.num_classes = num_classes
1224
+
1225
+ def get_augmentation_params(self, *batch):
1226
+ """Return transform parameters.
1227
+
1228
+ Parameters
1229
+ ----------
1230
+ X : tensor.Tensor
1231
+ The data.
1232
+ y : tensor.Tensor
1233
+ The labels.
1234
+
1235
+ Returns
1236
+ -------
1237
+ params : dict
1238
+ Contains
1239
+
1240
+ * epsilon : float
1241
+ Smoothing parameter between 0 and 1.
1242
+ * num_classes : int | None
1243
+ The number of classes.
1244
+ """
1245
+ return {
1246
+ "epsilon": self.epsilon,
1247
+ "num_classes": self.num_classes,
1248
+ }
1249
+
1250
+
1158
1251
  class SegmentationReconstruction(Transform):
1159
1252
  """Segmentation Reconstruction from Lotte (2015) [Lotte2015]_.
1160
1253
 
@@ -16,12 +16,7 @@ It reorganizes the file structure to comply with the BIDS specification. To this
16
16
  # License: BSD (3-clause)
17
17
  from __future__ import annotations
18
18
 
19
- from pathlib import Path
20
-
21
- from mne.datasets import fetch_dataset
22
-
23
- from braindecode.datasets import BIDSDataset
24
- from braindecode.datasets.utils import _correct_dataset_path
19
+ from braindecode.datasets.utils import _ZenodoBIDSDataset
25
20
 
26
21
  CHB_MIT_URL = "https://zenodo.org/records/10259996/files/BIDS_CHB-MIT.zip"
27
22
  CHB_MIT_archive_name = "chb_mit_bids.zip"
@@ -38,7 +33,7 @@ CHB_MIT_dataset_params = {
38
33
  }
39
34
 
40
35
 
41
- class CHBMIT(BIDSDataset):
36
+ class CHBMIT(_ZenodoBIDSDataset):
42
37
  """The Children's Hospital Boston EEG Dataset.
43
38
 
44
39
  This database, collected at the Children's Hospital Boston, consists of EEG recordings
@@ -129,35 +124,6 @@ class CHBMIT(BIDSDataset):
129
124
  .. footbibliography::
130
125
  """
131
126
 
132
- def __init__(self, root=None, *args, **kwargs):
133
- # Download dataset if not present
134
- if root is None:
135
- path_root = fetch_dataset(
136
- dataset_params=CHB_MIT_dataset_params,
137
- path=None,
138
- processor="unzip",
139
- force_update=False,
140
- )
141
- # First time we fetch the dataset, we need to move the files to the
142
- # correct directory.
143
- path_root = _correct_dataset_path(
144
- path_root, CHB_MIT_archive_name, "BIDS_CHB-MIT"
145
- )
146
- else:
147
- # Validate that the provided root is a valid BIDS dataset
148
- if not Path(f"{root}/participants.tsv").exists():
149
- raise ValueError(
150
- f"The provided root directory {root} does not contain a valid "
151
- "BIDS dataset (missing participants.tsv). Please ensure the "
152
- "root points directly to the BIDS dataset directory."
153
- )
154
- path_root = root
155
-
156
- kwargs["root"] = path_root
157
-
158
- super().__init__(
159
- *args,
160
- extensions=".edf",
161
- check=False,
162
- **kwargs,
163
- )
127
+ _dataset_params = CHB_MIT_dataset_params
128
+ _archive_name = CHB_MIT_archive_name
129
+ _unzipped_dir = "BIDS_CHB-MIT"
@@ -15,12 +15,7 @@ It reorganizes the file structure to comply with the BIDS specification. To this
15
15
  # License: BSD (3-clause)
16
16
  from __future__ import annotations
17
17
 
18
- from pathlib import Path
19
-
20
- from mne.datasets import fetch_dataset
21
-
22
- from braindecode.datasets import BIDSDataset
23
- from braindecode.datasets.utils import _correct_dataset_path
18
+ from braindecode.datasets.utils import _ZenodoBIDSDataset
24
19
 
25
20
  SIENA_URL = "https://zenodo.org/records/10640762/files/BIDS_Siena.zip"
26
21
  SIENA_archive_name = "SIENA.zip"
@@ -37,7 +32,7 @@ SIENA_dataset_params = {
37
32
  }
38
33
 
39
34
 
40
- class SIENA(BIDSDataset):
35
+ class SIENA(_ZenodoBIDSDataset):
41
36
  """The Siena EEG Dataset.
42
37
 
43
38
  The database consists of EEG recordings of 14 patients acquired at the Unit of Neurology
@@ -128,35 +123,6 @@ class SIENA(BIDSDataset):
128
123
  automated seizure detection algorithms. Epilepsia, 66, 14-24.
129
124
  """
130
125
 
131
- def __init__(self, root=None, *args, **kwargs):
132
- # Download dataset if not present
133
- if root is None:
134
- path_root = fetch_dataset(
135
- dataset_params=SIENA_dataset_params,
136
- path=None,
137
- processor="unzip",
138
- force_update=False,
139
- )
140
- # First time we fetch the dataset, we need to move the files to the
141
- # correct directory.
142
- path_root = _correct_dataset_path(
143
- path_root, SIENA_archive_name, "BIDS_Siena"
144
- )
145
- else:
146
- # Validate that the provided root is a valid BIDS dataset
147
- if not Path(f"{root}/participants.tsv").exists():
148
- raise ValueError(
149
- f"The provided root directory {root} does not contain a valid "
150
- "BIDS dataset (missing participants.tsv). Please ensure the "
151
- "root points directly to the BIDS dataset directory."
152
- )
153
- path_root = root
154
-
155
- kwargs["root"] = path_root
156
-
157
- super().__init__(
158
- *args,
159
- extensions=".edf",
160
- check=False,
161
- **kwargs,
162
- )
126
+ _dataset_params = SIENA_dataset_params
127
+ _archive_name = SIENA_archive_name
128
+ _unzipped_dir = "BIDS_Siena"
@@ -57,52 +57,6 @@ def ensure_metafiles_exist():
57
57
  _download_if_missing(file_path, url)
58
58
 
59
59
 
60
- def _update_pc18_sleep_records(fname=PC18_RECORDS):
61
- """Create CSV file with information about available PC18 recordings."""
62
- # Load and massage the checksums.
63
- sha_train_df = pd.read_csv(
64
- PC18_SHA1_TRAINING,
65
- sep=" ",
66
- header=None,
67
- names=["sha", "fname"],
68
- engine="python",
69
- )
70
- sha_test_df = pd.read_csv(
71
- PC18_SHA1_TEST, sep=" ", header=None, names=["sha", "fname"], engine="python"
72
- )
73
- sha_train_df["Split"] = "training"
74
- sha_test_df["Split"] = "test"
75
- sha_df = pd.concat([sha_train_df, sha_test_df], axis=0, ignore_index=True)
76
- select_records = (
77
- sha_df.fname.str.startswith("tr") | sha_df.fname.str.startswith("te")
78
- ) & ~sha_df.fname.str.endswith("arousal.mat")
79
- sha_df = sha_df[select_records]
80
- sha_df["Record"] = sha_df["fname"].str.split("/", expand=True)[0]
81
- sha_df["fname"] = sha_df[["Split", "fname"]].agg("/".join, axis=1)
82
-
83
- # Load and massage the data.
84
- data = pd.read_csv(PC18_INFO)
85
-
86
- data = data.reset_index().rename({"index": "Subject"}, axis=1)
87
- data["Sex"] = (
88
- data["Sex"].map({"F": "female", "M": "male", "m": "male"}).astype("category")
89
- )
90
- data = sha_df.merge(data, on="Record")
91
-
92
- data["Record type"] = (
93
- data["fname"]
94
- .str.split(".", expand=True)[1]
95
- .map({"hea": "Header", "mat": "PSG", "arousal": "Arousal"})
96
- .astype("category")
97
- )
98
- data = data[
99
- ["Subject", "Record", "Record type", "Split", "Age", "Sex", "sha", "fname"]
100
- ].sort_values(by="Subject")
101
-
102
- # Save the data.
103
- data.to_csv(fname, index=False)
104
-
105
-
106
60
  def _data_path(path=None):
107
61
  """Get path to local copy of PC18 dataset."""
108
62
  key = "PC18_DATASET_PATH"
@@ -9,6 +9,10 @@ from __future__ import annotations
9
9
  import os
10
10
  from pathlib import Path
11
11
 
12
+ from mne.datasets import fetch_dataset
13
+
14
+ from .bids import BIDSDataset
15
+
12
16
 
13
17
  def _correct_dataset_path(
14
18
  path: str, archive_name: str, subfolder_name: str | None = None
@@ -65,3 +69,36 @@ def _correct_dataset_path(
65
69
  path = subfolder_path
66
70
 
67
71
  return path
72
+
73
+
74
+ class _ZenodoBIDSDataset(BIDSDataset):
75
+ """A BIDS dataset in EDF files, downloaded from a Zenodo archive when no
76
+ ``root`` is given. Subclasses set the three class attributes below."""
77
+
78
+ _dataset_params: dict
79
+ _archive_name: str # the downloaded archive
80
+ _unzipped_dir: str # the folder the archive extracts to
81
+
82
+ def __init__(self, root=None, *args, **kwargs):
83
+ if root is None:
84
+ path_root = fetch_dataset(
85
+ dataset_params=self._dataset_params,
86
+ path=None,
87
+ processor="unzip",
88
+ force_update=False,
89
+ )
90
+ # The first fetch extracts into a nested folder: point at the data.
91
+ path_root = _correct_dataset_path(
92
+ path_root, self._archive_name, self._unzipped_dir
93
+ )
94
+ elif not Path(f"{root}/participants.tsv").exists():
95
+ raise ValueError(
96
+ f"The provided root directory {root} does not contain a valid "
97
+ "BIDS dataset (missing participants.tsv). Please ensure the "
98
+ "root points directly to the BIDS dataset directory."
99
+ )
100
+ else:
101
+ path_root = root
102
+ super().__init__(
103
+ *args, root=path_root, extensions=".edf", check=False, **kwargs
104
+ )
@@ -1,5 +1,7 @@
1
+ from .attention import scaled_dot_product_attention
1
2
  from .functions import (
2
3
  _get_gaussian_kernel1d,
4
+ apply_rotary,
3
5
  daubechies_filters,
4
6
  drop_path,
5
7
  dwt_max_level,
@@ -10,6 +12,9 @@ from .functions import (
10
12
  pairwise_iou_1d,
11
13
  plv_time,
12
14
  prefer_fft_conv,
15
+ rotary_angles,
16
+ rotary_frequencies,
17
+ rotate_half,
13
18
  rotate_pairs,
14
19
  safe_log,
15
20
  sinusoidal_positional_encoding,
@@ -17,10 +22,16 @@ from .functions import (
17
22
  square,
18
23
  wavelet_decomposition,
19
24
  )
20
- from .initialization import glorot_weight_zero_bias, rescale_parameter
25
+ from .initialization import (
26
+ glorot_weight_zero_bias,
27
+ init_weights_,
28
+ rescale_parameter,
29
+ )
30
+ from .patches import pad_or_crop_to_patches, patch_count
21
31
 
22
32
  __all__ = [
23
33
  "_get_gaussian_kernel1d",
34
+ "apply_rotary",
24
35
  "daubechies_filters",
25
36
  "drop_path",
26
37
  "dwt_max_level",
@@ -28,15 +39,22 @@ __all__ = [
28
39
  "hilbert_freq",
29
40
  "identity",
30
41
  "iou_1d",
42
+ "pad_or_crop_to_patches",
31
43
  "pairwise_iou_1d",
44
+ "patch_count",
32
45
  "plv_time",
33
46
  "prefer_fft_conv",
47
+ "rotary_angles",
48
+ "rotary_frequencies",
49
+ "rotate_half",
34
50
  "rotate_pairs",
35
51
  "safe_log",
52
+ "scaled_dot_product_attention",
36
53
  "sinusoidal_positional_encoding",
37
54
  "spectral_input",
38
55
  "square",
39
56
  "wavelet_decomposition",
40
57
  "glorot_weight_zero_bias",
41
58
  "rescale_parameter",
59
+ "init_weights_",
42
60
  ]