Braindecode 1.3.0.dev175563314__tar.gz → 1.3.0.dev175887834__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 (153) hide show
  1. {braindecode-1.3.0.dev175563314/braindecode.egg-info → braindecode-1.3.0.dev175887834}/PKG-INFO +9 -6
  2. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/__init__.py +0 -16
  3. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/hub.py +23 -238
  4. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/nmt.py +8 -16
  5. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/__init__.py +0 -2
  6. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/base.py +2 -2
  7. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/bendr.py +0 -25
  8. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/biot.py +0 -29
  9. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/config.py +2 -2
  10. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/labram.py +0 -24
  11. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/luna.py +0 -55
  12. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/signal_jepa.py +0 -27
  13. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/summary.csv +0 -1
  14. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/util.py +0 -10
  15. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/samplers/ssl.py +1 -1
  16. braindecode-1.3.0.dev175887834/braindecode/version.py +1 -0
  17. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834/braindecode.egg-info}/PKG-INFO +9 -6
  18. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode.egg-info/SOURCES.txt +0 -2
  19. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode.egg-info/requires.txt +8 -5
  20. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/api.rst +7 -60
  21. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/conf.py +1 -9
  22. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/whats_new.rst +5 -8
  23. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/pyproject.toml +13 -10
  24. braindecode-1.3.0.dev175563314/braindecode/datasets/bids_format.py +0 -714
  25. braindecode-1.3.0.dev175563314/braindecode/models/reve.py +0 -837
  26. braindecode-1.3.0.dev175563314/braindecode/version.py +0 -1
  27. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/LICENSE.txt +0 -0
  28. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/MANIFEST.in +0 -0
  29. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/NOTICE.txt +0 -0
  30. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/README.rst +0 -0
  31. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/__init__.py +0 -0
  32. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/augmentation/__init__.py +0 -0
  33. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/augmentation/base.py +0 -0
  34. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/augmentation/functional.py +0 -0
  35. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/augmentation/transforms.py +0 -0
  36. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/classifier.py +0 -0
  37. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/base.py +0 -0
  38. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/bbci.py +0 -0
  39. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/bcicomp.py +0 -0
  40. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/bids.py +0 -0
  41. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/chb_mit.py +0 -0
  42. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/experimental.py +0 -0
  43. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/hub_validation.py +0 -0
  44. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/mne.py +0 -0
  45. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/moabb.py +0 -0
  46. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/registry.py +0 -0
  47. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/siena.py +0 -0
  48. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/sleep_physio_challe_18.py +0 -0
  49. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/sleep_physionet.py +0 -0
  50. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/tuh.py +0 -0
  51. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/utils.py +0 -0
  52. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datasets/xy.py +0 -0
  53. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datautil/__init__.py +0 -0
  54. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datautil/channel_utils.py +0 -0
  55. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datautil/hub_formats.py +0 -0
  56. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datautil/serialization.py +0 -0
  57. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/datautil/util.py +0 -0
  58. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/eegneuralnet.py +0 -0
  59. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/functional/__init__.py +0 -0
  60. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/functional/functions.py +0 -0
  61. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/functional/initialization.py +0 -0
  62. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/atcnet.py +0 -0
  63. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/attentionbasenet.py +0 -0
  64. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/attn_sleep.py +0 -0
  65. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/contrawr.py +0 -0
  66. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/ctnet.py +0 -0
  67. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/deep4.py +0 -0
  68. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/deepsleepnet.py +0 -0
  69. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eegconformer.py +0 -0
  70. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eeginception_erp.py +0 -0
  71. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eeginception_mi.py +0 -0
  72. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eegitnet.py +0 -0
  73. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eegminer.py +0 -0
  74. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eegnet.py +0 -0
  75. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eegnex.py +0 -0
  76. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eegsimpleconv.py +0 -0
  77. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eegsym.py +0 -0
  78. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/eegtcnet.py +0 -0
  79. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/fbcnet.py +0 -0
  80. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/fblightconvnet.py +0 -0
  81. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/fbmsnet.py +0 -0
  82. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/hybrid.py +0 -0
  83. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/ifnet.py +0 -0
  84. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/medformer.py +0 -0
  85. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/msvtnet.py +0 -0
  86. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/patchedtransformer.py +0 -0
  87. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/sccnet.py +0 -0
  88. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/shallow_fbcsp.py +0 -0
  89. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/sinc_shallow.py +0 -0
  90. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
  91. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
  92. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/sparcnet.py +0 -0
  93. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/sstdpn.py +0 -0
  94. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/syncnet.py +0 -0
  95. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/tcn.py +0 -0
  96. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/tidnet.py +0 -0
  97. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/tsinception.py +0 -0
  98. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/models/usleep.py +0 -0
  99. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/__init__.py +0 -0
  100. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/activation.py +0 -0
  101. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/attention.py +0 -0
  102. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/blocks.py +0 -0
  103. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/convolution.py +0 -0
  104. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/filter.py +0 -0
  105. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/layers.py +0 -0
  106. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/linear.py +0 -0
  107. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/parametrization.py +0 -0
  108. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/stats.py +0 -0
  109. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/util.py +0 -0
  110. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/modules/wrapper.py +0 -0
  111. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/preprocessing/__init__.py +0 -0
  112. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/preprocessing/eegprep_preprocess.py +0 -0
  113. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/preprocessing/mne_preprocess.py +0 -0
  114. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/preprocessing/preprocess.py +0 -0
  115. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/preprocessing/util.py +0 -0
  116. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/preprocessing/windowers.py +0 -0
  117. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/regressor.py +0 -0
  118. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/samplers/__init__.py +0 -0
  119. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/samplers/base.py +0 -0
  120. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/training/__init__.py +0 -0
  121. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/training/callbacks.py +0 -0
  122. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/training/losses.py +0 -0
  123. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/training/scoring.py +0 -0
  124. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/util.py +0 -0
  125. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/visualization/__init__.py +0 -0
  126. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/visualization/confusion_matrices.py +0 -0
  127. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode/visualization/gradients.py +0 -0
  128. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode.egg-info/dependency_links.txt +0 -0
  129. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/braindecode.egg-info/top_level.txt +0 -0
  130. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/Makefile +0 -0
  131. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/_templates/autosummary/class.rst +0 -0
  132. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/_templates/autosummary/function.rst +0 -0
  133. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/cite.rst +0 -0
  134. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/help.rst +0 -0
  135. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/index.rst +0 -0
  136. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/install/install.rst +0 -0
  137. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/install/install_pip.rst +0 -0
  138. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/install/install_source.rst +0 -0
  139. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/attention.rst +0 -0
  140. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/channel.rst +0 -0
  141. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/convolution.rst +0 -0
  142. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/filterbank.rst +0 -0
  143. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/gnn.rst +0 -0
  144. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/interpretable.rst +0 -0
  145. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/lbm.rst +0 -0
  146. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/recurrent.rst +0 -0
  147. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/categorization/spd.rst +0 -0
  148. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/models.rst +0 -0
  149. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/models_categorization.rst +0 -0
  150. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/models_table.rst +0 -0
  151. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/models/models_visualization.rst +0 -0
  152. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/docs/sg_execution_times.rst +0 -0
  153. {braindecode-1.3.0.dev175563314 → braindecode-1.3.0.dev175887834}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: braindecode
3
- Version: 1.3.0.dev175563314
3
+ Version: 1.3.0.dev175887834
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>
@@ -22,12 +22,17 @@ Requires-Python: >=3.11
22
22
  Description-Content-Type: text/x-rst
23
23
  License-File: LICENSE.txt
24
24
  License-File: NOTICE.txt
25
- Requires-Dist: torch>=2.2
26
- Requires-Dist: torchaudio>=2.0
27
25
  Requires-Dist: mne>=1.11.0
28
26
  Requires-Dist: mne_bids>=0.16
27
+ Requires-Dist: numpy
28
+ Requires-Dist: pandas
29
+ Requires-Dist: scipy
30
+ Requires-Dist: matplotlib
29
31
  Requires-Dist: h5py
30
32
  Requires-Dist: skorch>=1.3.0
33
+ Requires-Dist: torch>=2.0
34
+ Requires-Dist: torchaudio>=2.0
35
+ Requires-Dist: einops
31
36
  Requires-Dist: joblib
32
37
  Requires-Dist: torchinfo
33
38
  Requires-Dist: wfdb
@@ -35,7 +40,7 @@ Requires-Dist: linear_attention_transformer
35
40
  Requires-Dist: docstring_inheritance
36
41
  Requires-Dist: rotary_embedding_torch
37
42
  Provides-Extra: moabb
38
- Requires-Dist: moabb>=1.4.3; extra == "moabb"
43
+ Requires-Dist: moabb>=1.4.2; extra == "moabb"
39
44
  Provides-Extra: eegprep
40
45
  Requires-Dist: eegprep[eeglabio]>=0.2.23; extra == "eegprep"
41
46
  Provides-Extra: hub
@@ -47,7 +52,6 @@ Requires-Dist: pytest-cov; extra == "tests"
47
52
  Requires-Dist: codecov; extra == "tests"
48
53
  Requires-Dist: pytest_cases; extra == "tests"
49
54
  Requires-Dist: mypy; extra == "tests"
50
- Requires-Dist: transformers>=4.57.0; extra == "tests"
51
55
  Provides-Extra: typing
52
56
  Requires-Dist: exca==0.4; extra == "typing"
53
57
  Requires-Dist: numpydantic>=1.7; extra == "typing"
@@ -71,7 +75,6 @@ Requires-Dist: openneuro-py; extra == "docs"
71
75
  Requires-Dist: plotly; extra == "docs"
72
76
  Requires-Dist: shap; extra == "docs"
73
77
  Requires-Dist: nbformat; extra == "docs"
74
- Requires-Dist: transformers; extra == "docs"
75
78
  Provides-Extra: all
76
79
  Requires-Dist: braindecode[moabb]; extra == "all"
77
80
  Requires-Dist: braindecode[tests]; extra == "all"
@@ -11,15 +11,6 @@ from .base import (
11
11
  )
12
12
  from .bcicomp import BCICompetitionIVDataset4
13
13
  from .bids import BIDSDataset, BIDSEpochsDataset
14
- from .bids_format import (
15
- BIDSDerivativesLayout,
16
- create_channels_tsv,
17
- create_eeg_json_sidecar,
18
- create_events_tsv,
19
- create_participants_tsv,
20
- description_to_bids_path,
21
- make_dataset_description,
22
- )
23
14
  from .chb_mit import CHBMIT
24
15
  from .mne import create_from_mne_epochs, create_from_mne_raw
25
16
  from .moabb import BNCI2014_001, HGD, MOABBDataset
@@ -38,13 +29,6 @@ __all__ = [
38
29
  "BaseConcatDataset",
39
30
  "BIDSDataset",
40
31
  "BIDSEpochsDataset",
41
- "BIDSDerivativesLayout",
42
- "create_events_tsv",
43
- "create_participants_tsv",
44
- "create_channels_tsv",
45
- "create_eeg_json_sidecar",
46
- "make_dataset_description",
47
- "description_to_bids_path",
48
32
  "MOABBDataset",
49
33
  "HGD",
50
34
  "BNCI2014_001",
@@ -3,21 +3,9 @@ Hugging Face Hub integration for EEG datasets.
3
3
 
4
4
  This module provides push_to_hub() and pull_from_hub() functionality
5
5
  for braindecode datasets, similar to the model Hub integration.
6
-
7
- The format follows a BIDS-like derivatives structure:
8
- - derivatives/braindecode/
9
- - dataset_description.json
10
- - participants.tsv
11
- - dataset.zarr/ (main data for efficient training)
12
- - sub-<label>/
13
- - eeg/
14
- - *_events.tsv
15
- - *_channels.tsv
16
- - *_eeg.json
17
6
  """
18
7
 
19
8
  # Authors: Kuntal Kokate
20
- # Bruno Aristimunha <b.aristimunha@gmail.com>
21
9
  #
22
10
  # License: BSD (3-clause)
23
11
 
@@ -42,8 +30,7 @@ if TYPE_CHECKING:
42
30
  import braindecode
43
31
 
44
32
  # Import shared validation utilities
45
- # Import BIDS format utilities
46
- from . import bids_format, hub_validation
33
+ from . import hub_validation
47
34
 
48
35
  # Import registry for dynamic class lookup (avoids circular imports)
49
36
  from .registry import get_dataset_class, get_dataset_type
@@ -89,15 +76,13 @@ class HubDatasetMixin:
89
76
  create_pr: bool = False,
90
77
  compression: str = "blosc",
91
78
  compression_level: int = 5,
92
- pipeline_name: str = "braindecode",
93
79
  ) -> str:
94
80
  """
95
- Upload the dataset to the Hugging Face Hub in BIDS-like Zarr format.
81
+ Upload the dataset to the Hugging Face Hub in Zarr format.
96
82
 
97
83
  The dataset is converted to Zarr format with blosc compression, which provides
98
- optimal random access performance for PyTorch training. The data is stored
99
- in a BIDS derivatives-like structure with events.tsv, channels.tsv,
100
- and participants.tsv sidecar files.
84
+ optimal random access performance for PyTorch training (based on comprehensive
85
+ benchmarking).
101
86
 
102
87
  Parameters
103
88
  ----------
@@ -115,8 +100,6 @@ class HubDatasetMixin:
115
100
  Compression algorithm for Zarr. Options: "blosc", "zstd", "gzip", None.
116
101
  compression_level : int, default=5
117
102
  Compression level (0-9). Level 5 provides optimal balance.
118
- pipeline_name : str, default="braindecode"
119
- Name of the processing pipeline for BIDS derivatives.
120
103
 
121
104
  Returns
122
105
  -------
@@ -133,11 +116,18 @@ class HubDatasetMixin:
133
116
  Examples
134
117
  --------
135
118
  >>> dataset = NMT(path=path, preload=True)
136
- >>> # Upload with BIDS-like structure
119
+ >>> # Upload with default settings (zarr with blosc compression)
137
120
  >>> url = dataset.push_to_hub(
138
121
  ... repo_id="myusername/nmt-dataset",
139
122
  ... commit_message="Upload NMT EEG dataset"
140
123
  ... )
124
+ >>>
125
+ >>> # Or customize compression
126
+ >>> url = dataset.push_to_hub(
127
+ ... repo_id="myusername/nmt-dataset",
128
+ ... compression="blosc",
129
+ ... compression_level=5
130
+ ... )
141
131
  """
142
132
  if huggingface_hub is False or zarr is False:
143
133
  raise ImportError(
@@ -164,45 +154,25 @@ class HubDatasetMixin:
164
154
  with tempfile.TemporaryDirectory() as tmpdir:
165
155
  tmp_path = Path(tmpdir)
166
156
 
167
- # Create BIDS-like derivatives structure
168
- log.info("Creating BIDS-like derivatives structure...")
169
- bids_layout = bids_format.BIDSDerivativesLayout(
170
- tmp_path, pipeline_name=pipeline_name
171
- )
172
- derivatives_dir = bids_layout.create_structure()
173
-
174
- # Save dataset_description.json
175
- bids_layout.save_dataset_description()
176
-
177
- # Save participants.tsv
178
- descriptions = [ds.description for ds in self.datasets]
179
- bids_layout.save_participants(descriptions)
180
-
181
- # Save BIDS sidecar files for each recording
182
- self._save_bids_sidecar_files(bids_layout)
183
-
184
- # Convert dataset to Zarr format inside derivatives
157
+ # Convert dataset to Zarr format
185
158
  log.info("Converting dataset to Zarr format...")
186
- dataset_path = derivatives_dir / "dataset.zarr"
187
-
159
+ dataset_path = tmp_path / "dataset.zarr"
188
160
  self._convert_to_zarr_inline(
189
161
  dataset_path,
190
162
  compression,
191
163
  compression_level,
192
164
  )
193
165
 
194
- # Save dataset metadata (README.md)
166
+ # Save dataset metadata
195
167
  self._save_dataset_card(tmp_path)
196
168
 
197
169
  # Save format info
198
170
  format_info_path = tmp_path / "format_info.json"
199
- with open(format_info_path, "w", encoding="utf-8") as f:
171
+ with open(format_info_path, "w") as f:
200
172
  format_info = self._get_format_info_inline()
201
173
  json.dump(
202
174
  {
203
175
  "format": "zarr",
204
- "bids_compatible": True,
205
- "pipeline_name": pipeline_name,
206
176
  "compression": compression,
207
177
  "compression_level": compression_level,
208
178
  "braindecode_version": braindecode.__version__,
@@ -215,8 +185,8 @@ class HubDatasetMixin:
215
185
  # Default commit message
216
186
  if commit_message is None:
217
187
  commit_message = (
218
- f"Upload EEG dataset in BIDS-like "
219
- f"Zarr format ({len(self.datasets)} recordings)"
188
+ f"Upload EEG dataset in Zarr format "
189
+ f"({len(self.datasets)} recordings)"
220
190
  )
221
191
 
222
192
  # Upload folder to Hub
@@ -236,7 +206,7 @@ class HubDatasetMixin:
236
206
  except Exception as e:
237
207
  raise RuntimeError(f"Failed to upload dataset: {e}")
238
208
 
239
- def _save_dataset_card(self, path: Path, bids_compatible: bool = True) -> None:
209
+ def _save_dataset_card(self, path: Path) -> None:
240
210
  """Generate and save a dataset card (README.md) with metadata.
241
211
 
242
212
  Parameters
@@ -278,71 +248,13 @@ class HubDatasetMixin:
278
248
  sfreq=sfreq,
279
249
  data_type=data_type,
280
250
  n_windows=n_windows,
281
- bids_compatible=True,
282
251
  )
283
252
 
284
253
  # Save README
285
254
  readme_path = path / "README.md"
286
- with open(readme_path, "w", encoding="utf-8") as f:
255
+ with open(readme_path, "w") as f:
287
256
  f.write(readme_content)
288
257
 
289
- def _save_bids_sidecar_files(
290
- self, bids_layout: "bids_format.BIDSDerivativesLayout"
291
- ) -> None:
292
- """Save BIDS-compliant sidecar files for each recording.
293
-
294
- This creates events.tsv, channels.tsv, and EEG sidecar JSON files
295
- for each recording in a BIDS-like directory structure.
296
-
297
- Parameters
298
- ----------
299
- bids_layout : BIDSDerivativesLayout
300
- BIDS layout object for path generation.
301
- """
302
- dataset_type = get_dataset_type(self.datasets[0])
303
-
304
- for i_ds, ds in enumerate(self.datasets):
305
- # Get BIDS entities from description
306
- description = ds.description if ds.description is not None else pd.Series()
307
-
308
- # Get BIDSPath for this recording using mne_bids
309
- bids_path = bids_layout.get_bids_path(description)
310
-
311
- # Create subject directory
312
- bids_path.mkdir(exist_ok=True)
313
-
314
- # Get metadata and info based on dataset type
315
- if dataset_type == "WindowsDataset":
316
- info = ds.windows.info
317
- metadata = ds.windows.metadata
318
- sfreq = info["sfreq"]
319
- elif dataset_type == "EEGWindowsDataset":
320
- info = ds.raw.info
321
- metadata = ds.metadata
322
- sfreq = info["sfreq"]
323
- elif dataset_type == "RawDataset":
324
- info = ds.raw.info
325
- metadata = None
326
- sfreq = info["sfreq"]
327
- else:
328
- continue
329
-
330
- # Determine task name from description or BIDSPath
331
- task_name = bids_path.task or "unknown"
332
-
333
- # Save BIDS sidecar files using mne_bids BIDSPath
334
- bids_format.save_bids_sidecar_files(
335
- bids_path=bids_path,
336
- info=info,
337
- metadata=metadata,
338
- sfreq=sfreq,
339
- task_name=str(task_name),
340
- )
341
-
342
- log.debug(
343
- f"Saved BIDS sidecar files for recording {i_ds} to {bids_path.directory}"
344
- )
345
-
346
258
  @classmethod
347
259
  def pull_from_hub(
348
260
  cls,
@@ -428,22 +340,8 @@ class HubDatasetMixin:
428
340
  else:
429
341
  format_info = {}
430
342
 
431
- # Determine if BIDS-compatible structure
432
- bids_compatible = format_info.get("bids_compatible", False)
433
- pipeline_name = format_info.get("pipeline_name", "braindecode")
434
-
435
- # Find zarr dataset path
436
- if bids_compatible:
437
- # Look in derivatives folder
438
- zarr_path = (
439
- Path(dataset_dir) / "derivatives" / pipeline_name / "dataset.zarr"
440
- )
441
- if not zarr_path.exists():
442
- # Fall back to root level (backwards compatibility)
443
- zarr_path = Path(dataset_dir) / "dataset.zarr"
444
- else:
445
- zarr_path = Path(dataset_dir) / "dataset.zarr"
446
-
343
+ # Load zarr dataset
344
+ zarr_path = Path(dataset_dir) / "dataset.zarr"
447
345
  if not zarr_path.exists():
448
346
  raise FileNotFoundError(
449
347
  f"Zarr dataset not found at {zarr_path}. "
@@ -452,17 +350,11 @@ class HubDatasetMixin:
452
350
 
453
351
  dataset = cls._load_from_zarr_inline(zarr_path, preload)
454
352
 
455
- # Load BIDS metadata if available
456
- if bids_compatible:
457
- cls._load_bids_metadata(dataset, Path(dataset_dir), pipeline_name)
458
-
459
353
  log.info(f"Dataset loaded successfully from {repo_id}")
460
354
  log.info(f"Recordings: {len(dataset.datasets)}")
461
355
  log.info(
462
356
  f"Total windows/samples: {format_info.get('total_samples', 'N/A')}"
463
357
  )
464
- if bids_compatible:
465
- log.info("BIDS sidecar files available in derivatives folder")
466
358
 
467
359
  return dataset
468
360
 
@@ -477,71 +369,6 @@ class HubDatasetMixin:
477
369
  except Exception as e:
478
370
  raise RuntimeError(f"Failed to load dataset from Hub: {e}")
479
371
 
480
- @classmethod
481
- def _load_bids_metadata(
482
- cls,
483
- dataset,
484
- dataset_dir: Path,
485
- pipeline_name: str,
486
- ) -> None:
487
- """Load BIDS metadata from sidecar files and attach to dataset.
488
-
489
- Parameters
490
- ----------
491
- dataset : BaseConcatDataset
492
- The loaded dataset to attach metadata to.
493
- dataset_dir : Path
494
- Root directory of the downloaded dataset.
495
- pipeline_name : str
496
- Name of the processing pipeline.
497
- """
498
- derivatives_dir = dataset_dir / "derivatives" / pipeline_name
499
-
500
- # Load participants.tsv if available
501
- participants_path = derivatives_dir / "participants.tsv"
502
- if participants_path.exists():
503
- try:
504
- participants_df = pd.read_csv(participants_path, sep="\t")
505
- # Store as attribute on the concat dataset
506
- dataset.participants = participants_df
507
- log.debug(
508
- f"Loaded participants info for {len(participants_df)} subjects"
509
- )
510
- except Exception as e:
511
- log.warning(f"Failed to load participants.tsv: {e}")
512
-
513
- # Create layout for path generation
514
- bids_layout = bids_format.BIDSDerivativesLayout(
515
- dataset_dir, pipeline_name=pipeline_name
516
- )
517
-
518
- # Try to load events.tsv files and attach to individual datasets
519
- for i_ds, ds in enumerate(dataset.datasets):
520
- description = ds.description if ds.description is not None else pd.Series()
521
-
522
- # Get BIDSPath for this recording
523
- bids_path = bids_layout.get_bids_path(description)
524
-
525
- # Load events.tsv if available
526
- events_path = bids_path.copy().update(suffix="events", extension=".tsv")
527
- if events_path.fpath.exists():
528
- try:
529
- events_df = pd.read_csv(events_path.fpath, sep="\t")
530
- ds.bids_events = events_df
531
- log.debug(f"Loaded events for recording {i_ds}")
532
- except Exception as e:
533
- log.warning(f"Failed to load events for recording {i_ds}: {e}")
534
-
535
- # Load channels.tsv if available
536
- channels_path = bids_path.copy().update(suffix="channels", extension=".tsv")
537
- if channels_path.fpath.exists():
538
- try:
539
- channels_df = pd.read_csv(channels_path.fpath, sep="\t")
540
- ds.bids_channels = channels_df
541
- log.debug(f"Loaded channels for recording {i_ds}")
542
- except Exception as e:
543
- log.warning(f"Failed to load channels for recording {i_ds}: {e}")
544
-
545
372
  def _convert_to_zarr_inline(
546
373
  self,
547
374
  output_path: Path,
@@ -1036,7 +863,6 @@ def _generate_readme_content(
1036
863
  data_type: str,
1037
864
  n_windows: int,
1038
865
  format: str = "zarr",
1039
- bids_compatible: bool = True,
1040
866
  ):
1041
867
  """Generate README.md content for a dataset uploaded to the Hub."""
1042
868
  # Use safe access for total size and format sfreq nicely
@@ -1045,52 +871,12 @@ def _generate_readme_content(
1045
871
  )
1046
872
  sfreq_str = f"{sfreq:g}" if sfreq is not None else "N/A"
1047
873
 
1048
- bids_section = ""
1049
- if bids_compatible:
1050
- bids_section = """
1051
- ## BIDS-like Structure
1052
-
1053
- This dataset follows a BIDS derivatives-like structure for compatibility with
1054
- neuroimaging tools while maintaining efficiency for deep learning:
1055
-
1056
- ```
1057
- derivatives/braindecode/
1058
- ├── dataset_description.json # BIDS dataset description
1059
- ├── participants.tsv # Subject-level metadata
1060
- ├── dataset.zarr/ # Main data (optimized for training)
1061
- └── sub-<label>/
1062
- └── eeg/
1063
- ├── *_events.tsv # Trial/window events
1064
- ├── *_channels.tsv # Channel information
1065
- └── *_eeg.json # Recording metadata
1066
- ```
1067
-
1068
- ### Accessing BIDS Metadata
1069
-
1070
- After loading the dataset, BIDS metadata is available:
1071
-
1072
- ```python
1073
- # Access participants info
1074
- if hasattr(dataset, "participants"):
1075
- print(dataset.participants)
1076
-
1077
- # Access events for a recording
1078
- if hasattr(dataset.datasets[0], "bids_events"):
1079
- print(dataset.datasets[0].bids_events)
1080
-
1081
- # Access channel info
1082
- if hasattr(dataset.datasets[0], "bids_channels"):
1083
- print(dataset.datasets[0].bids_channels)
1084
- ```
1085
- """
1086
-
1087
874
  return f"""---
1088
875
  tags:
1089
876
  - braindecode
1090
877
  - eeg
1091
878
  - neuroscience
1092
879
  - brain-computer-interface
1093
- - bids
1094
880
  license: unknown
1095
881
  ---
1096
882
 
@@ -1109,7 +895,6 @@ This dataset was created using [braindecode](https://braindecode.org), a library
1109
895
  | Number of windows / samples | {n_windows} |
1110
896
  | Total size | {total_size_mb:.2f} MB |
1111
897
  | Storage format | {format} |
1112
- | BIDS compatible | {"Yes" if bids_compatible else "No"} |
1113
898
 
1114
899
  ## Usage
1115
900
 
@@ -1148,7 +933,7 @@ To load this dataset::
1148
933
  # y shape: [batch_size]
1149
934
  # metainfo shape: [batch_size, 2] (start and end indices)
1150
935
  # Process your batch...
1151
- {bids_section}
936
+
1152
937
  ## Dataset Format
1153
938
 
1154
939
  This dataset is stored in **Zarr** format, optimized for:
@@ -150,10 +150,7 @@ class NMT(BaseConcatDataset):
150
150
  os.path.join(path, "Labels.csv"), index_col="recordname"
151
151
  )
152
152
  if recording_ids is not None:
153
- # Match metadata by record name instead of position to fix alignment bug
154
- # when CSV order differs from sorted file order
155
- selected_recordnames = [os.path.basename(fp) for fp in file_paths]
156
- description = description.loc[selected_recordnames]
153
+ description = description.iloc[recording_ids]
157
154
  description.replace(
158
155
  {
159
156
  "not specified": "X",
@@ -199,23 +196,18 @@ def _get_header(*args):
199
196
 
200
197
  def _fake_pd_read_csv(*args, **kwargs):
201
198
  # Create a list of lists to hold the data
202
- # Updated to match the file IDs from _NMT_PATHS (0000036-0000042)
203
- # to align with the mocked glob.glob return value
204
199
  data = [
205
- ["0000036.edf", "normal", 35, "male", "train"],
206
- ["0000037.edf", "abnormal", 28, "female", "test"],
207
- ["0000038.edf", "normal", 62, "male", "train"],
208
- ["0000039.edf", "abnormal", 41, "female", "test"],
209
- ["0000040.edf", "normal", 19, "male", "train"],
210
- ["0000041.edf", "abnormal", 55, "female", "test"],
211
- ["0000042.edf", "normal", 71, "male", "train"],
200
+ ["0000001.edf", "normal", 35, "male", "train"],
201
+ ["0000002.edf", "abnormal", 28, "female", "test"],
202
+ ["0000003.edf", "normal", 62, "male", "train"],
203
+ ["0000004.edf", "abnormal", 41, "female", "test"],
204
+ ["0000005.edf", "normal", 19, "male", "train"],
205
+ ["0000006.edf", "abnormal", 55, "female", "test"],
206
+ ["0000007.edf", "normal", 71, "male", "train"],
212
207
  ]
213
208
 
214
209
  # Create the DataFrame, specifying column names
215
210
  df = pd.DataFrame(data, columns=["recordname", "label", "age", "gender", "loc"])
216
-
217
- # Set recordname as index to match the real pd.read_csv behavior with index_col="recordname"
218
- df.set_index("recordname", inplace=True)
219
211
 
220
212
  return df
221
213
 
@@ -32,7 +32,6 @@ from .luna import LUNA
32
32
  from .medformer import MEDFormer
33
33
  from .msvtnet import MSVTNet
34
34
  from .patchedtransformer import PBT
35
- from .reve import REVE
36
35
  from .sccnet import SCCNet
37
36
  from .shallow_fbcsp import ShallowFBCSPNet
38
37
  from .signal_jepa import (
@@ -94,7 +93,6 @@ __all__ = [
94
93
  "MEDFormer",
95
94
  "MSVTNet",
96
95
  "PBT",
97
- "REVE",
98
96
  "SCCNet",
99
97
  "ShallowFBCSPNet",
100
98
  "SignalJEPA",
@@ -192,7 +192,7 @@ class EEGModuleMixin(_BaseHubMixin, metaclass=NumpyDocstringInheritanceInitMeta)
192
192
  n_times is not None
193
193
  and input_window_seconds is not None
194
194
  and sfreq is not None
195
- and n_times != round(input_window_seconds * sfreq)
195
+ and n_times != int(input_window_seconds * sfreq)
196
196
  ):
197
197
  raise ValueError(
198
198
  f"{n_times=} different from {input_window_seconds=} * {sfreq=}"
@@ -236,7 +236,7 @@ class EEGModuleMixin(_BaseHubMixin, metaclass=NumpyDocstringInheritanceInitMeta)
236
236
  and self._input_window_seconds is not None
237
237
  and self._sfreq is not None
238
238
  ):
239
- return round(self._input_window_seconds * self._sfreq)
239
+ return int(self._input_window_seconds * self._sfreq)
240
240
  elif self._n_times is None:
241
241
  raise ValueError(
242
242
  "n_times could not be inferred. "
@@ -95,31 +95,6 @@ class BENDR(EEGModuleMixin, nn.Module):
95
95
  **self-supervised pre-training** on large, unlabeled EEG datasets (like TUEG) followed
96
96
  by subsequent fine-tuning on the specific downstream classification task [bendr]_.
97
97
 
98
- .. important::
99
- **Pre-trained Weights Available**
100
-
101
- This model has pre-trained weights available on the Hugging Face Hub.
102
- You can load them using:
103
-
104
- .. code-block:: python
105
-
106
- from braindecode.models import BENDR
107
-
108
- # Load pre-trained model from Hugging Face Hub
109
- # you can specify `n_outputs` for your downstream task
110
- model = BENDR.from_pretrained("braindecode/braindecode-bendr", n_outputs=2)
111
-
112
- To push your own trained model to the Hub:
113
-
114
- .. code-block:: python
115
-
116
- # After training your model
117
- model.push_to_hub(
118
- repo_id="username/my-bendr-model", commit_message="Upload trained BENDR model"
119
- )
120
-
121
- Requires installing ``braindecode[hug]`` for Hub integration.
122
-
123
98
  Parameters
124
99
  ----------
125
100
  encoder_h : int, default=512
@@ -41,35 +41,6 @@ class BIOT(EEGModuleMixin, nn.Module):
41
41
  linear layer that takes the output of the `BIOTEncoder` and outputs
42
42
  the classification probabilities.
43
43
 
44
- .. important::
45
- **Pre-trained Weights Available**
46
-
47
- This model has pre-trained weights available on the Hugging Face Hub.
48
- You can load them using:
49
-
50
- .. code-block:: python
51
-
52
- from braindecode.models import BIOT
53
-
54
- # Load the original pre-trained model from Hugging Face Hub
55
- # For 16-channel models:
56
- model = BIOT.from_pretrained("braindecode/biot-pretrained-prest-16chs")
57
-
58
- # For 18-channel models:
59
- model = BIOT.from_pretrained("braindecode/biot-pretrained-shhs-prest-18chs")
60
- model = BIOT.from_pretrained("braindecode/biot-pretrained-six-datasets-18chs")
61
-
62
- To push your own trained model to the Hub:
63
-
64
- .. code-block:: python
65
-
66
- # After training your model
67
- model.push_to_hub(
68
- repo_id="username/my-biot-model", commit_message="Upload trained BIOT model"
69
- )
70
-
71
- Requires installing ``braindecode[hug]`` for Hub integration.
72
-
73
44
  .. versionadded:: 0.9
74
45
 
75
46
  Parameters
@@ -151,12 +151,12 @@ def make_model_config(
151
151
  and sfreq is not None
152
152
  and input_window_seconds is not None
153
153
  ):
154
- if n_times != round(input_window_seconds * sfreq):
154
+ if n_times != int(input_window_seconds * sfreq):
155
155
  raise ValueError(
156
156
  f"Provided {n_times=} does not match {input_window_seconds=} * {sfreq=}."
157
157
  )
158
158
  elif n_times is None and sfreq is not None and input_window_seconds is not None:
159
- data["n_times"] = round(input_window_seconds * sfreq)
159
+ data["n_times"] = int(input_window_seconds * sfreq)
160
160
  elif sfreq is None and n_times is not None and input_window_seconds is not None:
161
161
  data["sfreq"] = n_times / input_window_seconds
162
162
  elif input_window_seconds is None and n_times is not None and sfreq is not None: