braindecode 1.7.0.dev179223210__tar.gz → 1.7.0.dev182244820__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 (176) hide show
  1. {braindecode-1.7.0.dev179223210/braindecode.egg-info → braindecode-1.7.0.dev182244820}/PKG-INFO +1 -1
  2. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/classifier.py +7 -7
  3. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/functional/functions.py +5 -2
  4. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegminer.py +38 -62
  5. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/reve.py +32 -33
  6. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/filter.py +16 -10
  7. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/regressor.py +7 -7
  8. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/training/scoring.py +7 -5
  9. braindecode-1.7.0.dev182244820/braindecode/version.py +1 -0
  10. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820/braindecode.egg-info}/PKG-INFO +1 -1
  11. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/index.rst +6 -6
  12. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/models.rst +2 -2
  13. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/models_table.rst +9 -0
  14. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/whats_new.rst +16 -1
  15. braindecode-1.7.0.dev179223210/braindecode/version.py +0 -1
  16. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/LICENSE.txt +0 -0
  17. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/MANIFEST.in +0 -0
  18. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/NOTICE.txt +0 -0
  19. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/README.rst +0 -0
  20. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/__init__.py +0 -0
  21. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/augmentation/__init__.py +0 -0
  22. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/augmentation/base.py +0 -0
  23. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/augmentation/functional.py +0 -0
  24. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/augmentation/transforms.py +0 -0
  25. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/__init__.py +0 -0
  26. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/base.py +0 -0
  27. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bbci.py +0 -0
  28. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bcicomp.py +0 -0
  29. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/__init__.py +0 -0
  30. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/datasets.py +0 -0
  31. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/format.py +0 -0
  32. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/hub.py +0 -0
  33. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/hub_format.py +0 -0
  34. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/hub_io.py +0 -0
  35. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/hub_validation.py +0 -0
  36. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/bids/iterable.py +0 -0
  37. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/chb_mit.py +0 -0
  38. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/collate.py +0 -0
  39. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/mne.py +0 -0
  40. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/moabb.py +0 -0
  41. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/nmt.py +0 -0
  42. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/registry.py +0 -0
  43. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/siena.py +0 -0
  44. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/sleep_physio_challe_18.py +0 -0
  45. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/sleep_physionet.py +0 -0
  46. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/tuh.py +0 -0
  47. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/utils.py +0 -0
  48. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datasets/xy.py +0 -0
  49. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datautil/__init__.py +0 -0
  50. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datautil/channel_utils.py +0 -0
  51. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datautil/hub_formats.py +0 -0
  52. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datautil/serialization.py +0 -0
  53. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/datautil/util.py +0 -0
  54. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/eegneuralnet.py +0 -0
  55. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/functional/__init__.py +0 -0
  56. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/functional/initialization.py +0 -0
  57. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/__init__.py +0 -0
  58. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/atcnet.py +0 -0
  59. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/attentionbasenet.py +0 -0
  60. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/attn_sleep.py +0 -0
  61. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/base.py +0 -0
  62. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/bendr.py +0 -0
  63. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/biot.py +0 -0
  64. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/brainmodule.py +0 -0
  65. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/cbramod.py +0 -0
  66. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/codebrain.py +0 -0
  67. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/config.py +0 -0
  68. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/contrawr.py +0 -0
  69. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/ctnet.py +0 -0
  70. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/deep4.py +0 -0
  71. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/deepsleepnet.py +0 -0
  72. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/dgcnn.py +0 -0
  73. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegconformer.py +0 -0
  74. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegdino.py +0 -0
  75. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eeginception_erp.py +0 -0
  76. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eeginception_mi.py +0 -0
  77. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegitnet.py +0 -0
  78. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegnet.py +0 -0
  79. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegnex.py +0 -0
  80. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegpt.py +0 -0
  81. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegsimpleconv.py +0 -0
  82. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegsym.py +0 -0
  83. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/eegtcnet.py +0 -0
  84. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/emg2qwerty.py +0 -0
  85. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/fbcnet.py +0 -0
  86. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/fblightconvnet.py +0 -0
  87. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/fbmsnet.py +0 -0
  88. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/hybrid.py +0 -0
  89. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/ifnet.py +0 -0
  90. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/interpolated.py +0 -0
  91. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/labram.py +0 -0
  92. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/luna.py +0 -0
  93. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/medformer.py +0 -0
  94. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/meta_neuromotor.py +0 -0
  95. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/msvtnet.py +0 -0
  96. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/mvpformer.py +0 -0
  97. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/patchedtransformer.py +0 -0
  98. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/sccnet.py +0 -0
  99. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/shallow_fbcsp.py +0 -0
  100. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/signal_jepa.py +0 -0
  101. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/sinc_shallow.py +0 -0
  102. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
  103. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
  104. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/sparcnet.py +0 -0
  105. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/sstdpn.py +0 -0
  106. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/steegformer.py +0 -0
  107. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/summary.csv +0 -0
  108. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/syncnet.py +0 -0
  109. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/tcformer.py +0 -0
  110. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/tcn.py +0 -0
  111. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/tidnet.py +0 -0
  112. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/tsinception.py +0 -0
  113. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/usleep.py +0 -0
  114. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/models/util.py +0 -0
  115. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/__init__.py +0 -0
  116. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/activation.py +0 -0
  117. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/attention.py +0 -0
  118. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/blocks.py +0 -0
  119. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/convolution.py +0 -0
  120. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/interpolation.py +0 -0
  121. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/layers.py +0 -0
  122. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/linear.py +0 -0
  123. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/parametrization.py +0 -0
  124. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/stats.py +0 -0
  125. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/util.py +0 -0
  126. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/modules/wrapper.py +0 -0
  127. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/preprocessing/__init__.py +0 -0
  128. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/preprocessing/eegprep_preprocess.py +0 -0
  129. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/preprocessing/mne_preprocess.py +0 -0
  130. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/preprocessing/preprocess.py +0 -0
  131. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/preprocessing/util.py +0 -0
  132. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/preprocessing/windowers.py +0 -0
  133. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/samplers/__init__.py +0 -0
  134. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/samplers/base.py +0 -0
  135. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/samplers/ssl.py +0 -0
  136. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/training/__init__.py +0 -0
  137. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/training/callbacks.py +0 -0
  138. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/training/losses.py +0 -0
  139. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/util.py +0 -0
  140. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/visualization/__init__.py +0 -0
  141. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/visualization/attribution.py +0 -0
  142. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/visualization/confusion_matrices.py +0 -0
  143. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/visualization/frequency.py +0 -0
  144. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/visualization/metrics.py +0 -0
  145. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/visualization/sanity.py +0 -0
  146. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode/visualization/topology.py +0 -0
  147. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode.egg-info/SOURCES.txt +0 -0
  148. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode.egg-info/dependency_links.txt +0 -0
  149. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode.egg-info/requires.txt +0 -0
  150. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/braindecode.egg-info/top_level.txt +0 -0
  151. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/Makefile +0 -0
  152. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/_templates/autosummary/class.rst +0 -0
  153. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/_templates/autosummary/class_in_subdir.rst +0 -0
  154. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/_templates/autosummary/function.rst +0 -0
  155. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/_templates/autosummary/function_in_subdir.rst +0 -0
  156. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/api.rst +0 -0
  157. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/cite.rst +0 -0
  158. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/conf.py +0 -0
  159. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/help.rst +0 -0
  160. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/install/install.rst +0 -0
  161. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/install/install_pip.rst +0 -0
  162. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/install/install_source.rst +0 -0
  163. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/attention.rst +0 -0
  164. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/channel.rst +0 -0
  165. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/convolution.rst +0 -0
  166. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/filterbank.rst +0 -0
  167. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/gnn.rst +0 -0
  168. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/interpretable.rst +0 -0
  169. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/lbm.rst +0 -0
  170. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/recurrent.rst +0 -0
  171. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/categorization/spd.rst +0 -0
  172. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/models_categorization.rst +0 -0
  173. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/models/models_visualization.rst +0 -0
  174. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/docs/sg_execution_times.rst +0 -0
  175. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/pyproject.toml +0 -0
  176. {braindecode-1.7.0.dev179223210 → braindecode-1.7.0.dev182244820}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: braindecode
3
- Version: 1.7.0.dev179223210
3
+ Version: 1.7.0.dev182244820
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>
@@ -3,6 +3,7 @@
3
3
  # Lukas Gemein <l.gemein@gmail.com>
4
4
  # Bruno Aristimunha <b.aristimunha@gmail.com>
5
5
  # Pierre Guetschel <pierre.guetschel@gmail.com>
6
+ # Sarthak Tayal <sarthaktayal2@gmail.com>
6
7
  #
7
8
  # License: BSD (3-clause)
8
9
 
@@ -195,9 +196,7 @@ class EEGClassifier(_EEGNeuralNet, NeuralNetClassifier):
195
196
  return self.predict_proba(X).argmax(1)
196
197
 
197
198
  def predict_trials(self, X, return_targets=True):
198
- """Create trialwise predictions and optionally also return trialwise.
199
-
200
- labels from cropped dataset.
199
+ """Create trialwise predictions from a cropped dataset.
201
200
 
202
201
  Parameters
203
202
  ----------
@@ -212,10 +211,11 @@ class EEGClassifier(_EEGNeuralNet, NeuralNetClassifier):
212
211
  3-dimensional array (n_trials x n_classes x n_predictions), where
213
212
  the number of predictions depend on the chosen window size and the
214
213
  receptive field of the network.
215
- trial_labels : np.ndarray
216
- 2-dimensional array (n_trials x n_targets) where the number of
217
- targets depends on the decoding paradigm and can be either a single
218
- value, multiple values, or a sequence.
214
+ trial_targets : np.ndarray
215
+ Ground-truth targets from the dataset in a 2-dimensional array
216
+ (n_trials x n_targets). Only returned when ``return_targets=True``.
217
+ The number of targets depends on the decoding paradigm and can be
218
+ either a single value, multiple values, or a sequence.
219
219
  """
220
220
  if not self.cropped:
221
221
  warnings.warn(
@@ -1,5 +1,6 @@
1
1
  # Authors: Robin Schirrmeister <robintibor@gmail.com>
2
2
  # Bruno Aristimunha <b.aristimunha@gmail.com>
3
+ # Sarthak Tayal <sarthaktayal2@gmail.com>
3
4
  #
4
5
  # License: BSD (3-clause)
5
6
 
@@ -109,7 +110,7 @@ def _get_gaussian_kernel1d(kernel_size: int, sigma: float) -> torch.Tensor:
109
110
  return kernel1d
110
111
 
111
112
 
112
- def hilbert_freq(x, forward_fourier=True):
113
+ def hilbert_freq(x: torch.Tensor, forward_fourier: bool = True) -> torch.Tensor:
113
114
  r"""
114
115
  Compute the Hilbert transform using PyTorch, separating the real and
115
116
  imaginary parts.
@@ -178,7 +179,9 @@ def hilbert_freq(x, forward_fourier=True):
178
179
  return x
179
180
 
180
181
 
181
- def plv_time(x, forward_fourier=True, epsilon: float = 1e-6):
182
+ def plv_time(
183
+ x: torch.Tensor, forward_fourier: bool = True, epsilon: float = 1e-6
184
+ ) -> torch.Tensor:
182
185
  """Compute the Phase Locking Value (PLV) metric in the time domain.
183
186
 
184
187
  The Phase Locking Value (PLV) is a measure of the synchronization between
@@ -5,10 +5,9 @@
5
5
  * https://www.ipo.gov.uk/p-ipsum/Case/ApplicationNumber/GB2113420.0
6
6
  """
7
7
 
8
- from functools import partial
8
+ # Authors: Sarthak Tayal <sarthaktayal2@gmail.com>
9
9
 
10
10
  import torch
11
- from einops.layers.torch import Rearrange
12
11
  from torch import nn
13
12
 
14
13
  import braindecode.functional as F
@@ -19,6 +18,36 @@ from braindecode.modules import GeneralizedGaussianFilter
19
18
  _eeg_miner_methods = ["mag", "corr", "plv"]
20
19
 
21
20
 
21
+ class _EEGMinerFeatures(nn.Module):
22
+ def __init__(self, method, n_chans, n_filters, n_times):
23
+ super().__init__()
24
+ self.method = method
25
+ self.n_chans = n_chans
26
+ self.n_filters = n_filters
27
+ self.n_times = n_times
28
+ triu = torch.triu_indices(n_chans, n_chans, 1)
29
+ self.register_buffer("triu_row", triu[0], persistent=False)
30
+ self.register_buffer("triu_col", triu[1], persistent=False)
31
+
32
+ def forward(self, x):
33
+ if self.method == "mag":
34
+ return torch.sqrt((x * x).mean(dim=-1))
35
+ if self.method == "corr":
36
+ x = x.reshape(
37
+ x.shape[0], self.n_chans, self.n_filters, self.n_times
38
+ ).transpose(-3, -2)
39
+ x = (x - x.mean(dim=-1, keepdim=True)) / torch.sqrt(
40
+ x.var(dim=-1, keepdim=True) + 1e-6
41
+ )
42
+ x = torch.matmul(x, x.transpose(-2, -1)) / x.shape[-1]
43
+ x = x.permute(0, 2, 3, 1).abs()
44
+ else:
45
+ x = x.transpose(-4, -3)
46
+ x = F.plv_time(x, forward_fourier=False)
47
+ x = x.permute(0, 2, 3, 1)
48
+ return x[:, self.triu_row, self.triu_col, :]
49
+
50
+
22
51
  class EEGMiner(EEGModuleMixin, nn.Module):
23
52
  r"""EEGMiner from Ludwig et al (2024) [eegminer]_.
24
53
 
@@ -168,24 +197,18 @@ class EEGMiner(EEGModuleMixin, nn.Module):
168
197
  )
169
198
 
170
199
  # Forward method
200
+ self.ensure_dim = nn.Identity()
171
201
  if self.method == "mag":
172
- self.method_forward = self._apply_mag_forward
173
202
  self.n_features = self.n_chans * self.n_filters
174
- self.ensure_dim = nn.Identity()
175
203
  elif self.method == "corr":
176
- self.method_forward = partial(
177
- self._apply_corr_forward,
178
- n_chans=self.n_chans,
179
- n_filters=self.n_filters,
180
- n_times=self.n_times,
181
- )
182
204
  self.n_features = self.n_filters * self.n_chans * (self.n_chans - 1) // 2
183
- self.ensure_dim = nn.Identity()
184
205
  elif self.method == "plv":
185
- self.method_forward = partial(self._apply_plv, n_chans=self.n_chans)
186
- self.ensure_dim = Rearrange("... d -> ... 1 d")
206
+ self.ensure_dim = nn.Unflatten(-1, (1, self.n_times))
187
207
  self.n_features = (self.n_filters * self.n_chans * (self.n_chans - 1)) // 2
188
208
 
209
+ self.feature_layer = _EEGMinerFeatures(
210
+ self.method, self.n_chans, self.n_filters, self.n_times
211
+ )
189
212
  self.flatten_layer = nn.Flatten()
190
213
  # Classifier
191
214
  self.batch_layer = nn.BatchNorm1d(self.n_features, affine=False)
@@ -195,64 +218,17 @@ class EEGMiner(EEGModuleMixin, nn.Module):
195
218
  @_disable_batch_norm_training_if_batch_size_one
196
219
  def forward(self, x):
197
220
  """x: (batch, electrodes, time)"""
198
- batch = x.shape[0]
199
221
  x = self.ensure_dim(x)
200
222
  # Apply Gaussian filters in frequency domain
201
223
  # x -> (batch, electrodes * filters, time)
202
224
  x = self.filter(x)
203
225
 
204
- x = self.method_forward(x=x, batch=batch)
226
+ x = self.feature_layer(x)
205
227
  # Classifier
206
228
  # Note that the order of dimensions before flattening the feature vector is important
207
229
  # for attributing feature weights during interpretation.
208
- x = x.reshape(batch, self.n_features)
230
+ x = x.reshape(x.shape[0], self.n_features)
209
231
  x = self.batch_layer(x)
210
232
  x = self.final_layer(x)
211
233
 
212
234
  return x
213
-
214
- @staticmethod
215
- def _apply_mag_forward(x, batch=None):
216
- # Signal magnitude
217
- x = x * x
218
- x = x.mean(dim=-1)
219
- x = torch.sqrt(x)
220
- return x
221
-
222
- @staticmethod
223
- def _apply_corr_forward(
224
- x, batch, n_chans, n_filters, n_times, epilson: float = 1e-6
225
- ):
226
- x = x.reshape(batch, n_chans, n_filters, n_times).transpose(-3, -2)
227
- x = (x - x.mean(dim=-1, keepdim=True)) / torch.sqrt(
228
- x.var(dim=-1, keepdim=True) + epilson
229
- )
230
- x = torch.matmul(x, x.transpose(-2, -1)) / x.shape[-1]
231
- # Original tensor shape: [batch, n_filters, chans, chans]
232
- x = x.permute(0, 2, 3, 1)
233
- # New tensor shape: [batch, chans, chans, n_filters]
234
- # move filter channels to the end
235
- x = x.abs()
236
-
237
- # Get upper triu of symmetric connectivity matrix
238
- triu = torch.triu_indices(n_chans, n_chans, 1)
239
- x = x[:, triu[0], triu[1], :]
240
-
241
- return x
242
-
243
- @staticmethod
244
- def _apply_plv(x, n_chans, batch=None):
245
- # Compute PLV connectivity
246
- # x -> (batch, electrodes, electrodes, filters)
247
- x = x.transpose(-4, -3) # swap electrodes and filters
248
- # adjusting to compute the plv
249
- x = F.plv_time(x, forward_fourier=False)
250
- # batch, number of filters, connectivity matrix
251
- # [batch, n_filters, chans, chans]
252
- x = x.permute(0, 2, 3, 1)
253
- # [batch, chans, chans, n_filters]
254
-
255
- # Get upper triu of symmetric connectivity matrix
256
- triu = torch.triu_indices(n_chans, n_chans, 1)
257
- x = x[:, triu[0], triu[1], :]
258
- return x
@@ -8,13 +8,13 @@ import json
8
8
  import logging
9
9
  import math
10
10
  import os
11
- from pathlib import Path
12
11
  from typing import Optional, Union
13
12
 
14
- import requests
13
+ import pooch
15
14
  import torch
16
15
  import torch.nn.functional as F
17
16
  from einops import rearrange
17
+ from mne.datasets.utils import _get_path
18
18
  from torch import nn
19
19
 
20
20
  # Safe import for older PyTorch versions (Support for Intel-based Macs)
@@ -785,10 +785,13 @@ class FourierEmb4D(nn.Module):
785
785
  class RevePositionBank(torch.nn.Module):
786
786
  """Position bank for REVE model that maps standard EEG channel names to 3D coordinates.
787
787
 
788
- The position bank is cached locally in the library root to avoid repeated downloads.
789
-
790
788
  The coordinates come from the 92 datasets used during REVE pretraining.
791
789
 
790
+ The bank is cached in the MNE data directory after the first download, so it
791
+ works offline afterwards. On restricted nodes (e.g. HPC compute nodes without
792
+ a proxy), drop a prefetched ``reve_positions.json`` in that directory and no
793
+ download is attempted.
794
+
792
795
  Parameters
793
796
  ----------
794
797
  url : str, optional
@@ -796,7 +799,9 @@ class RevePositionBank(torch.nn.Module):
796
799
  timeout : int, optional
797
800
  Timeout in seconds for the HTTP request. Default is 5 seconds.
798
801
  cache_dir : str, optional
799
- Directory to cache the position bank. Default is the models folder within the library.
802
+ Directory to cache the position bank. If ``None``, resolved like other
803
+ braindecode datasets via the ``REVE_POSITIONS_PATH`` config key, falling
804
+ back to the MNE data directory (usually ``~/mne_data``).
800
805
  """
801
806
 
802
807
  def __init__(
@@ -807,38 +812,32 @@ class RevePositionBank(torch.nn.Module):
807
812
  ):
808
813
  super().__init__()
809
814
 
810
- if cache_dir is None:
811
- # Use the model root directory
812
- cache_dir = str(Path(__file__).parent)
813
-
814
- cache_file = os.path.join(cache_dir, ".cache", "reve_positions.json")
815
- os.makedirs(os.path.dirname(cache_file), exist_ok=True)
816
-
817
- config = None
815
+ cache_dir = _get_path(cache_dir, "REVE_POSITIONS_PATH", "REVE positions")
816
+ cache_file = os.path.join(cache_dir, "reve_positions.json")
818
817
 
819
- # Try to load from cache first
820
- if os.path.exists(cache_file):
818
+ # Offline path: reuse the cached/prefetched file. Download only on a miss
819
+ # or if the cached copy is unreadable (e.g. an interrupted download).
820
+ try:
821
+ with open(cache_file) as f:
822
+ config = json.load(f)
823
+ except (OSError, json.JSONDecodeError):
821
824
  try:
822
- with open(cache_file, "r") as f:
825
+ if os.path.exists(cache_file):
826
+ os.remove(cache_file) # corrupt/partial; force a fresh copy
827
+ # pooch ships with mne and writes straight into the cache dir.
828
+ pooch.retrieve(
829
+ url,
830
+ known_hash=None,
831
+ fname="reve_positions.json",
832
+ path=cache_dir,
833
+ downloader=pooch.HTTPDownloader(timeout=timeout),
834
+ )
835
+ with open(cache_file) as f:
823
836
  config = json.load(f)
824
- logger.info(f"Loaded position bank from cache: {cache_file}")
825
- except (json.JSONDecodeError, IOError) as e:
826
- logger.warning(f"Failed to load cache, downloading: {e}")
827
-
828
- # Download if cache miss or failed to load
829
- if config is None:
830
- try:
831
- response = requests.get(url, timeout=timeout)
832
- response.raise_for_status()
833
- config = json.loads(response.text)
834
-
835
- # Save to cache
836
- with open(cache_file, "w") as f:
837
- json.dump(config, f)
838
- logger.info(f"Downloaded and cached position bank to: {cache_file}")
839
- except (requests.RequestException, json.JSONDecodeError) as e:
837
+ except Exception as e:
840
838
  raise RuntimeError(
841
- f"Failed to download or parse the position bank from {url}: {e}"
839
+ f"Failed to download the position bank from {url}. On an "
840
+ f"offline node, prefetch it to {cache_file} first: {e}"
842
841
  ) from e
843
842
 
844
843
  try:
@@ -1,3 +1,7 @@
1
+ # Authors: Sarthak Tayal <sarthaktayal2@gmail.com>
2
+ #
3
+ # License: BSD-3
4
+
1
5
  from __future__ import annotations
2
6
 
3
7
  from typing import Optional
@@ -637,20 +641,22 @@ class GeneralizedGaussianFilter(nn.Module):
637
641
  The constructed filters with shape `(out_channels, freq_bins, 2)`.
638
642
 
639
643
  """
640
- # Clamp parameters
641
- self.f_mean.data = torch.clamp(
642
- self.f_mean.data,
643
- min=self.clamp_f_mean[0] / (self.sample_rate / 2),
644
- max=self.clamp_f_mean[1] / (self.sample_rate / 2),
645
- )
646
- self.bandwidth.data = torch.clamp(
647
- self.bandwidth.data, min=1.0 / (self.sample_rate / 2), max=1.0
644
+ min_f_mean = self.clamp_f_mean[0] / (self.sample_rate / 2)
645
+ max_f_mean = self.clamp_f_mean[1] / (self.sample_rate / 2)
646
+ f_mean = torch.clamp(self.f_mean, min=min_f_mean, max=max_f_mean)
647
+ bandwidth = torch.clamp(
648
+ self.bandwidth, min=1.0 / (self.sample_rate / 2), max=1.0
648
649
  )
649
- self.shape.data = torch.clamp(self.shape.data, min=2.0, max=3.0)
650
+ shape = torch.clamp(self.shape, min=2.0, max=3.0)
651
+
652
+ if not torch.jit.is_scripting():
653
+ self.f_mean.data = f_mean
654
+ self.bandwidth.data = bandwidth
655
+ self.shape.data = shape
650
656
 
651
657
  # Create magnitude response with gain=1 -> (channels, freqs)
652
658
  mag_response = self.exponential_power(
653
- self.n_range, self.f_mean, self.bandwidth, self.shape * 8 - 14
659
+ self.n_range, f_mean, bandwidth, shape * 8 - 14
654
660
  )
655
661
  mag_response = mag_response / mag_response.max(dim=-1, keepdim=True)[0]
656
662
 
@@ -3,6 +3,7 @@
3
3
  # Lukas Gemein <l.gemein@gmail.com>
4
4
  # Bruno Aristimunha <b.aristimunha@gmail.com>
5
5
  # Pierre Guetschel <pierre.guetschel@gmail.com>
6
+ # Sarthak Tayal <sarthaktayal2@gmail.com>
6
7
  #
7
8
  # License: BSD (3-clause)
8
9
 
@@ -139,9 +140,7 @@ class EEGRegressor(_EEGNeuralNet, NeuralNetRegressor):
139
140
  return y_pred
140
141
 
141
142
  def predict_trials(self, X, return_targets=True):
142
- """Create trialwise predictions and optionally also return trialwise.
143
-
144
- labels from cropped dataset.
143
+ """Create trialwise predictions from a cropped dataset.
145
144
 
146
145
  Parameters
147
146
  ----------
@@ -156,10 +155,11 @@ class EEGRegressor(_EEGNeuralNet, NeuralNetRegressor):
156
155
  3-dimensional array (n_trials x n_classes x n_predictions), where
157
156
  the number of predictions depend on the chosen window size and the
158
157
  receptive field of the network.
159
- trial_labels : np.ndarray
160
- 2-dimensional array (n_trials x n_targets) where the number of
161
- targets depends on the decoding paradigm and can be either a single
162
- value, multiple values, or a sequence.
158
+ trial_targets : np.ndarray
159
+ Ground-truth targets from the dataset in a 2-dimensional array
160
+ (n_trials x n_targets). Only returned when ``return_targets=True``.
161
+ The number of targets depends on the decoding paradigm and can be
162
+ either a single value, multiple values, or a sequence.
163
163
  """
164
164
  if not self.cropped:
165
165
  warnings.warn(
@@ -3,6 +3,7 @@
3
3
  # Alexandre Gramfort <alexandre.gramfort@inria.fr>
4
4
  # Lukas Gemein <l.gemein@gmail.com>
5
5
  # Mohammed Fattouh <mo.fattouh@gmail.com>
6
+ # Sarthak Tayal <sarthaktayal2@gmail.com>
6
7
  #
7
8
  # License: BSD-3
8
9
 
@@ -401,7 +402,7 @@ class PostEpochTrainScoring(EpochScoring):
401
402
 
402
403
  def predict_trials(module, dataset, return_targets=True, batch_size=1, num_workers=0):
403
404
  """Create trialwise predictions and optionally also return trialwise
404
- labels from cropped dataset given module.
405
+ targets from a cropped dataset given a module.
405
406
 
406
407
  Parameters
407
408
  ----------
@@ -422,10 +423,11 @@ def predict_trials(module, dataset, return_targets=True, batch_size=1, num_worke
422
423
  3-dimensional array (n_trials x n_classes x n_predictions), where
423
424
  the number of predictions depend on the chosen window size and the
424
425
  receptive field of the network.
425
- trial_labels: np.ndarray
426
- 2-dimensional array (n_trials x n_targets) where the number of
427
- targets depends on the decoding paradigm and can be either a single
428
- value, multiple values, or a sequence.
426
+ trial_targets: np.ndarray
427
+ Ground-truth targets from the dataset in a 2-dimensional array
428
+ (n_trials x n_targets). Only returned when ``return_targets=True``.
429
+ The number of targets depends on the decoding paradigm and can be
430
+ either a single value, multiple values, or a sequence.
429
431
  """
430
432
  # Ensure the model is in evaluation mode
431
433
  module.eval()
@@ -0,0 +1 @@
1
+ __version__ = "1.7.0.dev182244820"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: braindecode
3
- Version: 1.7.0.dev179223210
3
+ Version: 1.7.0.dev182244820
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>
@@ -161,7 +161,7 @@
161
161
  <div class="container bd-facts-inner">
162
162
  <span class="bd-facts-label">By the numbers</span>
163
163
  <div class="bd-facts-row">
164
- <a href="models/models.html"><b>65+</b> models</a>
164
+ <a href="models/models_table.html"><b>65+</b> models</a>
165
165
  <a href="api.html#augmentation"><b>20+</b> augmentations</a>
166
166
  <a href="https://moabb.neurotechx.com/" target="_blank" rel="noopener"><b>150+</b> datasets <span style="color:var(--bd-muted)">via MOABB</span></a>
167
167
  <a href="https://eegdash.org/" target="_blank" rel="noopener"><b>700+</b> datasets <span style="color:var(--bd-muted)">via EEGDash</span></a>
@@ -224,7 +224,7 @@
224
224
  <p class="section-sub">Built to <strong>plug into the EEG ecosystem you already use</strong>: every <a href="https://moabb.neurotechx.com/" target="_blank" rel="noopener">MOABB</a> dataset, every <a href="https://mne.tools/" target="_blank" rel="noopener">MNE-Python</a> preprocessing function, every <a href="https://scikit-learn.org/" target="_blank" rel="noopener">scikit-learn</a> training loop, plus 700+ BIDS datasets via <a href="https://eegdash.org/" target="_blank" rel="noopener">EEGDash</a>. One library, no lock-in.</p>
225
225
  </div>
226
226
  <div class="feature-grid">
227
- <a href="models/models.html" class="feature-card">
227
+ <a href="models/models_table.html" class="feature-card">
228
228
  <span class="feature-icon"><svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12c2-4 4-4 6 0s4 4 6 0 4-4 6 0 4 4 2 0"/></svg></span>
229
229
  <h3>Decode raw electrophysiology</h3>
230
230
  <p>End-to-end models go straight from raw EEG/ECoG/MEG to predictions. No hand-crafted features required.</p>
@@ -248,7 +248,7 @@
248
248
  <p>Fully compatible with every <a class="feature-inline-link" href="https://mne.tools/" target="_blank" rel="noopener">MNE</a> preprocessing function and with <a class="feature-inline-link" href="https://eegprep.org/" target="_blank" rel="noopener">EEGPrep</a>, plus exponential standardization and 20+ EEG augmentations.</p>
249
249
  <a href="api.html#augmentation" class="feature-link">Augmentation <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 5l7 7-7 7"/></svg></a>
250
250
  </div>
251
- <a href="models/models.html" class="feature-card">
251
+ <a href="models/models_table.html" class="feature-card">
252
252
  <span class="feature-icon"><svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="6" r="2"/><circle cx="6" cy="18" r="2"/><circle cx="18" cy="12" r="2"/><path d="M8 6h2a3 3 0 0 1 3 3v0a3 3 0 0 0 3 3M8 18h2a3 3 0 0 0 3-3v0a3 3 0 0 1 3-3"/></svg></span>
253
253
  <h3>Curated model zoo</h3>
254
254
  <p>EEGNeX, ConvNets, ATCNet, EEGConformer, foundation models. 60+ architectures reproduced from the original papers.</p>
@@ -359,7 +359,7 @@
359
359
  <div class="zoo-grid"><!-- populated by landing.js --></div>
360
360
  <div class="zoo-foot">
361
361
  <span class="zoo-foot-count">Loading…</span>
362
- <a href="models/models.html">Browse the full zoo on the Models page <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 5l7 7-7 7"/></svg></a>
362
+ <a href="models/models_table.html">Browse the full zoo on the Models table <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M13 5l7 7-7 7"/></svg></a>
363
363
  </div>
364
364
  </div>
365
365
  </section>
@@ -521,7 +521,7 @@
521
521
  <span class="pipeline-col-name">Modeling</span>
522
522
  </div>
523
523
  <div class="pipeline-col-cards">
524
- <a class="pipeline-card" href="models/models.html">
524
+ <a class="pipeline-card" href="models/models_table.html">
525
525
  <span class="pipeline-card-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="6" r="2"/><circle cx="6" cy="18" r="2"/><circle cx="18" cy="12" r="2"/><path d="M8 6h2a3 3 0 0 1 3 3v0a3 3 0 0 0 3 3M8 18h2a3 3 0 0 0 3-3v0a3 3 0 0 1 3-3"/></svg></span>
526
526
  <span class="pipeline-card-text">
527
527
  <span class="pipeline-card-name">braindecode.models</span>
@@ -679,7 +679,7 @@
679
679
  <ul>
680
680
  <li><a href="install/install.html">Install</a></li>
681
681
  <li><a href="auto_examples/index.html">Tutorials</a></li>
682
- <li><a href="models/models.html">Models</a></li>
682
+ <li><a href="models/models_table.html">Models</a></li>
683
683
  <li><a href="api.html">API reference</a></li>
684
684
  </ul>
685
685
  </div>
@@ -68,12 +68,12 @@ With this, in this model's sub-pages, we provide:
68
68
  - 4. :doc:`A visualization of the common important information from the models
69
69
  <models_visualization>`.
70
70
 
71
- .. button-ref:: models_categorization
71
+ .. button-ref:: models_table
72
72
  :ref-type: doc
73
73
  :color: primary
74
74
  :expand:
75
75
 
76
- Next: Models categorization
76
+ Browse the models table
77
77
 
78
78
  .. rubric:: References
79
79
 
@@ -191,6 +191,15 @@ Braindecode.
191
191
  // Initial color pass
192
192
  applyTagPalette(document);
193
193
 
194
+ function applyInitialModelFilter() {
195
+ var model = new URLSearchParams(window.location.search).get('model');
196
+ if (!model) return;
197
+ table.search(model).draw();
198
+ $(table.table().container()).find('div.dataTables_filter input').val(model);
199
+ }
200
+
201
+ applyInitialModelFilter();
202
+
194
203
  /* --- Bonus UX: click a column header to open panes focused there ----- */
195
204
  $('.sortable thead th').each(function (i) {
196
205
  if (!FILTER_COLS.includes(i)) return;
@@ -49,7 +49,22 @@ Requirements
49
49
  Bug fixes
50
50
  ==========
51
51
 
52
- - None yet
52
+ - Clarify that :func:`braindecode.training.scoring.predict_trials`,
53
+ :meth:`braindecode.EEGClassifier.predict_trials`, and
54
+ :meth:`braindecode.EEGRegressor.predict_trials` return ground-truth dataset
55
+ targets alongside predictions. By `Sarthak Tayal`_.
56
+
57
+ - Make :class:`braindecode.models.EEGMiner` compatible with TorchScript across
58
+ magnitude, correlation, and phase-locking-value feature modes by replacing
59
+ runtime callable dispatch with a scriptable feature module. (:gh:`1101` by
60
+ `Sarthak Tayal`_)
61
+
62
+ - Make the :class:`braindecode.models.REVE` position bank robust on offline /
63
+ limited-network nodes: it is now cached in the writable MNE data directory
64
+ (resolved via the ``REVE_POSITIONS_PATH`` config key, defaulting under
65
+ ``~/mne_data``) instead of the package folder, so a prefetched
66
+ ``reve_positions.json`` there is used without any download (:gh:`1098` by
67
+ `Bruno Aristimunha`_)
53
68
 
54
69
  Code health
55
70
  ============
@@ -1 +0,0 @@
1
- __version__ = "1.7.0.dev179223210"