braindecode 1.6.1.dev1054__tar.gz → 1.6.1.dev1056__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 (172) hide show
  1. {braindecode-1.6.1.dev1054/braindecode.egg-info → braindecode-1.6.1.dev1056}/PKG-INFO +1 -1
  2. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/eegneuralnet.py +41 -0
  3. braindecode-1.6.1.dev1056/braindecode/version.py +1 -0
  4. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056/braindecode.egg-info}/PKG-INFO +1 -1
  5. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/whats_new.rst +15 -0
  6. braindecode-1.6.1.dev1054/braindecode/version.py +0 -1
  7. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/LICENSE.txt +0 -0
  8. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/MANIFEST.in +0 -0
  9. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/NOTICE.txt +0 -0
  10. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/README.rst +0 -0
  11. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/__init__.py +0 -0
  12. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/augmentation/__init__.py +0 -0
  13. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/augmentation/base.py +0 -0
  14. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/augmentation/functional.py +0 -0
  15. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/augmentation/transforms.py +0 -0
  16. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/classifier.py +0 -0
  17. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/__init__.py +0 -0
  18. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/base.py +0 -0
  19. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/bbci.py +0 -0
  20. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/bcicomp.py +0 -0
  21. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/bids/__init__.py +0 -0
  22. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/bids/datasets.py +0 -0
  23. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/bids/format.py +0 -0
  24. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/bids/hub.py +0 -0
  25. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/bids/hub_format.py +0 -0
  26. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/bids/hub_io.py +0 -0
  27. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/bids/hub_validation.py +0 -0
  28. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/bids/iterable.py +0 -0
  29. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/chb_mit.py +0 -0
  30. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/mne.py +0 -0
  31. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/moabb.py +0 -0
  32. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/nmt.py +0 -0
  33. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/registry.py +0 -0
  34. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/siena.py +0 -0
  35. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/sleep_physio_challe_18.py +0 -0
  36. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/sleep_physionet.py +0 -0
  37. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/tuh.py +0 -0
  38. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/utils.py +0 -0
  39. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datasets/xy.py +0 -0
  40. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datautil/__init__.py +0 -0
  41. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datautil/channel_utils.py +0 -0
  42. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datautil/hub_formats.py +0 -0
  43. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datautil/serialization.py +0 -0
  44. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/datautil/util.py +0 -0
  45. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/functional/__init__.py +0 -0
  46. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/functional/functions.py +0 -0
  47. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/functional/initialization.py +0 -0
  48. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/__init__.py +0 -0
  49. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/atcnet.py +0 -0
  50. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/attentionbasenet.py +0 -0
  51. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/attn_sleep.py +0 -0
  52. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/base.py +0 -0
  53. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/bendr.py +0 -0
  54. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/biot.py +0 -0
  55. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/brainmodule.py +0 -0
  56. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/cbramod.py +0 -0
  57. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/codebrain.py +0 -0
  58. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/config.py +0 -0
  59. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/contrawr.py +0 -0
  60. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/ctnet.py +0 -0
  61. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/deep4.py +0 -0
  62. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/deepsleepnet.py +0 -0
  63. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/dgcnn.py +0 -0
  64. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/eegconformer.py +0 -0
  65. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/eegdino.py +0 -0
  66. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/eeginception_erp.py +0 -0
  67. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/eeginception_mi.py +0 -0
  68. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/eegitnet.py +0 -0
  69. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/eegminer.py +0 -0
  70. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/eegnet.py +0 -0
  71. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/eegnex.py +0 -0
  72. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/eegpt.py +0 -0
  73. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/eegsimpleconv.py +0 -0
  74. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/eegsym.py +0 -0
  75. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/eegtcnet.py +0 -0
  76. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/emg2qwerty.py +0 -0
  77. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/fbcnet.py +0 -0
  78. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/fblightconvnet.py +0 -0
  79. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/fbmsnet.py +0 -0
  80. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/hybrid.py +0 -0
  81. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/ifnet.py +0 -0
  82. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/interpolated.py +0 -0
  83. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/labram.py +0 -0
  84. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/luna.py +0 -0
  85. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/medformer.py +0 -0
  86. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/meta_neuromotor.py +0 -0
  87. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/msvtnet.py +0 -0
  88. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/patchedtransformer.py +0 -0
  89. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/reve.py +0 -0
  90. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/sccnet.py +0 -0
  91. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/shallow_fbcsp.py +0 -0
  92. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/signal_jepa.py +0 -0
  93. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/sinc_shallow.py +0 -0
  94. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
  95. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
  96. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/sparcnet.py +0 -0
  97. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/sstdpn.py +0 -0
  98. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/summary.csv +0 -0
  99. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/syncnet.py +0 -0
  100. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/tcn.py +0 -0
  101. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/tidnet.py +0 -0
  102. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/tsinception.py +0 -0
  103. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/usleep.py +0 -0
  104. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/models/util.py +0 -0
  105. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/modules/__init__.py +0 -0
  106. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/modules/activation.py +0 -0
  107. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/modules/attention.py +0 -0
  108. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/modules/blocks.py +0 -0
  109. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/modules/convolution.py +0 -0
  110. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/modules/filter.py +0 -0
  111. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/modules/interpolation.py +0 -0
  112. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/modules/layers.py +0 -0
  113. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/modules/linear.py +0 -0
  114. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/modules/parametrization.py +0 -0
  115. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/modules/stats.py +0 -0
  116. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/modules/util.py +0 -0
  117. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/modules/wrapper.py +0 -0
  118. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/preprocessing/__init__.py +0 -0
  119. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/preprocessing/eegprep_preprocess.py +0 -0
  120. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/preprocessing/mne_preprocess.py +0 -0
  121. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/preprocessing/preprocess.py +0 -0
  122. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/preprocessing/util.py +0 -0
  123. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/preprocessing/windowers.py +0 -0
  124. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/regressor.py +0 -0
  125. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/samplers/__init__.py +0 -0
  126. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/samplers/base.py +0 -0
  127. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/samplers/ssl.py +0 -0
  128. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/training/__init__.py +0 -0
  129. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/training/callbacks.py +0 -0
  130. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/training/losses.py +0 -0
  131. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/training/scoring.py +0 -0
  132. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/util.py +0 -0
  133. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/visualization/__init__.py +0 -0
  134. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/visualization/attribution.py +0 -0
  135. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/visualization/confusion_matrices.py +0 -0
  136. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/visualization/frequency.py +0 -0
  137. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/visualization/metrics.py +0 -0
  138. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/visualization/sanity.py +0 -0
  139. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode/visualization/topology.py +0 -0
  140. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode.egg-info/SOURCES.txt +0 -0
  141. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode.egg-info/dependency_links.txt +0 -0
  142. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode.egg-info/requires.txt +0 -0
  143. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/braindecode.egg-info/top_level.txt +0 -0
  144. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/Makefile +0 -0
  145. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/_templates/autosummary/class.rst +0 -0
  146. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/_templates/autosummary/class_in_subdir.rst +0 -0
  147. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/_templates/autosummary/function.rst +0 -0
  148. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/_templates/autosummary/function_in_subdir.rst +0 -0
  149. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/api.rst +0 -0
  150. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/cite.rst +0 -0
  151. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/conf.py +0 -0
  152. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/help.rst +0 -0
  153. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/index.rst +0 -0
  154. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/install/install.rst +0 -0
  155. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/install/install_pip.rst +0 -0
  156. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/install/install_source.rst +0 -0
  157. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/models/categorization/attention.rst +0 -0
  158. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/models/categorization/channel.rst +0 -0
  159. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/models/categorization/convolution.rst +0 -0
  160. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/models/categorization/filterbank.rst +0 -0
  161. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/models/categorization/gnn.rst +0 -0
  162. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/models/categorization/interpretable.rst +0 -0
  163. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/models/categorization/lbm.rst +0 -0
  164. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/models/categorization/recurrent.rst +0 -0
  165. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/models/categorization/spd.rst +0 -0
  166. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/models/models.rst +0 -0
  167. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/models/models_categorization.rst +0 -0
  168. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/models/models_table.rst +0 -0
  169. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/models/models_visualization.rst +0 -0
  170. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/docs/sg_execution_times.rst +0 -0
  171. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/pyproject.toml +0 -0
  172. {braindecode-1.6.1.dev1054 → braindecode-1.6.1.dev1056}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: braindecode
3
- Version: 1.6.1.dev1054
3
+ Version: 1.6.1.dev1056
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>
@@ -7,6 +7,7 @@
7
7
  import abc
8
8
  import inspect
9
9
  import logging
10
+ import warnings
10
11
  from typing import Literal
11
12
 
12
13
  import mne
@@ -41,6 +42,7 @@ def _get_model(model: str):
41
42
 
42
43
  class _EEGNeuralNet(NeuralNet, abc.ABC):
43
44
  signal_args_set_ = False
45
+ _warned_drop_last_ = False
44
46
 
45
47
  @property
46
48
  def log(self):
@@ -267,6 +269,44 @@ class _EEGNeuralNet(NeuralNet, abc.ABC):
267
269
  X = X.get_data(units="uV")
268
270
  return super().get_dataset(X, y)
269
271
 
272
+ def get_iterator(self, dataset, training=False):
273
+ iterator = super().get_iterator(dataset, training=training)
274
+ # Warn (once per fit) if drop_last would discard every training batch,
275
+ # e.g. a training set smaller than batch_size. This silently skips
276
+ # training without raising any error, which is hard to diagnose.
277
+ if training and not self._warned_drop_last_:
278
+ self._warn_if_training_batches_dropped(iterator)
279
+ return iterator
280
+
281
+ def _warn_if_training_batches_dropped(self, loader):
282
+ """Warn if ``drop_last`` discards all training batches.
283
+
284
+ With ``iterator_train__drop_last=True`` (the braindecode default), a
285
+ training set smaller than ``batch_size`` yields zero batches, so no
286
+ forward/backward pass runs and the model is left untrained without any
287
+ error. We inspect the resolved training ``DataLoader`` (after
288
+ ``train_split`` has been applied), so the count reflects the actual
289
+ number of training examples.
290
+ """
291
+ self._warned_drop_last_ = True
292
+ if not getattr(loader, "drop_last", False):
293
+ return
294
+ batch_size = getattr(loader, "batch_size", None)
295
+ try:
296
+ n_train = len(loader.dataset)
297
+ except TypeError:
298
+ return # e.g. an IterableDataset whose length is unknown
299
+ if not batch_size or n_train == 0 or n_train >= batch_size:
300
+ return
301
+ warnings.warn(
302
+ f"The training set has {n_train} example(s), which is smaller than "
303
+ f"batch_size={batch_size}. With iterator_train__drop_last=True "
304
+ f"(the braindecode default), all training batches are dropped and "
305
+ f"the model is not trained. Reduce batch_size to at most {n_train}, "
306
+ f"or pass iterator_train__drop_last=False.",
307
+ UserWarning,
308
+ )
309
+
270
310
  def partial_fit(self, X, y=None, classes=None, **fit_params):
271
311
  """Fit the module.
272
312
 
@@ -366,6 +406,7 @@ class _EEGNeuralNet(NeuralNet, abc.ABC):
366
406
  the module and to the ``self.train_split`` call.
367
407
  """
368
408
  # this needs to be executed before the net is initialized:
409
+ self._warned_drop_last_ = False # re-check on every fresh fit
369
410
  if not self.signal_args_set_:
370
411
  self._set_signal_args(X, y, classes=None)
371
412
  self.signal_args_set_ = True
@@ -0,0 +1 @@
1
+ __version__ = "1.6.1.dev1056"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: braindecode
3
- Version: 1.6.1.dev1054
3
+ Version: 1.6.1.dev1056
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>
@@ -88,9 +88,24 @@ Bug fixes
88
88
  :class:`~braindecode.EEGClassifier` infer the signal dimensions from the data.
89
89
  By `Bhargav Kowshik`_
90
90
 
91
+ - Fix :class:`~braindecode.EEGClassifier` and
92
+ :class:`~braindecode.EEGRegressor` silently skipping all training when the
93
+ training set is smaller than ``batch_size`` (with the default
94
+ ``iterator_train__drop_last=True``). Previously every batch was dropped and
95
+ the model was left untrained without any message; a :class:`UserWarning` is
96
+ now raised telling the user to lower ``batch_size`` or set
97
+ ``iterator_train__drop_last=False``.
98
+ (:gh:`1053` by `Bhargav Kowshik`_)
99
+
91
100
  Code health
92
101
  ============
93
102
 
103
+ - Silence the new "training set smaller than ``batch_size``" warning
104
+ (:gh:`1053`) in the ``test_eegneuralnet`` signal-argument tests, which
105
+ intentionally fit tiny mock data to check argument propagation rather than
106
+ to train. Keeps the warning meaningful by not emitting it on every CI run.
107
+ (:gh:`1056` by `Adam Mounir`_)
108
+
94
109
  - Install CPU-only PyTorch wheels in the ``tests`` and ``docs`` CI
95
110
  workflows via ``UV_TORCH_BACKEND=cpu``. GitHub runners have no GPU, so
96
111
  the default CUDA build pulled ~1.8 GiB of unused ``nvidia-*`` wheels and
@@ -1 +0,0 @@
1
- __version__ = "1.6.1.dev1054"