braindecode 1.6.0.dev1024__tar.gz → 1.6.1.dev1034__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 (171) hide show
  1. {braindecode-1.6.0.dev1024/braindecode.egg-info → braindecode-1.6.1.dev1034}/PKG-INFO +1 -1
  2. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/bids/hub.py +5 -0
  3. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/__init__.py +2 -1
  4. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/contrawr.py +2 -0
  5. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/deepsleepnet.py +2 -0
  6. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/eegminer.py +2 -0
  7. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/eegpt.py +29 -0
  8. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/eegsym.py +2 -0
  9. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/summary.csv +1 -0
  10. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/usleep.py +2 -0
  11. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/util.py +39 -0
  12. braindecode-1.6.1.dev1034/braindecode/version.py +1 -0
  13. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034/braindecode.egg-info}/PKG-INFO +1 -1
  14. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/api.rst +1 -0
  15. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/whats_new.rst +29 -3
  16. braindecode-1.6.0.dev1024/braindecode/version.py +0 -1
  17. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/LICENSE.txt +0 -0
  18. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/MANIFEST.in +0 -0
  19. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/NOTICE.txt +0 -0
  20. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/README.rst +0 -0
  21. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/__init__.py +0 -0
  22. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/augmentation/__init__.py +0 -0
  23. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/augmentation/base.py +0 -0
  24. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/augmentation/functional.py +0 -0
  25. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/augmentation/transforms.py +0 -0
  26. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/classifier.py +0 -0
  27. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/__init__.py +0 -0
  28. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/base.py +0 -0
  29. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/bbci.py +0 -0
  30. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/bcicomp.py +0 -0
  31. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/bids/__init__.py +0 -0
  32. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/bids/datasets.py +0 -0
  33. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/bids/format.py +0 -0
  34. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/bids/hub_format.py +0 -0
  35. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/bids/hub_io.py +0 -0
  36. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/bids/hub_validation.py +0 -0
  37. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/bids/iterable.py +0 -0
  38. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/chb_mit.py +0 -0
  39. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/mne.py +0 -0
  40. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/moabb.py +0 -0
  41. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/nmt.py +0 -0
  42. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/registry.py +0 -0
  43. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/siena.py +0 -0
  44. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/sleep_physio_challe_18.py +0 -0
  45. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/sleep_physionet.py +0 -0
  46. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/tuh.py +0 -0
  47. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/utils.py +0 -0
  48. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datasets/xy.py +0 -0
  49. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datautil/__init__.py +0 -0
  50. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datautil/channel_utils.py +0 -0
  51. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datautil/hub_formats.py +0 -0
  52. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datautil/serialization.py +0 -0
  53. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/datautil/util.py +0 -0
  54. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/eegneuralnet.py +0 -0
  55. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/functional/__init__.py +0 -0
  56. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/functional/functions.py +0 -0
  57. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/functional/initialization.py +0 -0
  58. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/atcnet.py +0 -0
  59. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/attentionbasenet.py +0 -0
  60. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/attn_sleep.py +0 -0
  61. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/base.py +0 -0
  62. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/bendr.py +0 -0
  63. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/biot.py +0 -0
  64. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/brainmodule.py +0 -0
  65. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/cbramod.py +0 -0
  66. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/codebrain.py +0 -0
  67. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/config.py +0 -0
  68. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/ctnet.py +0 -0
  69. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/deep4.py +0 -0
  70. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/dgcnn.py +0 -0
  71. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/eegconformer.py +0 -0
  72. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/eeginception_erp.py +0 -0
  73. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/eeginception_mi.py +0 -0
  74. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/eegitnet.py +0 -0
  75. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/eegnet.py +0 -0
  76. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/eegnex.py +0 -0
  77. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/eegsimpleconv.py +0 -0
  78. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/eegtcnet.py +0 -0
  79. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/emg2qwerty.py +0 -0
  80. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/fbcnet.py +0 -0
  81. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/fblightconvnet.py +0 -0
  82. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/fbmsnet.py +0 -0
  83. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/hybrid.py +0 -0
  84. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/ifnet.py +0 -0
  85. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/interpolated.py +0 -0
  86. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/labram.py +0 -0
  87. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/luna.py +0 -0
  88. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/medformer.py +0 -0
  89. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/meta_neuromotor.py +0 -0
  90. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/msvtnet.py +0 -0
  91. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/patchedtransformer.py +0 -0
  92. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/reve.py +0 -0
  93. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/sccnet.py +0 -0
  94. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/shallow_fbcsp.py +0 -0
  95. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/signal_jepa.py +0 -0
  96. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/sinc_shallow.py +0 -0
  97. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
  98. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
  99. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/sparcnet.py +0 -0
  100. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/sstdpn.py +0 -0
  101. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/syncnet.py +0 -0
  102. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/tcn.py +0 -0
  103. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/tidnet.py +0 -0
  104. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/models/tsinception.py +0 -0
  105. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/modules/__init__.py +0 -0
  106. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/modules/activation.py +0 -0
  107. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/modules/attention.py +0 -0
  108. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/modules/blocks.py +0 -0
  109. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/modules/convolution.py +0 -0
  110. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/modules/filter.py +0 -0
  111. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/modules/interpolation.py +0 -0
  112. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/modules/layers.py +0 -0
  113. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/modules/linear.py +0 -0
  114. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/modules/parametrization.py +0 -0
  115. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/modules/stats.py +0 -0
  116. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/modules/util.py +0 -0
  117. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/modules/wrapper.py +0 -0
  118. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/preprocessing/__init__.py +0 -0
  119. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/preprocessing/eegprep_preprocess.py +0 -0
  120. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/preprocessing/mne_preprocess.py +0 -0
  121. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/preprocessing/preprocess.py +0 -0
  122. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/preprocessing/util.py +0 -0
  123. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/preprocessing/windowers.py +0 -0
  124. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/regressor.py +0 -0
  125. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/samplers/__init__.py +0 -0
  126. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/samplers/base.py +0 -0
  127. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/samplers/ssl.py +0 -0
  128. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/training/__init__.py +0 -0
  129. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/training/callbacks.py +0 -0
  130. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/training/losses.py +0 -0
  131. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/training/scoring.py +0 -0
  132. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/util.py +0 -0
  133. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/visualization/__init__.py +0 -0
  134. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/visualization/attribution.py +0 -0
  135. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/visualization/confusion_matrices.py +0 -0
  136. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/visualization/frequency.py +0 -0
  137. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/visualization/metrics.py +0 -0
  138. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/visualization/sanity.py +0 -0
  139. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode/visualization/topology.py +0 -0
  140. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode.egg-info/SOURCES.txt +0 -0
  141. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode.egg-info/dependency_links.txt +0 -0
  142. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode.egg-info/requires.txt +0 -0
  143. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/braindecode.egg-info/top_level.txt +0 -0
  144. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/Makefile +0 -0
  145. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/_templates/autosummary/class.rst +0 -0
  146. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/_templates/autosummary/class_in_subdir.rst +0 -0
  147. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/_templates/autosummary/function.rst +0 -0
  148. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/_templates/autosummary/function_in_subdir.rst +0 -0
  149. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/cite.rst +0 -0
  150. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/conf.py +0 -0
  151. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/help.rst +0 -0
  152. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/index.rst +0 -0
  153. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/install/install.rst +0 -0
  154. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/install/install_pip.rst +0 -0
  155. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/install/install_source.rst +0 -0
  156. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/models/categorization/attention.rst +0 -0
  157. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/models/categorization/channel.rst +0 -0
  158. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/models/categorization/convolution.rst +0 -0
  159. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/models/categorization/filterbank.rst +0 -0
  160. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/models/categorization/gnn.rst +0 -0
  161. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/models/categorization/interpretable.rst +0 -0
  162. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/models/categorization/lbm.rst +0 -0
  163. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/models/categorization/recurrent.rst +0 -0
  164. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/models/categorization/spd.rst +0 -0
  165. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/models/models.rst +0 -0
  166. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/models/models_categorization.rst +0 -0
  167. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/models/models_table.rst +0 -0
  168. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/models/models_visualization.rst +0 -0
  169. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/docs/sg_execution_times.rst +0 -0
  170. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/pyproject.toml +0 -0
  171. {braindecode-1.6.0.dev1024 → braindecode-1.6.1.dev1034}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: braindecode
3
- Version: 1.6.0.dev1024
3
+ Version: 1.6.1.dev1034
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>
@@ -466,6 +466,7 @@ class HubDatasetMixin:
466
466
  token: Optional[str] = None,
467
467
  cache_dir: Optional[Union[str, Path]] = None,
468
468
  force_download: bool = False,
469
+ revision: str | None = None,
469
470
  **kwargs,
470
471
  ):
471
472
  """
@@ -485,6 +486,9 @@ class HubDatasetMixin:
485
486
  cache directory (~/.cache/huggingface/datasets).
486
487
  force_download : bool, default=False
487
488
  Whether to force re-download even if cached.
489
+ revision : str | None, default=None
490
+ Specific branch, tag, or commit to download. If None, uses the
491
+ repository's default revision.
488
492
  **kwargs
489
493
  Additional arguments (currently unused).
490
494
 
@@ -526,6 +530,7 @@ class HubDatasetMixin:
526
530
  token=token,
527
531
  cache_dir=cache_dir,
528
532
  force_download=force_download,
533
+ revision=revision,
529
534
  )
530
535
 
531
536
  # Load format info
@@ -21,7 +21,7 @@ from .eegitnet import EEGITNet
21
21
  from .eegminer import EEGMiner
22
22
  from .eegnet import EEGNet, EEGNetv4
23
23
  from .eegnex import EEGNeX
24
- from .eegpt import EEGPT
24
+ from .eegpt import EEGPT, InterpolatedEEGPT
25
25
  from .eegsimpleconv import EEGSimpleConv
26
26
  from .eegsym import EEGSym
27
27
  from .eegtcnet import EEGTCNet
@@ -85,6 +85,7 @@ __all__ = [
85
85
  "BrainModule",
86
86
  "EEGConformer",
87
87
  "EEGPT",
88
+ "InterpolatedEEGPT",
88
89
  "EEGInceptionERP",
89
90
  "EEGInceptionMI",
90
91
  "EEGITNet",
@@ -5,6 +5,7 @@ import torch.nn as nn
5
5
  from mne.utils import warn
6
6
 
7
7
  from braindecode.models.base import EEGModuleMixin
8
+ from braindecode.models.util import _disable_batch_norm_training_if_batch_size_one
8
9
 
9
10
 
10
11
  class ContraWR(EEGModuleMixin, nn.Module):
@@ -122,6 +123,7 @@ class ContraWR(EEGModuleMixin, nn.Module):
122
123
  self.activation_layer = activation()
123
124
  self.final_layer = nn.Linear(emb_size, self.n_outputs)
124
125
 
126
+ @_disable_batch_norm_training_if_batch_size_one
125
127
  def forward(self, X: torch.Tensor) -> torch.Tensor:
126
128
  """
127
129
  Forward pass.
@@ -7,6 +7,7 @@ import torch.nn as nn
7
7
  from einops.layers.torch import Rearrange
8
8
 
9
9
  from braindecode.models.base import EEGModuleMixin
10
+ from braindecode.models.util import _disable_batch_norm_training_if_batch_size_one
10
11
 
11
12
 
12
13
  class DeepSleepNet(EEGModuleMixin, nn.Module):
@@ -289,6 +290,7 @@ class DeepSleepNet(EEGModuleMixin, nn.Module):
289
290
  else nn.Linear(fc_out_features, self.n_outputs)
290
291
  )
291
292
 
293
+ @_disable_batch_norm_training_if_batch_size_one
292
294
  def forward(self, x):
293
295
  if x.ndim == 3:
294
296
  x = x.unsqueeze(1)
@@ -13,6 +13,7 @@ from torch import nn
13
13
 
14
14
  import braindecode.functional as F
15
15
  from braindecode.models.base import EEGModuleMixin
16
+ from braindecode.models.util import _disable_batch_norm_training_if_batch_size_one
16
17
  from braindecode.modules import GeneralizedGaussianFilter
17
18
 
18
19
  _eeg_miner_methods = ["mag", "corr", "plv"]
@@ -191,6 +192,7 @@ class EEGMiner(EEGModuleMixin, nn.Module):
191
192
  self.final_layer = nn.Linear(self.n_features, self.n_outputs)
192
193
  nn.init.zeros_(self.final_layer.bias)
193
194
 
195
+ @_disable_batch_norm_training_if_batch_size_one
194
196
  def forward(self, x):
195
197
  """x: (batch, electrodes, time)"""
196
198
  batch = x.shape[0]
@@ -1435,3 +1435,32 @@ class _EEGTransformer(nn.Module):
1435
1435
  )
1436
1436
 
1437
1437
  return x
1438
+
1439
+
1440
+ # -----------------------------------------------------------------------------
1441
+ # InterpolatedEEGPT — experimental channel-interpolation variant of EEGPT
1442
+ # -----------------------------------------------------------------------------
1443
+ # A :func:`~braindecode.models.interpolated.InterpolatedModel` wrapper around
1444
+ # :class:`EEGPT` whose target channel set is the canonical ``EEGPT_CHANNELS``.
1445
+ # Accepts arbitrary user ``chs_info``; projects to the canonical channels via an
1446
+ # MNE-backed (frozen by default) interpolation matrix.
1447
+
1448
+ from mne.channels import make_standard_montage # noqa: E402
1449
+
1450
+ from braindecode.models.interpolated import InterpolatedModel # noqa: E402
1451
+
1452
+ montage = make_standard_montage("standard_1020")
1453
+ ch_pos = {
1454
+ ch.upper(): (ch, loc) for ch, loc in montage.get_positions()["ch_pos"].items()
1455
+ }
1456
+ _EEGPT_TARGET_CHS_INFO = [
1457
+ {
1458
+ "ch_name": ch_pos[ch.upper()][0],
1459
+ "kind": "eeg",
1460
+ "loc": ch_pos[ch.upper()][1],
1461
+ }
1462
+ for ch in EEGPT_CHANNELS
1463
+ ]
1464
+ InterpolatedEEGPT = InterpolatedModel(
1465
+ EEGPT, _EEGPT_TARGET_CHS_INFO, name="InterpolatedEEGPT"
1466
+ )
@@ -11,6 +11,7 @@ from braindecode.datautil.channel_utils import (
11
11
  match_hemisphere_chans,
12
12
  )
13
13
  from braindecode.models.base import EEGModuleMixin
14
+ from braindecode.models.util import _disable_batch_norm_training_if_batch_size_one
14
15
 
15
16
 
16
17
  class EEGSym(EEGModuleMixin, nn.Module):
@@ -363,6 +364,7 @@ class EEGSym(EEGModuleMixin, nn.Module):
363
364
  out_features=self.n_outputs,
364
365
  )
365
366
 
367
+ @_disable_batch_norm_training_if_batch_size_one
366
368
  def forward(self, x):
367
369
  """Forward pass.
368
370
 
@@ -53,5 +53,6 @@ REVE,General,Classification,200,"n_outputs, n_times, n_chans",69481476,"REVE(n_t
53
53
  DGCNN,Emotion Recognition,Classification,128,"n_chans, n_outputs, n_times, chs_info",1037385,"DGCNN(n_chans=62, n_outputs=4, n_times=128)","Graph Neural Network,Channel"
54
54
  InterpolatedBENDR,General,"Classification,Embedding",250,"chs_info, n_outputs, n_times",157143101,"InterpolatedBENDR(chs_info=<user>, n_outputs=4, n_times=1000)","Foundation Model,Convolution,Channel"
55
55
  InterpolatedBIOT,"Sleep Staging, Epilepsy",Classification,200,"chs_info, n_outputs, n_times, sfreq",3184101,"InterpolatedBIOT(chs_info=<user>, n_outputs=5, sfreq=200, n_times=6000)","Foundation Model,Channel"
56
+ InterpolatedEEGPT,General,Classification,256,"chs_info, n_outputs, n_times",25323137,"InterpolatedEEGPT(chs_info=<user>, n_outputs=4, n_times=1024)","Foundation Model,Attention/Transformer,Channel"
56
57
  InterpolatedLaBraM,General,"Classification, Embedding",200,"chs_info, n_outputs, n_times",5866196,"InterpolatedLaBraM(chs_info=<user>, n_outputs=4, n_times=1000)","Convolution,Foundation Model,Channel"
57
58
  InterpolatedSignalJEPA,"Motor Imagery, ERP, SSVEP",Embedding,128,"chs_info",3456882,"InterpolatedSignalJEPA(chs_info=<user>)","Convolution,Channel,Foundation Model"
@@ -9,6 +9,7 @@ import torch
9
9
  from torch import nn
10
10
 
11
11
  from braindecode.models.base import EEGModuleMixin
12
+ from braindecode.models.util import _disable_batch_norm_training_if_batch_size_one
12
13
 
13
14
 
14
15
  class USleep(EEGModuleMixin, nn.Module):
@@ -295,6 +296,7 @@ class USleep(EEGModuleMixin, nn.Module):
295
296
  # output is (B, n_classes, S)
296
297
  )
297
298
 
299
+ @_disable_batch_norm_training_if_batch_size_one
298
300
  def forward(self, x: torch.Tensor) -> torch.Tensor:
299
301
  """If input x has shape (B, S, C, T), return y_pred of shape (B, n_classes, S).
300
302
  If input x has shape (B, C, T), return y_pred of shape (B, n_classes).
@@ -12,6 +12,8 @@ from typing import Any, Dict, Literal, Optional, Sequence
12
12
  import numpy as np
13
13
  import pandas as pd
14
14
  import pydantic
15
+ import torch # noqa: F401 # exposed so TorchScript can resolve ``torch`` through the BatchNorm-guard wrapper's __globals__
16
+ from torch import nn
15
17
 
16
18
  models_dict = {}
17
19
 
@@ -23,6 +25,38 @@ _EEG_PARAMS = frozenset(
23
25
  )
24
26
 
25
27
  _JSON_SAFE = (int, float, str, bool, type(None))
28
+ _BATCH_NORM_MODULES = (
29
+ nn.BatchNorm1d,
30
+ nn.BatchNorm2d,
31
+ nn.BatchNorm3d,
32
+ nn.SyncBatchNorm,
33
+ )
34
+
35
+
36
+ def _disable_batch_norm_training_if_batch_size_one(forward):
37
+ """Temporarily set BatchNorm layers to train(False) for batch size one."""
38
+ forward_signature = inspect.signature(forward)
39
+
40
+ @wraps(forward)
41
+ def wrapped(self, *args, **kwargs):
42
+ bound = forward_signature.bind(self, *args, **kwargs)
43
+ x = next(value for name, value in bound.arguments.items() if name != "self")
44
+ batch_norms = []
45
+ if self.training and x.shape[0] == 1:
46
+ batch_norms = [
47
+ layer
48
+ for layer in self.modules()
49
+ if isinstance(layer, _BATCH_NORM_MODULES) and layer.training
50
+ ]
51
+ for batch_norm in batch_norms:
52
+ batch_norm.train(False)
53
+ try:
54
+ return forward(self, *args, **kwargs)
55
+ finally:
56
+ for batch_norm in batch_norms:
57
+ batch_norm.train(True)
58
+
59
+ return wrapped
26
60
 
27
61
 
28
62
  def _is_jsonable(val):
@@ -275,6 +309,11 @@ models_mandatory_parameters: list[
275
309
  ("EEGITNet", ["n_chans", "n_outputs", "n_times"], None),
276
310
  ("EEGNet", ["n_chans", "n_outputs", "n_times"], None),
277
311
  ("EEGPT", ["n_chans", "n_outputs", "n_times", "chs_info"], None),
312
+ (
313
+ "InterpolatedEEGPT",
314
+ ["chs_info", "n_outputs", "n_times"],
315
+ {"chs_info": _chs_info_4ch}, # MNE interpolation needs >=4 channels
316
+ ),
278
317
  ("ShallowFBCSPNet", ["n_chans", "n_outputs", "n_times"], None),
279
318
  (
280
319
  "SleepStagerBlanco2020",
@@ -0,0 +1 @@
1
+ __version__ = "1.6.1.dev1034"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: braindecode
3
- Version: 1.6.0.dev1024
3
+ Version: 1.6.1.dev1034
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>
@@ -160,6 +160,7 @@ interface for all EEG models and can derive variable names when needed.
160
160
  IFNet
161
161
  InterpolatedBENDR
162
162
  InterpolatedBIOT
163
+ InterpolatedEEGPT
163
164
  InterpolatedLaBraM
164
165
  InterpolatedModel
165
166
  InterpolatedSignalJEPA
@@ -22,12 +22,21 @@
22
22
  .. _current:
23
23
 
24
24
 
25
- Current 1.6.0 (GitHub)
25
+ Current 1.6.1 (GitHub)
26
26
  ===============================
27
27
 
28
28
  Enhancements
29
29
  ============
30
30
 
31
+ - Add a ``revision`` keyword argument to
32
+ :meth:`braindecode.datasets.BaseConcatDataset.pull_from_hub` so callers can
33
+ pin dataset downloads to a specific branch, tag, or commit on the Hugging
34
+ Face Hub.
35
+ - Add :class:`braindecode.models.InterpolatedEEGPT`, a channel-interpolation
36
+ variant of :class:`braindecode.models.EEGPT` built with
37
+ :func:`~braindecode.models.interpolated.InterpolatedModel`.
38
+ By `Pierre Guetschel`_.
39
+
31
40
  API and behavior changes
32
41
  ========================
33
42
 
@@ -41,12 +50,27 @@ Requirements
41
50
  Bug fixes
42
51
  ==========
43
52
 
44
- - None yet
53
+ - Fix :class:`~braindecode.models.ContraWR`,
54
+ :class:`~braindecode.models.DeepSleepNet`, and
55
+ :class:`~braindecode.models.EEGMiner` raising a confusing
56
+ :class:`ValueError` on ``batch_size=1`` forward passes in train mode due to
57
+ :class:`~torch.nn.BatchNorm1d` (and its 2D/3D variants) requiring more than
58
+ one sample per channel during training. The affected BatchNorm layers now
59
+ use running statistics when ``batch_size == 1`` in train mode.
60
+ By `Bruno Aristimunha`_.
61
+
62
+ - Fix incorrect import path in CONTRIBUTING.md by `Yiheng Li`_
45
63
 
46
64
  Code health
47
65
  ============
48
66
 
49
- - None yet
67
+ - Add a monthly scheduled workflow that cuts a stable PyPI release on
68
+ the 1st of every month, complementing the existing per-push ``.devN``
69
+ pipeline. (:gh:`1030` by `Bruno Aristimunha`_)
70
+
71
+ - Make the monthly release workflow push only the release tag and open a
72
+ pull request for the version bump, so it never needs to push to the
73
+ protected ``master`` branch. (:gh:`1031` by `Bruno Aristimunha`_)
50
74
 
51
75
 
52
76
  Current 1.5.1 (stable)
@@ -1217,3 +1241,5 @@ Authors
1217
1241
  .. _Sarthak Tayal: https://github.com/tayal-sarthak
1218
1242
  .. _Vandit Shah: https://github.com/ShahVandit
1219
1243
  .. _Léo Burgund: https://github.com/leob000
1244
+ .. _Adam Mounir: https://github.com/adammounir
1245
+ .. _Yiheng Li: https://github.com/YihengLi-1
@@ -1 +0,0 @@
1
- __version__ = "1.6.0.dev1024"