Braindecode 1.3.2.dev172702163__tar.gz → 1.3.2.dev173417708__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 (161) hide show
  1. {braindecode-1.3.2.dev172702163/braindecode.egg-info → braindecode-1.3.2.dev173417708}/PKG-INFO +1 -1
  2. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/mne.py +48 -4
  3. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/preprocessing/windowers.py +94 -18
  4. braindecode-1.3.2.dev173417708/braindecode/version.py +1 -0
  5. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/visualization/gradients.py +7 -7
  6. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708/braindecode.egg-info}/PKG-INFO +1 -1
  7. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/whats_new.rst +13 -1
  8. braindecode-1.3.2.dev172702163/braindecode/version.py +0 -1
  9. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/LICENSE.txt +0 -0
  10. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/MANIFEST.in +0 -0
  11. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/NOTICE.txt +0 -0
  12. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/README.rst +0 -0
  13. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/__init__.py +0 -0
  14. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/augmentation/__init__.py +0 -0
  15. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/augmentation/base.py +0 -0
  16. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/augmentation/functional.py +0 -0
  17. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/augmentation/transforms.py +0 -0
  18. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/classifier.py +0 -0
  19. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/__init__.py +0 -0
  20. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/base.py +0 -0
  21. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/bbci.py +0 -0
  22. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/bcicomp.py +0 -0
  23. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/bids/__init__.py +0 -0
  24. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/bids/datasets.py +0 -0
  25. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/bids/format.py +0 -0
  26. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/bids/hub.py +0 -0
  27. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/bids/hub_format.py +0 -0
  28. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/bids/hub_io.py +0 -0
  29. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/bids/hub_validation.py +0 -0
  30. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/bids/iterable.py +0 -0
  31. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/chb_mit.py +0 -0
  32. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/moabb.py +0 -0
  33. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/nmt.py +0 -0
  34. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/registry.py +0 -0
  35. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/siena.py +0 -0
  36. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/sleep_physio_challe_18.py +0 -0
  37. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/sleep_physionet.py +0 -0
  38. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/tuh.py +0 -0
  39. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/utils.py +0 -0
  40. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datasets/xy.py +0 -0
  41. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datautil/__init__.py +0 -0
  42. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datautil/channel_utils.py +0 -0
  43. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datautil/hub_formats.py +0 -0
  44. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datautil/serialization.py +0 -0
  45. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/datautil/util.py +0 -0
  46. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/eegneuralnet.py +0 -0
  47. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/functional/__init__.py +0 -0
  48. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/functional/functions.py +0 -0
  49. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/functional/initialization.py +0 -0
  50. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/__init__.py +0 -0
  51. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/atcnet.py +0 -0
  52. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/attentionbasenet.py +0 -0
  53. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/attn_sleep.py +0 -0
  54. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/base.py +0 -0
  55. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/bendr.py +0 -0
  56. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/biot.py +0 -0
  57. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/brainmodule.py +0 -0
  58. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/cbramod.py +0 -0
  59. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/config.py +0 -0
  60. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/contrawr.py +0 -0
  61. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/ctnet.py +0 -0
  62. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/deep4.py +0 -0
  63. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/deepsleepnet.py +0 -0
  64. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/eegconformer.py +0 -0
  65. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/eeginception_erp.py +0 -0
  66. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/eeginception_mi.py +0 -0
  67. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/eegitnet.py +0 -0
  68. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/eegminer.py +0 -0
  69. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/eegnet.py +0 -0
  70. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/eegnex.py +0 -0
  71. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/eegpt.py +0 -0
  72. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/eegsimpleconv.py +0 -0
  73. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/eegsym.py +0 -0
  74. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/eegtcnet.py +0 -0
  75. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/fbcnet.py +0 -0
  76. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/fblightconvnet.py +0 -0
  77. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/fbmsnet.py +0 -0
  78. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/hybrid.py +0 -0
  79. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/ifnet.py +0 -0
  80. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/labram.py +0 -0
  81. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/luna.py +0 -0
  82. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/medformer.py +0 -0
  83. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/msvtnet.py +0 -0
  84. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/patchedtransformer.py +0 -0
  85. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/reve.py +0 -0
  86. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/sccnet.py +0 -0
  87. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/shallow_fbcsp.py +0 -0
  88. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/signal_jepa.py +0 -0
  89. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/sinc_shallow.py +0 -0
  90. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
  91. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
  92. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/sparcnet.py +0 -0
  93. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/sstdpn.py +0 -0
  94. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/summary.csv +0 -0
  95. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/syncnet.py +0 -0
  96. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/tcn.py +0 -0
  97. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/tidnet.py +0 -0
  98. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/tsinception.py +0 -0
  99. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/usleep.py +0 -0
  100. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/models/util.py +0 -0
  101. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/modules/__init__.py +0 -0
  102. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/modules/activation.py +0 -0
  103. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/modules/attention.py +0 -0
  104. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/modules/blocks.py +0 -0
  105. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/modules/convolution.py +0 -0
  106. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/modules/filter.py +0 -0
  107. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/modules/layers.py +0 -0
  108. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/modules/linear.py +0 -0
  109. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/modules/parametrization.py +0 -0
  110. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/modules/stats.py +0 -0
  111. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/modules/util.py +0 -0
  112. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/modules/wrapper.py +0 -0
  113. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/preprocessing/__init__.py +0 -0
  114. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/preprocessing/eegprep_preprocess.py +0 -0
  115. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/preprocessing/mne_preprocess.py +0 -0
  116. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/preprocessing/preprocess.py +0 -0
  117. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/preprocessing/util.py +0 -0
  118. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/regressor.py +0 -0
  119. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/samplers/__init__.py +0 -0
  120. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/samplers/base.py +0 -0
  121. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/samplers/ssl.py +0 -0
  122. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/training/__init__.py +0 -0
  123. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/training/callbacks.py +0 -0
  124. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/training/losses.py +0 -0
  125. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/training/scoring.py +0 -0
  126. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/util.py +0 -0
  127. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/visualization/__init__.py +0 -0
  128. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode/visualization/confusion_matrices.py +0 -0
  129. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode.egg-info/SOURCES.txt +0 -0
  130. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode.egg-info/dependency_links.txt +0 -0
  131. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode.egg-info/requires.txt +0 -0
  132. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/braindecode.egg-info/top_level.txt +0 -0
  133. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/Makefile +0 -0
  134. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/_templates/autosummary/class.rst +0 -0
  135. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/_templates/autosummary/class_in_subdir.rst +0 -0
  136. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/_templates/autosummary/function.rst +0 -0
  137. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/_templates/autosummary/function_in_subdir.rst +0 -0
  138. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/api.rst +0 -0
  139. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/cite.rst +0 -0
  140. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/conf.py +0 -0
  141. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/help.rst +0 -0
  142. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/index.rst +0 -0
  143. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/install/install.rst +0 -0
  144. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/install/install_pip.rst +0 -0
  145. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/install/install_source.rst +0 -0
  146. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/models/categorization/attention.rst +0 -0
  147. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/models/categorization/channel.rst +0 -0
  148. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/models/categorization/convolution.rst +0 -0
  149. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/models/categorization/filterbank.rst +0 -0
  150. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/models/categorization/gnn.rst +0 -0
  151. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/models/categorization/interpretable.rst +0 -0
  152. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/models/categorization/lbm.rst +0 -0
  153. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/models/categorization/recurrent.rst +0 -0
  154. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/models/categorization/spd.rst +0 -0
  155. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/models/models.rst +0 -0
  156. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/models/models_categorization.rst +0 -0
  157. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/models/models_table.rst +0 -0
  158. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/models/models_visualization.rst +0 -0
  159. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/docs/sg_execution_times.rst +0 -0
  160. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/pyproject.toml +0 -0
  161. {braindecode-1.3.2.dev172702163 → braindecode-1.3.2.dev173417708}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: braindecode
3
- Version: 1.3.2.dev172702163
3
+ Version: 1.3.2.dev173417708
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>
@@ -100,6 +100,11 @@ def create_from_mne_epochs(
100
100
  window_size_samples: int,
101
101
  window_stride_samples: int,
102
102
  drop_last_window: bool,
103
+ descriptions: list[dict | pd.Series] | None = None,
104
+ mapping: dict[str | int, int] | None = None,
105
+ preload: bool = False,
106
+ picks: str | list | slice | None = None,
107
+ drop_bad_windows: bool = True,
103
108
  ) -> BaseConcatDataset:
104
109
  """Create WindowsDatasets from mne.Epochs.
105
110
 
@@ -114,6 +119,25 @@ def create_from_mne_epochs(
114
119
  drop_last_window : bool
115
120
  whether or not have a last overlapping window, when
116
121
  windows do not equally divide the continuous signal
122
+ descriptions : array-like | None
123
+ list of dicts or pandas.Series with additional information about
124
+ the epochs. If None, no description is added. Length must match
125
+ ``list_of_epochs``. Each description is applied to all windows
126
+ generated from the corresponding Epochs object.
127
+ mapping : dict(str | int: int) | None
128
+ Mapping from event description to target value. Keys can be
129
+ integers (matching ``epochs.events[:, 2]``) or their string
130
+ representations. If None, targets are set to the raw integer
131
+ event codes. If a mapping is provided and an event code is not
132
+ found in the mapping, the original event code is kept as-is.
133
+ preload : bool
134
+ if True, preload the data of the Epochs objects.
135
+ picks : str | list | slice | None
136
+ channels to include. If None, all available channels are used.
137
+ drop_bad_windows : bool
138
+ If True, call `.drop_bad()` on the resulting mne.Epochs object.
139
+ This allows identifying windows that fall outside of the valid
140
+ signal range. Defaults to True.
117
141
 
118
142
  Returns
119
143
  -------
@@ -126,8 +150,15 @@ def create_from_mne_epochs(
126
150
 
127
151
  _check_windowing_arguments(0, 0, window_size_samples, window_stride_samples)
128
152
 
153
+ if descriptions is not None:
154
+ if len(descriptions) != len(list_of_epochs):
155
+ raise ValueError(
156
+ f"length of 'list_of_epochs' ({len(list_of_epochs)}) and "
157
+ f"'descriptions' ({len(descriptions)}) has to match"
158
+ )
159
+
129
160
  list_of_windows_ds = []
130
- for epochs in list_of_epochs:
161
+ for i, epochs in enumerate(list_of_epochs):
131
162
  event_descriptions = epochs.events[:, 2]
132
163
  original_trial_starts = epochs.events[:, 0]
133
164
  stop = len(epochs.times) - window_size_samples
@@ -142,6 +173,15 @@ def create_from_mne_epochs(
142
173
  fake_events = [[start, window_size_samples, -1] for start in starts]
143
174
 
144
175
  for trial_i, trial in enumerate(epochs):
176
+ # resolve target using mapping if provided
177
+ event_code = event_descriptions[trial_i]
178
+ if mapping is not None:
179
+ target = mapping.get(
180
+ event_code, mapping.get(str(event_code), event_code)
181
+ )
182
+ else:
183
+ target = event_code
184
+
145
185
  metadata = pd.DataFrame(
146
186
  {
147
187
  "i_window_in_trial": np.arange(len(fake_events)),
@@ -149,7 +189,7 @@ def create_from_mne_epochs(
149
189
  "i_stop_in_trial": starts
150
190
  + original_trial_starts[trial_i]
151
191
  + window_size_samples,
152
- "target": len(fake_events) * [event_descriptions[trial_i]],
192
+ "target": len(fake_events) * [target],
153
193
  }
154
194
  )
155
195
  # window size - 1, since tmax is inclusive
@@ -160,11 +200,15 @@ def create_from_mne_epochs(
160
200
  tmin=0,
161
201
  tmax=(window_size_samples - 1) / epochs.info["sfreq"],
162
202
  metadata=metadata,
203
+ preload=preload,
204
+ picks=picks,
163
205
  )
164
206
 
165
- mne_epochs.drop_bad(reject=None, flat=None)
207
+ if drop_bad_windows:
208
+ mne_epochs.drop_bad(reject=None, flat=None)
166
209
 
167
- windows_ds = WindowsDataset(mne_epochs)
210
+ desc = descriptions[i] if descriptions is not None else None
211
+ windows_ds = WindowsDataset(mne_epochs, description=desc)
168
212
  list_of_windows_ds.append(windows_ds)
169
213
 
170
214
  return BaseConcatDataset(list_of_windows_ds)
@@ -12,6 +12,7 @@
12
12
  # Mohammed Fattouh <mo.fattouh@gmail.com>
13
13
  # Robin Schirrmeister <robintibor@gmail.com>
14
14
  # Matthew Chen <matt.chen42601@gmail.com>
15
+ # Sarthak Tayal <sarthaktayal2@gmail.com>
15
16
  #
16
17
  # License: BSD (3-clause)
17
18
 
@@ -417,6 +418,7 @@ def create_fixed_length_windows(
417
418
  drop_last_window: bool | None = None,
418
419
  mapping: dict[str, int] | None = None,
419
420
  preload: bool = False,
421
+ drop_bad_windows: bool | None = None,
420
422
  picks: str | ArrayLike | slice | None = None,
421
423
  reject: dict[str, float] | None = None,
422
424
  flat: dict[str, float] | None = None,
@@ -424,9 +426,10 @@ def create_fixed_length_windows(
424
426
  last_target_only: bool = True,
425
427
  lazy_metadata: bool = False,
426
428
  on_missing: str = "error",
429
+ use_mne_epochs: bool | None = None,
427
430
  n_jobs: int = 1,
428
431
  verbose: bool | str | int | None = "error",
429
- ) -> BaseConcatDataset[EEGWindowsDataset]:
432
+ ) -> BaseConcatDataset[WindowsDataset | EEGWindowsDataset]:
430
433
  """Windower that creates sliding windows.
431
434
 
432
435
  Parameters
@@ -452,6 +455,12 @@ def create_fixed_length_windows(
452
455
  Mapping from event description to target value.
453
456
  preload: bool
454
457
  If True, preload the data of the Epochs objects.
458
+ drop_bad_windows: bool | None
459
+ If True, call `.drop_bad()` on the resulting mne.Epochs object. This
460
+ step allows identifying e.g., windows that fall outside of the
461
+ continuous recording. It is suggested to run this step here as otherwise
462
+ the BaseConcatDataset has to be updated as well. Only has an effect if
463
+ mne Epochs are created (i.e. ``use_mne_epochs=True``).
455
464
  picks: str | list | slice | None
456
465
  Channels to include. If None, all available channels are used. See
457
466
  mne.Epochs.
@@ -463,10 +472,20 @@ def create_fixed_length_windows(
463
472
  rejection based on flatness is done. See mne.Epochs.
464
473
  lazy_metadata: bool
465
474
  If True, metadata is not computed immediately, but only when accessed
466
- by using the _LazyDataFrame (experimental).
475
+ by using the _LazyDataFrame (experimental). Cannot be used together
476
+ with ``use_mne_epochs=True``.
467
477
  on_missing: str
468
478
  What to do if one or several event ids are not found in the recording.
469
479
  Valid keys are ‘error' | ‘warning' | ‘ignore'. See mne.Epochs.
480
+ use_mne_epochs: bool | None
481
+ If False, return EEGWindowsDataset objects.
482
+ If True, return mne.Epochs objects encapsulated in WindowsDataset
483
+ objects, which is substantially slower than EEGWindowsDataset.
484
+ If None, it will be inferred from the other parameters: True if any
485
+ of ``reject``, ``picks``, or ``flat`` is set, or if
486
+ ``drop_bad_windows`` is True; False otherwise. If ``use_mne_epochs``
487
+ is inferred as True and ``drop_bad_windows`` is None, it is treated
488
+ as True.
470
489
  n_jobs: int
471
490
  Number of jobs to use to parallelize the windowing.
472
491
  verbose: bool | str | int | None
@@ -474,8 +493,10 @@ def create_fixed_length_windows(
474
493
 
475
494
  Returns
476
495
  -------
477
- windows_datasets: BaseConcatDataset[EEGWindowsDataset]
478
- Concatenated datasets of WindowsDataset containing the extracted windows.
496
+ windows_datasets: BaseConcatDataset[WindowsDataset | EEGWindowsDataset]
497
+ Concatenated dataset containing either WindowsDataset or
498
+ EEGWindowsDataset objects with the extracted windows, depending on
499
+ the value of ``use_mne_epochs``.
479
500
  """
480
501
  stop_offset_samples, drop_last_window = (
481
502
  _check_and_set_fixed_length_window_arguments(
@@ -488,6 +509,20 @@ def create_fixed_length_windows(
488
509
  )
489
510
  )
490
511
 
512
+ if drop_bad_windows is not None:
513
+ warnings.warn(
514
+ "Drop bad windows only has an effect if mne epochs are created, "
515
+ "and this argument may be removed in the future."
516
+ )
517
+
518
+ use_mne_epochs = _get_use_mne_epochs(
519
+ use_mne_epochs, reject, picks, flat, drop_bad_windows
520
+ )
521
+ if use_mne_epochs and drop_bad_windows is None:
522
+ drop_bad_windows = True
523
+ if use_mne_epochs and lazy_metadata:
524
+ raise ValueError("Cannot use lazy_metadata=True with use_mne_epochs=True.")
525
+
491
526
  # check if recordings are of different lengths
492
527
  lengths = np.array([ds.raw.n_times for ds in concat_ds.datasets])
493
528
  if (np.diff(lengths) != 0).any() and window_size_samples is None:
@@ -507,6 +542,7 @@ def create_fixed_length_windows(
507
542
  drop_last_window,
508
543
  mapping,
509
544
  preload,
545
+ drop_bad_windows,
510
546
  picks,
511
547
  reject,
512
548
  flat,
@@ -514,6 +550,7 @@ def create_fixed_length_windows(
514
550
  last_target_only,
515
551
  lazy_metadata,
516
552
  on_missing,
553
+ use_mne_epochs,
517
554
  verbose,
518
555
  )
519
556
  for ds in concat_ds.datasets
@@ -805,6 +842,7 @@ def _create_fixed_length_windows(
805
842
  drop_last_window,
806
843
  mapping=None,
807
844
  preload=False,
845
+ drop_bad_windows=True,
808
846
  picks=None,
809
847
  reject=None,
810
848
  flat=None,
@@ -812,6 +850,7 @@ def _create_fixed_length_windows(
812
850
  last_target_only=True,
813
851
  lazy_metadata=False,
814
852
  on_missing="error",
853
+ use_mne_epochs=False,
815
854
  verbose="error",
816
855
  ):
817
856
  """Create WindowsDataset from RawDataset with sliding windows.
@@ -894,19 +933,52 @@ def _create_fixed_length_windows(
894
933
  }
895
934
  )
896
935
 
897
- window_kwargs.append(
898
- (
899
- EEGWindowsDataset.__name__,
900
- {"targets_from": targets_from, "last_target_only": last_target_only},
936
+ if use_mne_epochs:
937
+ # Construct synthetic events for mne.Epochs
938
+ events = np.column_stack(
939
+ [
940
+ starts + ds.raw.first_samp,
941
+ np.zeros(len(starts), dtype=int),
942
+ np.ones(len(starts), dtype=int),
943
+ ]
944
+ )
945
+ events_id = {"window": 1}
946
+ # window size - 1, since tmax is inclusive
947
+ mne_epochs = mne.Epochs(
948
+ ds.raw,
949
+ events,
950
+ events_id,
951
+ baseline=None,
952
+ tmin=0,
953
+ tmax=(window_size_samples - 1) / ds.raw.info["sfreq"],
954
+ metadata=metadata,
955
+ preload=preload,
956
+ picks=picks,
957
+ reject=reject,
958
+ flat=flat,
959
+ on_missing=on_missing,
960
+ verbose=verbose,
961
+ )
962
+ if drop_bad_windows:
963
+ mne_epochs.drop_bad()
964
+ windows_ds = WindowsDataset(
965
+ mne_epochs,
966
+ ds.description,
967
+ )
968
+ else:
969
+ window_kwargs.append(
970
+ (
971
+ EEGWindowsDataset.__name__,
972
+ {"targets_from": targets_from, "last_target_only": last_target_only},
973
+ )
974
+ )
975
+ windows_ds = EEGWindowsDataset(
976
+ ds.raw,
977
+ metadata=metadata,
978
+ description=ds.description,
979
+ targets_from=targets_from,
980
+ last_target_only=last_target_only,
901
981
  )
902
- )
903
- windows_ds = EEGWindowsDataset(
904
- ds.raw,
905
- metadata=metadata,
906
- description=ds.description,
907
- targets_from=targets_from,
908
- last_target_only=last_target_only,
909
- )
910
982
  # add window_kwargs and raw_preproc_kwargs to windows dataset
911
983
  setattr(windows_ds, "window_kwargs", window_kwargs)
912
984
  kwargs_name = "raw_preproc_kwargs"
@@ -974,8 +1046,12 @@ def _create_windows_from_target_channels(
974
1046
  stop = ds.raw.n_times + ds.raw.first_samp
975
1047
 
976
1048
  target = ds.raw.get_data(picks="misc")
977
- # TODO: handle multi targets present only for some events
978
- stops = np.nonzero((~np.isnan(target[0, :])))[0] + 1
1049
+
1050
+ # check all misc channels for valid targets, not just the first one.
1051
+ # when multiple target channels exist, some may have values at timepoints
1052
+ # where others are nan. using any() across channels catches all of them.
1053
+ has_target = np.any(~np.isnan(target), axis=0)
1054
+ stops = np.nonzero(has_target)[0] + 1
979
1055
  stops = stops[(stops < stop) & (stops >= window_size_samples)]
980
1056
  stops = stops.astype(int)
981
1057
  metadata = pd.DataFrame(
@@ -0,0 +1 @@
1
+ __version__ = "1.3.2.dev173417708"
@@ -1,4 +1,5 @@
1
1
  # Authors: Robin Schirrmeister <robintibor@gmail.com>
2
+ # Sarthak Tayal <sarthaktayal2@gmail.com>
2
3
  #
3
4
  # License: BSD (3-clause)
4
5
 
@@ -35,18 +36,17 @@ def compute_amplitude_gradients_for_X(model, X):
35
36
  amps_th = to_tensor(amps.astype(np.float32), device=device).requires_grad_(True)
36
37
  phases_th = to_tensor(phases.astype(np.float32), device=device).requires_grad_(True)
37
38
 
39
+ # rebuild fft coefficients from amplitude and phase as real valued pairs,
40
+ # convert to complex, and invert back to the time domain.
41
+ # torch.irfft was removed after being deprecated since pytorch 1.7,
42
+ # so we use torch.fft.irfft which expects complex input directly.
38
43
  fft_coefs = amps_th.unsqueeze(-1) * torch.stack(
39
44
  (torch.cos(phases_th), torch.sin(phases_th)), dim=-1
40
45
  )
41
46
  fft_coefs = fft_coefs.squeeze(3)
42
47
 
43
- try:
44
- complex_fft_coefs = torch.view_as_complex(fft_coefs)
45
- iffted = torch.fft.irfft(complex_fft_coefs, n=X.shape[2], dim=2)
46
- except AttributeError:
47
- iffted = torch.irfft( # Deprecated since 1.7
48
- fft_coefs, signal_ndim=1, signal_sizes=(X.shape[2],)
49
- )
48
+ complex_fft_coefs = torch.view_as_complex(fft_coefs)
49
+ iffted = torch.fft.irfft(complex_fft_coefs, n=X.shape[2], dim=2)
50
50
 
51
51
  outs = model(iffted)
52
52
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: braindecode
3
- Version: 1.3.2.dev172702163
3
+ Version: 1.3.2.dev173417708
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>
@@ -48,7 +48,12 @@ Enhancements
48
48
  frequency, duration/window size, channel names, description summary, and
49
49
  epoch-level metadata including target distribution and extra metadata columns
50
50
  (signal-level details marked ``*`` are taken from the first recording).
51
+ - Add ``mapping``, ``preload``, ``picks``, ``drop_bad_windows``, and ``descriptions``
52
+ parameters to :func:`braindecode.datasets.mne.create_from_mne_epochs` to bring it to
53
+ parity with :func:`braindecode.datasets.mne.create_from_mne_raw`
54
+ (:gh:`941` by `Aman Srivastava`_).
51
55
  - Per-event-type windowing parameters in :func:`braindecode.preprocessing.windowers.create_windows_from_events` (:gh:`942` by `Pierre Guetschel`_)
56
+ - Add ``use_mne_epochs`` support to :func:`braindecode.preprocessing.windowers.create_fixed_length_windows` (:gh:`943` by `Pierre Guetschel`_)
52
57
 
53
58
  API changes
54
59
  ============
@@ -60,6 +65,9 @@ Requirements
60
65
 
61
66
  Bugs
62
67
  =====
68
+ - Fix multi-target channel windowing in :func:`braindecode.preprocessing.windowers.create_windows_from_target_channels`
69
+ to use the union of valid target positions across all misc channels instead of only the first channel
70
+ (by `Sarthak Tayal`_)
63
71
  - Fix :func:`braindecode.preprocessing.preprocess.filterbank` to preserve info fields
64
72
  (``description``, ``line_freq``, ``device_info``, etc.) when creating filtered copies,
65
73
  avoiding merge conflicts in MNE when adding channels (:gh:`928` by `Bruno Aristimunha`_)
@@ -71,7 +79,9 @@ Bugs
71
79
 
72
80
  Code health
73
81
  ============
74
- - None yet.
82
+ - Remove deprecated ``torch.irfft`` fallback in :func:`braindecode.visualization.gradients.compute_amplitude_gradients_for_X`,
83
+ now uses ``torch.fft.irfft`` directly since braindecode requires ``torch>=2.2``
84
+ (by `Sarthak Tayal`_)
75
85
 
76
86
 
77
87
  Current 1.3.2 (stable)
@@ -818,3 +828,5 @@ Authors
818
828
  .. _Thorir Mar Ingolfsson: https://github.com/Thoriri
819
829
  .. _Aniela Bulicz: https://github.com/AryaDro
820
830
  .. _Mattew Chew: https://github.com/MatthewChen37
831
+ .. _Aman Srivastava: https://github.com/aman-coder03
832
+ .. _Sarthak Tayal: https://github.com/tayal-sarthak
@@ -1 +0,0 @@
1
- __version__ = "1.3.2.dev172702163"