braindecode 1.5.0.dev182195895__tar.gz → 1.5.1__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 (573) hide show
  1. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/NOTICE.txt +5 -0
  2. {braindecode-1.5.0.dev182195895/braindecode.egg-info → braindecode-1.5.1}/PKG-INFO +6 -2
  3. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/augmentation/__init__.py +2 -0
  4. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/augmentation/functional.py +141 -9
  5. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/augmentation/transforms.py +97 -0
  6. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/base.py +119 -1
  7. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/sleep_physionet.py +15 -1
  8. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/__init__.py +16 -3
  9. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/base.py +16 -4
  10. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/bendr.py +92 -28
  11. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/biot.py +61 -1
  12. braindecode-1.5.1/braindecode/models/codebrain.py +977 -0
  13. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/config.py +5 -4
  14. braindecode-1.5.1/braindecode/models/emg2qwerty.py +914 -0
  15. braindecode-1.5.1/braindecode/models/interpolated.py +182 -0
  16. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/labram.py +249 -269
  17. braindecode-1.5.1/braindecode/models/meta_neuromotor.py +1774 -0
  18. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/reve.py +1 -1
  19. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/signal_jepa.py +463 -38
  20. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/summary.csv +7 -0
  21. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/util.py +151 -20
  22. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/modules/__init__.py +2 -0
  23. braindecode-1.5.1/braindecode/modules/interpolation.py +201 -0
  24. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/preprocessing/eegprep_preprocess.py +51 -6
  25. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/preprocessing/preprocess.py +38 -17
  26. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/preprocessing/windowers.py +13 -4
  27. braindecode-1.5.1/braindecode/version.py +1 -0
  28. braindecode-1.5.1/braindecode/visualization/__init__.py +45 -0
  29. braindecode-1.5.1/braindecode/visualization/attribution.py +152 -0
  30. braindecode-1.5.1/braindecode/visualization/frequency.py +89 -0
  31. braindecode-1.5.1/braindecode/visualization/metrics.py +414 -0
  32. braindecode-1.5.1/braindecode/visualization/sanity.py +117 -0
  33. braindecode-1.5.1/braindecode/visualization/topology.py +64 -0
  34. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1/braindecode.egg-info}/PKG-INFO +6 -2
  35. braindecode-1.5.1/braindecode.egg-info/SOURCES.txt +567 -0
  36. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode.egg-info/requires.txt +6 -1
  37. braindecode-1.5.1/docs/_build/html/_downloads/090305d06248840b75133975e5121f41/plot_sleep_staging_chambon2018.ipynb +302 -0
  38. braindecode-1.5.1/docs/_build/html/_downloads/0ada35f18bb95235ba2842270483081f/plot_finetune_foundation_model.ipynb +219 -0
  39. braindecode-1.5.1/docs/_build/html/_downloads/0f2bf063e08b7d05b80e0004fcbbb6f9/benchmark_lazy_eager_loading.ipynb +183 -0
  40. braindecode-1.5.1/docs/_build/html/_downloads/137d0b161de96c88644fd65258fc20b5/tutorial_create_fixed_window_length.ipynb +190 -0
  41. braindecode-1.5.1/docs/_build/html/_downloads/1c6590d134fa0befda654e89aa55b2ac/plot_benchmark_preprocessing.ipynb +104 -0
  42. braindecode-1.5.1/docs/_build/html/_downloads/1d879df548fa18be8c23d9ca0dc008d4/plot_data_augmentation.ipynb +259 -0
  43. braindecode-1.5.1/docs/_build/html/_downloads/2466f8ec5c733d0bd65e187b45d875cc/plot_data_augmentation_search.ipynb +302 -0
  44. braindecode-1.5.1/docs/_build/html/_downloads/263464a28477cf8decb861ae6e2e9be7/plot_how_train_test_and_tune.ipynb +375 -0
  45. braindecode-1.5.1/docs/_build/html/_downloads/3862cafd7f0d815e434319ffe525afc8/plot_bcic_iv_2a_moabb_cropped.ipynb +244 -0
  46. braindecode-1.5.1/docs/_build/html/_downloads/408ca4ffd0ea1f76faa9ef602734ac94/plot_tuh_eeg_corpus.ipynb +187 -0
  47. braindecode-1.5.1/docs/_build/html/_downloads/5030717acb00990b394b83314b0797d9/plot_bids_dataset_example.ipynb +97 -0
  48. braindecode-1.5.1/docs/_build/html/_downloads/64c99f99abefd72dcd2a3f5e7ddebfce/plot_channel_interpolation.ipynb +222 -0
  49. braindecode-1.5.1/docs/_build/html/_downloads/66ea18b3b9cf0802bbd32bb903ab554e/plot_temporal_generalization.ipynb +226 -0
  50. braindecode-1.5.1/docs/_build/html/_downloads/71f6b29d340c0ff57ee55b0da637518b/plot_interpretability.ipynb +266 -0
  51. braindecode-1.5.1/docs/_build/html/_downloads/75a73c7d94f3a671fd3dec28f4031ead/plot_regression.ipynb +212 -0
  52. braindecode-1.5.1/docs/_build/html/_downloads/84fbcd59a346e5e56758285122dc69e2/plot_sleep_staging_eldele2021.ipynb +302 -0
  53. braindecode-1.5.1/docs/_build/html/_downloads/8616a7f968141825e56ab3e3d59be449/plot_tuh_discrete_multitarget.ipynb +169 -0
  54. braindecode-1.5.1/docs/_build/html/_downloads/8b5ba06718764b959e8dea1dd0bb97df/plot_sleep_staging_usleep.ipynb +266 -0
  55. braindecode-1.5.1/docs/_build/html/_downloads/91651c9d4fde110b4a53f5775a91acc5/plot_mne_dataset_example.ipynb +104 -0
  56. braindecode-1.5.1/docs/_build/html/_downloads/93fdea8cbadaf0e3afa2eb2be3ebc483/bcic_iv_4_ecog_trial.ipynb +376 -0
  57. braindecode-1.5.1/docs/_build/html/_downloads/9a4447462c3b255ba7e5ca212bbadd52/plot_bcic_iv_2a_moabb_trial.ipynb +282 -0
  58. braindecode-1.5.1/docs/_build/html/_downloads/9ecad1eb1db853df0ba20dbb97303c02/plot_exca_config.ipynb +439 -0
  59. braindecode-1.5.1/docs/_build/html/_downloads/a2f12129facb042643a99d4b9de1886d/bcic_iv_4_ecog_cropped.ipynb +363 -0
  60. braindecode-1.5.1/docs/_build/html/_downloads/a39e4245738e55e0eb7084c545ed05bc/plot_hyperparameter_tuning_with_scikit-learn.ipynb +257 -0
  61. braindecode-1.5.1/docs/_build/html/_downloads/a6249715d3c30cb41c4af85938cca008/plot_moabb_dataset_example.ipynb +140 -0
  62. braindecode-1.5.1/docs/_build/html/_downloads/a868f9d41de95f5f6defc26e291cf4aa/plot_preprocessing_classes.ipynb +194 -0
  63. braindecode-1.5.1/docs/_build/html/_downloads/a86d0c5f3a882a069df1683a708d3e25/plot_train_in_pure_pytorch_and_pytorch_lightning.ipynb +250 -0
  64. braindecode-1.5.1/docs/_build/html/_downloads/aa8426d97090e7b3062c4e4732c3214a/plot_relative_positioning.ipynb +266 -0
  65. braindecode-1.5.1/docs/_build/html/_downloads/b7179beb2f9c065d6149a3b430876706/bids_dataset_example.ipynb +97 -0
  66. braindecode-1.5.1/docs/_build/html/_downloads/b9d19304ecd233ea7a79d4365316ea49/plot_load_save_datasets.ipynb +176 -0
  67. braindecode-1.5.1/docs/_build/html/_downloads/cb62940d13f700ed2b9e813705e9d437/plot_moabb_benchmark.ipynb +122 -0
  68. braindecode-1.5.1/docs/_build/html/_downloads/cd24c95e5e6c988ebb6ece50ac672ab5/plot_bcic_iv_2a_eegprep_cleaning.ipynb +271 -0
  69. braindecode-1.5.1/docs/_build/html/_downloads/f158ead3e4720f6f4685ff1d3f48dc15/plot_hub_integration.ipynb +201 -0
  70. braindecode-1.5.1/docs/_build/html/_downloads/f3c89d39e947a121c7920b4d415413a2/plot_split_dataset.ipynb +180 -0
  71. braindecode-1.5.1/docs/_build/html/_downloads/f7b38cac92c078838442753121efc297/plot_custom_dataset_example.ipynb +140 -0
  72. braindecode-1.5.1/docs/_build/html/_downloads/fa7c2c982eb044a92a764e44b7365fd6/plot_load_pretrained_models.ipynb +222 -0
  73. braindecode-1.5.1/docs/_build/html/_downloads/fff46913db5173d3ae22c1113acffb45/plot_basic_training_epochs.ipynb +237 -0
  74. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/api.rst +106 -4
  75. braindecode-1.5.1/docs/auto_examples/advanced_training/bcic_iv_4_ecog_cropped.ipynb +363 -0
  76. braindecode-1.5.1/docs/auto_examples/advanced_training/bcic_iv_4_ecog_cropped.rst +656 -0
  77. braindecode-1.5.1/docs/auto_examples/advanced_training/index.rst +191 -0
  78. braindecode-1.5.1/docs/auto_examples/advanced_training/plot_data_augmentation.ipynb +259 -0
  79. braindecode-1.5.1/docs/auto_examples/advanced_training/plot_data_augmentation.rst +2000 -0
  80. braindecode-1.5.1/docs/auto_examples/advanced_training/plot_data_augmentation_search.ipynb +302 -0
  81. braindecode-1.5.1/docs/auto_examples/advanced_training/plot_data_augmentation_search.rst +742 -0
  82. braindecode-1.5.1/docs/auto_examples/advanced_training/plot_exca_config.ipynb +439 -0
  83. braindecode-1.5.1/docs/auto_examples/advanced_training/plot_exca_config.rst +934 -0
  84. braindecode-1.5.1/docs/auto_examples/advanced_training/plot_finetune_foundation_model.ipynb +219 -0
  85. braindecode-1.5.1/docs/auto_examples/advanced_training/plot_finetune_foundation_model.rst +389 -0
  86. braindecode-1.5.1/docs/auto_examples/advanced_training/plot_interpretability.ipynb +266 -0
  87. braindecode-1.5.1/docs/auto_examples/advanced_training/plot_interpretability.rst +1295 -0
  88. braindecode-1.5.1/docs/auto_examples/advanced_training/plot_moabb_benchmark.ipynb +122 -0
  89. braindecode-1.5.1/docs/auto_examples/advanced_training/plot_moabb_benchmark.rst +327 -0
  90. braindecode-1.5.1/docs/auto_examples/advanced_training/plot_relative_positioning.ipynb +266 -0
  91. braindecode-1.5.1/docs/auto_examples/advanced_training/plot_relative_positioning.rst +902 -0
  92. braindecode-1.5.1/docs/auto_examples/advanced_training/plot_temporal_generalization.ipynb +226 -0
  93. braindecode-1.5.1/docs/auto_examples/advanced_training/plot_temporal_generalization.rst +648 -0
  94. braindecode-1.5.1/docs/auto_examples/advanced_training/sg_execution_times.rst +61 -0
  95. braindecode-1.5.1/docs/auto_examples/applied_examples/bcic_iv_4_ecog_trial.ipynb +376 -0
  96. braindecode-1.5.1/docs/auto_examples/applied_examples/bcic_iv_4_ecog_trial.rst +603 -0
  97. braindecode-1.5.1/docs/auto_examples/applied_examples/index.rst +137 -0
  98. braindecode-1.5.1/docs/auto_examples/applied_examples/plot_sleep_staging_chambon2018.ipynb +302 -0
  99. braindecode-1.5.1/docs/auto_examples/applied_examples/plot_sleep_staging_chambon2018.rst +546 -0
  100. braindecode-1.5.1/docs/auto_examples/applied_examples/plot_sleep_staging_eldele2021.ipynb +302 -0
  101. braindecode-1.5.1/docs/auto_examples/applied_examples/plot_sleep_staging_eldele2021.rst +579 -0
  102. braindecode-1.5.1/docs/auto_examples/applied_examples/plot_sleep_staging_usleep.ipynb +266 -0
  103. braindecode-1.5.1/docs/auto_examples/applied_examples/plot_sleep_staging_usleep.rst +493 -0
  104. braindecode-1.5.1/docs/auto_examples/applied_examples/plot_tuh_eeg_corpus.ipynb +187 -0
  105. braindecode-1.5.1/docs/auto_examples/applied_examples/plot_tuh_eeg_corpus.rst +435 -0
  106. braindecode-1.5.1/docs/auto_examples/applied_examples/sg_execution_times.rst +52 -0
  107. braindecode-1.5.1/docs/auto_examples/applied_examples/tutorial_create_fixed_window_length.ipynb +190 -0
  108. braindecode-1.5.1/docs/auto_examples/applied_examples/tutorial_create_fixed_window_length.rst +365 -0
  109. braindecode-1.5.1/docs/auto_examples/datasets_io/benchmark_lazy_eager_loading.ipynb +183 -0
  110. braindecode-1.5.1/docs/auto_examples/datasets_io/benchmark_lazy_eager_loading.rst +504 -0
  111. braindecode-1.5.1/docs/auto_examples/datasets_io/bids_dataset_example.ipynb +97 -0
  112. braindecode-1.5.1/docs/auto_examples/datasets_io/bids_dataset_example.rst +110 -0
  113. braindecode-1.5.1/docs/auto_examples/datasets_io/index.rst +209 -0
  114. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_benchmark_preprocessing.ipynb +104 -0
  115. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_benchmark_preprocessing.rst +540 -0
  116. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_bids_dataset_example.ipynb +97 -0
  117. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_bids_dataset_example.rst +3591 -0
  118. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_custom_dataset_example.ipynb +140 -0
  119. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_custom_dataset_example.rst +323 -0
  120. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_hub_integration.ipynb +201 -0
  121. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_hub_integration.rst +696 -0
  122. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_load_save_datasets.ipynb +176 -0
  123. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_load_save_datasets.rst +507 -0
  124. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_mne_dataset_example.ipynb +104 -0
  125. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_mne_dataset_example.rst +347 -0
  126. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_moabb_dataset_example.ipynb +140 -0
  127. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_moabb_dataset_example.rst +320 -0
  128. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_split_dataset.ipynb +180 -0
  129. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_split_dataset.rst +835 -0
  130. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_tuh_discrete_multitarget.ipynb +169 -0
  131. braindecode-1.5.1/docs/auto_examples/datasets_io/plot_tuh_discrete_multitarget.rst +379 -0
  132. braindecode-1.5.1/docs/auto_examples/datasets_io/sg_execution_times.rst +64 -0
  133. braindecode-1.5.1/docs/auto_examples/index.rst +748 -0
  134. braindecode-1.5.1/docs/auto_examples/model_building/index.rst +227 -0
  135. braindecode-1.5.1/docs/auto_examples/model_building/plot_basic_training_epochs.ipynb +237 -0
  136. braindecode-1.5.1/docs/auto_examples/model_building/plot_basic_training_epochs.rst +1936 -0
  137. braindecode-1.5.1/docs/auto_examples/model_building/plot_bcic_iv_2a_eegprep_cleaning.ipynb +271 -0
  138. braindecode-1.5.1/docs/auto_examples/model_building/plot_bcic_iv_2a_eegprep_cleaning.rst +556 -0
  139. braindecode-1.5.1/docs/auto_examples/model_building/plot_bcic_iv_2a_moabb_cropped.ipynb +244 -0
  140. braindecode-1.5.1/docs/auto_examples/model_building/plot_bcic_iv_2a_moabb_cropped.rst +545 -0
  141. braindecode-1.5.1/docs/auto_examples/model_building/plot_bcic_iv_2a_moabb_trial.ipynb +282 -0
  142. braindecode-1.5.1/docs/auto_examples/model_building/plot_bcic_iv_2a_moabb_trial.rst +507 -0
  143. braindecode-1.5.1/docs/auto_examples/model_building/plot_channel_interpolation.ipynb +222 -0
  144. braindecode-1.5.1/docs/auto_examples/model_building/plot_channel_interpolation.rst +464 -0
  145. braindecode-1.5.1/docs/auto_examples/model_building/plot_how_train_test_and_tune.ipynb +375 -0
  146. braindecode-1.5.1/docs/auto_examples/model_building/plot_how_train_test_and_tune.rst +1101 -0
  147. braindecode-1.5.1/docs/auto_examples/model_building/plot_hyperparameter_tuning_with_scikit-learn.ipynb +257 -0
  148. braindecode-1.5.1/docs/auto_examples/model_building/plot_hyperparameter_tuning_with_scikit-learn.rst +656 -0
  149. braindecode-1.5.1/docs/auto_examples/model_building/plot_load_pretrained_models.ipynb +222 -0
  150. braindecode-1.5.1/docs/auto_examples/model_building/plot_load_pretrained_models.rst +775 -0
  151. braindecode-1.5.1/docs/auto_examples/model_building/plot_preprocessing_classes.ipynb +194 -0
  152. braindecode-1.5.1/docs/auto_examples/model_building/plot_preprocessing_classes.rst +990 -0
  153. braindecode-1.5.1/docs/auto_examples/model_building/plot_regression.ipynb +212 -0
  154. braindecode-1.5.1/docs/auto_examples/model_building/plot_regression.rst +547 -0
  155. braindecode-1.5.1/docs/auto_examples/model_building/plot_train_in_pure_pytorch_and_pytorch_lightning.ipynb +250 -0
  156. braindecode-1.5.1/docs/auto_examples/model_building/plot_train_in_pure_pytorch_and_pytorch_lightning.rst +698 -0
  157. braindecode-1.5.1/docs/auto_examples/model_building/sg_execution_times.rst +64 -0
  158. braindecode-1.5.1/docs/auto_examples/sg_execution_times.rst +37 -0
  159. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/cite.rst +2 -2
  160. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/conf.py +34 -2
  161. braindecode-1.5.1/docs/generated/activation/braindecode.modules.LogActivation.rst +130 -0
  162. braindecode-1.5.1/docs/generated/activation/braindecode.modules.SafeLog.rst +135 -0
  163. braindecode-1.5.1/docs/generated/attention/braindecode.modules.CAT.rst +130 -0
  164. braindecode-1.5.1/docs/generated/attention/braindecode.modules.CATLite.rst +130 -0
  165. braindecode-1.5.1/docs/generated/attention/braindecode.modules.CBAM.rst +130 -0
  166. braindecode-1.5.1/docs/generated/attention/braindecode.modules.ECA.rst +130 -0
  167. braindecode-1.5.1/docs/generated/attention/braindecode.modules.EncNet.rst +130 -0
  168. braindecode-1.5.1/docs/generated/attention/braindecode.modules.FCA.rst +137 -0
  169. braindecode-1.5.1/docs/generated/attention/braindecode.modules.GCT.rst +130 -0
  170. braindecode-1.5.1/docs/generated/attention/braindecode.modules.GSoP.rst +130 -0
  171. braindecode-1.5.1/docs/generated/attention/braindecode.modules.GatherExcite.rst +130 -0
  172. braindecode-1.5.1/docs/generated/attention/braindecode.modules.MultiHeadAttention.rst +130 -0
  173. braindecode-1.5.1/docs/generated/attention/braindecode.modules.SRM.rst +130 -0
  174. braindecode-1.5.1/docs/generated/attention/braindecode.modules.SqueezeAndExcitation.rst +130 -0
  175. braindecode-1.5.1/docs/generated/blocks/braindecode.modules.FeedForwardBlock.rst +127 -0
  176. braindecode-1.5.1/docs/generated/blocks/braindecode.modules.InceptionBlock.rst +130 -0
  177. braindecode-1.5.1/docs/generated/blocks/braindecode.modules.MLP.rst +127 -0
  178. braindecode-1.5.1/docs/generated/braindecode.augmentation.AmplitudeScale.rst +139 -0
  179. braindecode-1.5.1/docs/generated/braindecode.augmentation.AugmentedDataLoader.rst +21 -0
  180. braindecode-1.5.1/docs/generated/braindecode.augmentation.BandstopFilter.rst +139 -0
  181. braindecode-1.5.1/docs/generated/braindecode.augmentation.ChannelsDropout.rst +139 -0
  182. braindecode-1.5.1/docs/generated/braindecode.augmentation.ChannelsReref.rst +139 -0
  183. braindecode-1.5.1/docs/generated/braindecode.augmentation.ChannelsShuffle.rst +139 -0
  184. braindecode-1.5.1/docs/generated/braindecode.augmentation.ChannelsSymmetry.rst +139 -0
  185. braindecode-1.5.1/docs/generated/braindecode.augmentation.Compose.rst +132 -0
  186. braindecode-1.5.1/docs/generated/braindecode.augmentation.FTSurrogate.rst +139 -0
  187. braindecode-1.5.1/docs/generated/braindecode.augmentation.FrequencyShift.rst +139 -0
  188. braindecode-1.5.1/docs/generated/braindecode.augmentation.GaussianNoise.rst +139 -0
  189. braindecode-1.5.1/docs/generated/braindecode.augmentation.IdentityTransform.rst +134 -0
  190. braindecode-1.5.1/docs/generated/braindecode.augmentation.MaskEncoding.rst +139 -0
  191. braindecode-1.5.1/docs/generated/braindecode.augmentation.Mixup.rst +139 -0
  192. braindecode-1.5.1/docs/generated/braindecode.augmentation.SegmentationReconstruction.rst +139 -0
  193. braindecode-1.5.1/docs/generated/braindecode.augmentation.SensorsRotation.rst +139 -0
  194. braindecode-1.5.1/docs/generated/braindecode.augmentation.SensorsXRotation.rst +123 -0
  195. braindecode-1.5.1/docs/generated/braindecode.augmentation.SensorsYRotation.rst +123 -0
  196. braindecode-1.5.1/docs/generated/braindecode.augmentation.SensorsZRotation.rst +123 -0
  197. braindecode-1.5.1/docs/generated/braindecode.augmentation.SignFlip.rst +134 -0
  198. braindecode-1.5.1/docs/generated/braindecode.augmentation.SmoothTimeMask.rst +139 -0
  199. braindecode-1.5.1/docs/generated/braindecode.augmentation.TimeReverse.rst +134 -0
  200. braindecode-1.5.1/docs/generated/braindecode.augmentation.Transform.rst +137 -0
  201. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.amplitude_scale.rst +12 -0
  202. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.bandstop_filter.rst +12 -0
  203. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.channels_dropout.rst +12 -0
  204. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.channels_permute.rst +12 -0
  205. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.channels_rereference.rst +12 -0
  206. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.channels_shuffle.rst +12 -0
  207. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.frequency_shift.rst +12 -0
  208. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.ft_surrogate.rst +12 -0
  209. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.gaussian_noise.rst +12 -0
  210. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.identity.rst +12 -0
  211. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.mask_encoding.rst +12 -0
  212. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.mixup.rst +12 -0
  213. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.segmentation_reconstruction.rst +12 -0
  214. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.sensors_rotation.rst +12 -0
  215. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.sign_flip.rst +12 -0
  216. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.smooth_time_mask.rst +12 -0
  217. braindecode-1.5.1/docs/generated/braindecode.augmentation.functional.time_reverse.rst +12 -0
  218. braindecode-1.5.1/docs/generated/braindecode.classifier.EEGClassifier.rst +166 -0
  219. braindecode-1.5.1/docs/generated/braindecode.datasets.BCICompetitionIVDataset4.rst +48 -0
  220. braindecode-1.5.1/docs/generated/braindecode.datasets.BNCI2014_001.rst +35 -0
  221. braindecode-1.5.1/docs/generated/braindecode.datasets.BaseConcatDataset.rst +66 -0
  222. braindecode-1.5.1/docs/generated/braindecode.datasets.CHBMIT.rst +35 -0
  223. braindecode-1.5.1/docs/generated/braindecode.datasets.HGD.rst +35 -0
  224. braindecode-1.5.1/docs/generated/braindecode.datasets.MOABBDataset.rst +35 -0
  225. braindecode-1.5.1/docs/generated/braindecode.datasets.NMT.rst +35 -0
  226. braindecode-1.5.1/docs/generated/braindecode.datasets.RawDataset.rst +21 -0
  227. braindecode-1.5.1/docs/generated/braindecode.datasets.RecordDataset.rst +32 -0
  228. braindecode-1.5.1/docs/generated/braindecode.datasets.SIENA.rst +35 -0
  229. braindecode-1.5.1/docs/generated/braindecode.datasets.SleepPhysionet.rst +35 -0
  230. braindecode-1.5.1/docs/generated/braindecode.datasets.SleepPhysionetChallenge2018.rst +35 -0
  231. braindecode-1.5.1/docs/generated/braindecode.datasets.TUH.rst +35 -0
  232. braindecode-1.5.1/docs/generated/braindecode.datasets.TUHAbnormal.rst +35 -0
  233. braindecode-1.5.1/docs/generated/braindecode.datasets.TUHEvents.rst +35 -0
  234. braindecode-1.5.1/docs/generated/braindecode.datasets.WindowsDataset.rst +21 -0
  235. braindecode-1.5.1/docs/generated/braindecode.datasets.bids.BIDSDataset.rst +35 -0
  236. braindecode-1.5.1/docs/generated/braindecode.datasets.bids.BIDSEpochsDataset.rst +35 -0
  237. braindecode-1.5.1/docs/generated/braindecode.datasets.bids.BIDSIterableDataset.rst +19 -0
  238. braindecode-1.5.1/docs/generated/braindecode.datasets.bids.HubDatasetMixin.rst +39 -0
  239. braindecode-1.5.1/docs/generated/braindecode.datasets.create_from_X_y.rst +12 -0
  240. braindecode-1.5.1/docs/generated/braindecode.datasets.create_from_mne_epochs.rst +12 -0
  241. braindecode-1.5.1/docs/generated/braindecode.datasets.create_from_mne_raw.rst +12 -0
  242. braindecode-1.5.1/docs/generated/braindecode.datautil.infer_signal_properties.rst +12 -0
  243. braindecode-1.5.1/docs/generated/braindecode.datautil.load_concat_dataset.rst +12 -0
  244. braindecode-1.5.1/docs/generated/braindecode.datautil.save_concat_dataset.rst +12 -0
  245. braindecode-1.5.1/docs/generated/braindecode.functional.drop_path.rst +12 -0
  246. braindecode-1.5.1/docs/generated/braindecode.functional.glorot_weight_zero_bias.rst +12 -0
  247. braindecode-1.5.1/docs/generated/braindecode.functional.hilbert_freq.rst +12 -0
  248. braindecode-1.5.1/docs/generated/braindecode.functional.identity.rst +12 -0
  249. braindecode-1.5.1/docs/generated/braindecode.functional.plv_time.rst +12 -0
  250. braindecode-1.5.1/docs/generated/braindecode.functional.rescale_parameter.rst +12 -0
  251. braindecode-1.5.1/docs/generated/braindecode.functional.safe_log.rst +12 -0
  252. braindecode-1.5.1/docs/generated/braindecode.functional.square.rst +12 -0
  253. braindecode-1.5.1/docs/generated/braindecode.models.ATCNet.rst +150 -0
  254. braindecode-1.5.1/docs/generated/braindecode.models.AttentionBaseNet.rst +150 -0
  255. braindecode-1.5.1/docs/generated/braindecode.models.AttnSleep.rst +150 -0
  256. braindecode-1.5.1/docs/generated/braindecode.models.BDTCN.rst +150 -0
  257. braindecode-1.5.1/docs/generated/braindecode.models.BENDR.rst +155 -0
  258. braindecode-1.5.1/docs/generated/braindecode.models.BIOT.rst +155 -0
  259. braindecode-1.5.1/docs/generated/braindecode.models.BrainModule.rst +150 -0
  260. braindecode-1.5.1/docs/generated/braindecode.models.CBraMod.rst +155 -0
  261. braindecode-1.5.1/docs/generated/braindecode.models.CTNet.rst +150 -0
  262. braindecode-1.5.1/docs/generated/braindecode.models.CodeBrain.rst +155 -0
  263. braindecode-1.5.1/docs/generated/braindecode.models.ContraWR.rst +150 -0
  264. braindecode-1.5.1/docs/generated/braindecode.models.DGCNN.rst +150 -0
  265. braindecode-1.5.1/docs/generated/braindecode.models.Deep4Net.rst +147 -0
  266. braindecode-1.5.1/docs/generated/braindecode.models.DeepSleepNet.rst +150 -0
  267. braindecode-1.5.1/docs/generated/braindecode.models.EEGConformer.rst +157 -0
  268. braindecode-1.5.1/docs/generated/braindecode.models.EEGITNet.rst +147 -0
  269. braindecode-1.5.1/docs/generated/braindecode.models.EEGInceptionERP.rst +147 -0
  270. braindecode-1.5.1/docs/generated/braindecode.models.EEGInceptionMI.rst +150 -0
  271. braindecode-1.5.1/docs/generated/braindecode.models.EEGMiner.rst +150 -0
  272. braindecode-1.5.1/docs/generated/braindecode.models.EEGModuleMixin.rst +82 -0
  273. braindecode-1.5.1/docs/generated/braindecode.models.EEGNeX.rst +150 -0
  274. braindecode-1.5.1/docs/generated/braindecode.models.EEGNet.rst +147 -0
  275. braindecode-1.5.1/docs/generated/braindecode.models.EEGPT.rst +162 -0
  276. braindecode-1.5.1/docs/generated/braindecode.models.EEGSimpleConv.rst +150 -0
  277. braindecode-1.5.1/docs/generated/braindecode.models.EEGSym.rst +150 -0
  278. braindecode-1.5.1/docs/generated/braindecode.models.EEGTCNet.rst +150 -0
  279. braindecode-1.5.1/docs/generated/braindecode.models.EMG2QwertyNet.rst +167 -0
  280. braindecode-1.5.1/docs/generated/braindecode.models.FBCNet.rst +150 -0
  281. braindecode-1.5.1/docs/generated/braindecode.models.FBLightConvNet.rst +150 -0
  282. braindecode-1.5.1/docs/generated/braindecode.models.FBMSNet.rst +150 -0
  283. braindecode-1.5.1/docs/generated/braindecode.models.IFNet.rst +150 -0
  284. braindecode-1.5.1/docs/generated/braindecode.models.InterpolatedBENDR.rst +150 -0
  285. braindecode-1.5.1/docs/generated/braindecode.models.InterpolatedBIOT.rst +150 -0
  286. braindecode-1.5.1/docs/generated/braindecode.models.InterpolatedLaBraM.rst +160 -0
  287. braindecode-1.5.1/docs/generated/braindecode.models.InterpolatedModel.rst +12 -0
  288. braindecode-1.5.1/docs/generated/braindecode.models.InterpolatedSignalJEPA.rst +150 -0
  289. braindecode-1.5.1/docs/generated/braindecode.models.LUNA.rst +185 -0
  290. braindecode-1.5.1/docs/generated/braindecode.models.Labram.rst +190 -0
  291. braindecode-1.5.1/docs/generated/braindecode.models.MEDFormer.rst +150 -0
  292. braindecode-1.5.1/docs/generated/braindecode.models.MSVTNet.rst +150 -0
  293. braindecode-1.5.1/docs/generated/braindecode.models.MetaNeuromotorHand.rst +167 -0
  294. braindecode-1.5.1/docs/generated/braindecode.models.PBT.rst +150 -0
  295. braindecode-1.5.1/docs/generated/braindecode.models.REVE.rst +162 -0
  296. braindecode-1.5.1/docs/generated/braindecode.models.SCCNet.rst +150 -0
  297. braindecode-1.5.1/docs/generated/braindecode.models.SPARCNet.rst +150 -0
  298. braindecode-1.5.1/docs/generated/braindecode.models.SSTDPN.rst +150 -0
  299. braindecode-1.5.1/docs/generated/braindecode.models.ShallowFBCSPNet.rst +147 -0
  300. braindecode-1.5.1/docs/generated/braindecode.models.SignalJEPA.rst +150 -0
  301. braindecode-1.5.1/docs/generated/braindecode.models.SignalJEPA_Contextual.rst +160 -0
  302. braindecode-1.5.1/docs/generated/braindecode.models.SignalJEPA_PostLocal.rst +160 -0
  303. braindecode-1.5.1/docs/generated/braindecode.models.SignalJEPA_PreLocal.rst +160 -0
  304. braindecode-1.5.1/docs/generated/braindecode.models.SincShallowNet.rst +150 -0
  305. braindecode-1.5.1/docs/generated/braindecode.models.SleepStagerBlanco2020.rst +150 -0
  306. braindecode-1.5.1/docs/generated/braindecode.models.SleepStagerChambon2018.rst +150 -0
  307. braindecode-1.5.1/docs/generated/braindecode.models.SyncNet.rst +150 -0
  308. braindecode-1.5.1/docs/generated/braindecode.models.TIDNet.rst +150 -0
  309. braindecode-1.5.1/docs/generated/braindecode.models.TSception.rst +150 -0
  310. braindecode-1.5.1/docs/generated/braindecode.models.USleep.rst +150 -0
  311. braindecode-1.5.1/docs/generated/braindecode.preprocessing.AddChannels.rst +25 -0
  312. braindecode-1.5.1/docs/generated/braindecode.preprocessing.AddEvents.rst +25 -0
  313. braindecode-1.5.1/docs/generated/braindecode.preprocessing.AddProj.rst +25 -0
  314. braindecode-1.5.1/docs/generated/braindecode.preprocessing.AddReferenceChannels.rst +25 -0
  315. braindecode-1.5.1/docs/generated/braindecode.preprocessing.AnnotateAmplitude.rst +38 -0
  316. braindecode-1.5.1/docs/generated/braindecode.preprocessing.AnnotateBreak.rst +38 -0
  317. braindecode-1.5.1/docs/generated/braindecode.preprocessing.AnnotateMovement.rst +38 -0
  318. braindecode-1.5.1/docs/generated/braindecode.preprocessing.AnnotateMuscleZscore.rst +38 -0
  319. braindecode-1.5.1/docs/generated/braindecode.preprocessing.AnnotateNan.rst +38 -0
  320. braindecode-1.5.1/docs/generated/braindecode.preprocessing.Anonymize.rst +25 -0
  321. braindecode-1.5.1/docs/generated/braindecode.preprocessing.ApplyGradientCompensation.rst +25 -0
  322. braindecode-1.5.1/docs/generated/braindecode.preprocessing.ApplyHilbert.rst +25 -0
  323. braindecode-1.5.1/docs/generated/braindecode.preprocessing.ApplyProj.rst +25 -0
  324. braindecode-1.5.1/docs/generated/braindecode.preprocessing.CombineChannels.rst +38 -0
  325. braindecode-1.5.1/docs/generated/braindecode.preprocessing.ComputeBridgedElectrodes.rst +38 -0
  326. braindecode-1.5.1/docs/generated/braindecode.preprocessing.ComputeCurrentSourceDensity.rst +38 -0
  327. braindecode-1.5.1/docs/generated/braindecode.preprocessing.Crop.rst +25 -0
  328. braindecode-1.5.1/docs/generated/braindecode.preprocessing.CropByAnnotations.rst +25 -0
  329. braindecode-1.5.1/docs/generated/braindecode.preprocessing.DelProj.rst +25 -0
  330. braindecode-1.5.1/docs/generated/braindecode.preprocessing.DropChannels.rst +25 -0
  331. braindecode-1.5.1/docs/generated/braindecode.preprocessing.EEGPrep.rst +38 -0
  332. braindecode-1.5.1/docs/generated/braindecode.preprocessing.EqualizeBads.rst +38 -0
  333. braindecode-1.5.1/docs/generated/braindecode.preprocessing.EqualizeChannels.rst +38 -0
  334. braindecode-1.5.1/docs/generated/braindecode.preprocessing.Filter.rst +25 -0
  335. braindecode-1.5.1/docs/generated/braindecode.preprocessing.FilterData.rst +38 -0
  336. braindecode-1.5.1/docs/generated/braindecode.preprocessing.FindBadChannelsLof.rst +38 -0
  337. braindecode-1.5.1/docs/generated/braindecode.preprocessing.FixMagCoilTypes.rst +25 -0
  338. braindecode-1.5.1/docs/generated/braindecode.preprocessing.FixStimArtifact.rst +38 -0
  339. braindecode-1.5.1/docs/generated/braindecode.preprocessing.InterpolateBads.rst +25 -0
  340. braindecode-1.5.1/docs/generated/braindecode.preprocessing.InterpolateBridgedElectrodes.rst +38 -0
  341. braindecode-1.5.1/docs/generated/braindecode.preprocessing.InterpolateTo.rst +25 -0
  342. braindecode-1.5.1/docs/generated/braindecode.preprocessing.MaxwellFilter.rst +38 -0
  343. braindecode-1.5.1/docs/generated/braindecode.preprocessing.NotchFilter.rst +25 -0
  344. braindecode-1.5.1/docs/generated/braindecode.preprocessing.OversampledTemporalProjection.rst +38 -0
  345. braindecode-1.5.1/docs/generated/braindecode.preprocessing.Pick.rst +25 -0
  346. braindecode-1.5.1/docs/generated/braindecode.preprocessing.PickChannels.rst +25 -0
  347. braindecode-1.5.1/docs/generated/braindecode.preprocessing.PickTypes.rst +25 -0
  348. braindecode-1.5.1/docs/generated/braindecode.preprocessing.Preprocessor.rst +46 -0
  349. braindecode-1.5.1/docs/generated/braindecode.preprocessing.RealignRaw.rst +38 -0
  350. braindecode-1.5.1/docs/generated/braindecode.preprocessing.RegressArtifact.rst +38 -0
  351. braindecode-1.5.1/docs/generated/braindecode.preprocessing.ReinterpolateRemovedChannels.rst +38 -0
  352. braindecode-1.5.1/docs/generated/braindecode.preprocessing.RemoveBadChannels.rst +38 -0
  353. braindecode-1.5.1/docs/generated/braindecode.preprocessing.RemoveBadChannelsNoLocs.rst +38 -0
  354. braindecode-1.5.1/docs/generated/braindecode.preprocessing.RemoveBadWindows.rst +38 -0
  355. braindecode-1.5.1/docs/generated/braindecode.preprocessing.RemoveBursts.rst +38 -0
  356. braindecode-1.5.1/docs/generated/braindecode.preprocessing.RemoveCommonAverageReference.rst +38 -0
  357. braindecode-1.5.1/docs/generated/braindecode.preprocessing.RemoveDCOffset.rst +38 -0
  358. braindecode-1.5.1/docs/generated/braindecode.preprocessing.RemoveDrifts.rst +38 -0
  359. braindecode-1.5.1/docs/generated/braindecode.preprocessing.RemoveFlatChannels.rst +38 -0
  360. braindecode-1.5.1/docs/generated/braindecode.preprocessing.RenameChannels.rst +25 -0
  361. braindecode-1.5.1/docs/generated/braindecode.preprocessing.ReorderChannels.rst +25 -0
  362. braindecode-1.5.1/docs/generated/braindecode.preprocessing.Resample.rst +25 -0
  363. braindecode-1.5.1/docs/generated/braindecode.preprocessing.Resampling.rst +38 -0
  364. braindecode-1.5.1/docs/generated/braindecode.preprocessing.Rescale.rst +25 -0
  365. braindecode-1.5.1/docs/generated/braindecode.preprocessing.SavgolFilter.rst +25 -0
  366. braindecode-1.5.1/docs/generated/braindecode.preprocessing.SetAnnotations.rst +25 -0
  367. braindecode-1.5.1/docs/generated/braindecode.preprocessing.SetBipolarReference.rst +38 -0
  368. braindecode-1.5.1/docs/generated/braindecode.preprocessing.SetChannelTypes.rst +25 -0
  369. braindecode-1.5.1/docs/generated/braindecode.preprocessing.SetEEGReference.rst +25 -0
  370. braindecode-1.5.1/docs/generated/braindecode.preprocessing.SetMeasDate.rst +25 -0
  371. braindecode-1.5.1/docs/generated/braindecode.preprocessing.SetMontage.rst +25 -0
  372. braindecode-1.5.1/docs/generated/braindecode.preprocessing.create_fixed_length_windows.rst +12 -0
  373. braindecode-1.5.1/docs/generated/braindecode.preprocessing.create_windows_from_events.rst +12 -0
  374. braindecode-1.5.1/docs/generated/braindecode.preprocessing.create_windows_from_target_channels.rst +12 -0
  375. braindecode-1.5.1/docs/generated/braindecode.preprocessing.exponential_moving_demean.rst +12 -0
  376. braindecode-1.5.1/docs/generated/braindecode.preprocessing.exponential_moving_standardize.rst +12 -0
  377. braindecode-1.5.1/docs/generated/braindecode.preprocessing.filterbank.rst +12 -0
  378. braindecode-1.5.1/docs/generated/braindecode.preprocessing.preprocess.rst +12 -0
  379. braindecode-1.5.1/docs/generated/braindecode.regressor.EEGRegressor.rst +161 -0
  380. braindecode-1.5.1/docs/generated/braindecode.samplers.BalancedSequenceSampler.rst +36 -0
  381. braindecode-1.5.1/docs/generated/braindecode.samplers.DistributedRecordingSampler.rst +41 -0
  382. braindecode-1.5.1/docs/generated/braindecode.samplers.DistributedRelativePositioningSampler.rst +38 -0
  383. braindecode-1.5.1/docs/generated/braindecode.samplers.RecordingSampler.rst +39 -0
  384. braindecode-1.5.1/docs/generated/braindecode.samplers.RelativePositioningSampler.rst +36 -0
  385. braindecode-1.5.1/docs/generated/braindecode.samplers.SequenceSampler.rst +23 -0
  386. braindecode-1.5.1/docs/generated/braindecode.training.CroppedLoss.rst +130 -0
  387. braindecode-1.5.1/docs/generated/braindecode.training.CroppedTimeSeriesEpochScoring.rst +52 -0
  388. braindecode-1.5.1/docs/generated/braindecode.training.CroppedTrialEpochScoring.rst +57 -0
  389. braindecode-1.5.1/docs/generated/braindecode.training.PostEpochTrainScoring.rst +52 -0
  390. braindecode-1.5.1/docs/generated/braindecode.training.TimeSeriesLoss.rst +130 -0
  391. braindecode-1.5.1/docs/generated/braindecode.training.mixup_criterion.rst +12 -0
  392. braindecode-1.5.1/docs/generated/braindecode.training.predict_trials.rst +12 -0
  393. braindecode-1.5.1/docs/generated/braindecode.training.trial_preds_from_window_preds.rst +12 -0
  394. braindecode-1.5.1/docs/generated/braindecode.util.set_random_seeds.rst +12 -0
  395. braindecode-1.5.1/docs/generated/braindecode.visualization.METRIC_NAMES.rst +6 -0
  396. braindecode-1.5.1/docs/generated/braindecode.visualization.SSIM_METRIC_NAMES.rst +6 -0
  397. braindecode-1.5.1/docs/generated/braindecode.visualization.amplitude_gradients.rst +12 -0
  398. braindecode-1.5.1/docs/generated/braindecode.visualization.amplitude_gradients_per_trial.rst +12 -0
  399. braindecode-1.5.1/docs/generated/braindecode.visualization.cascading_layer_reset.rst +12 -0
  400. braindecode-1.5.1/docs/generated/braindecode.visualization.compute_metrics.rst +12 -0
  401. braindecode-1.5.1/docs/generated/braindecode.visualization.compute_ssim_metrics.rst +12 -0
  402. braindecode-1.5.1/docs/generated/braindecode.visualization.deconvolution.rst +12 -0
  403. braindecode-1.5.1/docs/generated/braindecode.visualization.deep_lift.rst +12 -0
  404. braindecode-1.5.1/docs/generated/braindecode.visualization.guided_backprop.rst +12 -0
  405. braindecode-1.5.1/docs/generated/braindecode.visualization.input_x_gradient.rst +12 -0
  406. braindecode-1.5.1/docs/generated/braindecode.visualization.integrated_gradients.rst +12 -0
  407. braindecode-1.5.1/docs/generated/braindecode.visualization.layer_grad_cam.rst +12 -0
  408. braindecode-1.5.1/docs/generated/braindecode.visualization.lrp.rst +12 -0
  409. braindecode-1.5.1/docs/generated/braindecode.visualization.plot_confusion_matrix.rst +12 -0
  410. braindecode-1.5.1/docs/generated/braindecode.visualization.project_to_topomap.rst +12 -0
  411. braindecode-1.5.1/docs/generated/braindecode.visualization.random_target.rst +12 -0
  412. braindecode-1.5.1/docs/generated/braindecode.visualization.saliency.rst +12 -0
  413. braindecode-1.5.1/docs/generated/convolution/braindecode.modules.AvgPool2dWithConv.rst +130 -0
  414. braindecode-1.5.1/docs/generated/convolution/braindecode.modules.CausalConv1d.rst +132 -0
  415. braindecode-1.5.1/docs/generated/convolution/braindecode.modules.CombinedConv.rst +130 -0
  416. braindecode-1.5.1/docs/generated/convolution/braindecode.modules.Conv2dWithConstraint.rst +121 -0
  417. braindecode-1.5.1/docs/generated/convolution/braindecode.modules.DepthwiseConv2d.rst +121 -0
  418. braindecode-1.5.1/docs/generated/filter/braindecode.modules.ChannelInterpolationLayer.rst +130 -0
  419. braindecode-1.5.1/docs/generated/filter/braindecode.modules.FilterBankLayer.rst +130 -0
  420. braindecode-1.5.1/docs/generated/filter/braindecode.modules.GeneralizedGaussianFilter.rst +144 -0
  421. braindecode-1.5.1/docs/generated/layers/braindecode.modules.Chomp1d.rst +135 -0
  422. braindecode-1.5.1/docs/generated/layers/braindecode.modules.DropPath.rst +135 -0
  423. braindecode-1.5.1/docs/generated/layers/braindecode.modules.Ensure4d.rst +130 -0
  424. braindecode-1.5.1/docs/generated/layers/braindecode.modules.SubjectLayers.rst +130 -0
  425. braindecode-1.5.1/docs/generated/layers/braindecode.modules.TimeDistributed.rst +130 -0
  426. braindecode-1.5.1/docs/generated/linear/braindecode.modules.LinearWithConstraint.rst +121 -0
  427. braindecode-1.5.1/docs/generated/linear/braindecode.modules.MaxNormLinear.rst +121 -0
  428. braindecode-1.5.1/docs/generated/stats/braindecode.modules.LogPowerLayer.rst +6 -0
  429. braindecode-1.5.1/docs/generated/stats/braindecode.modules.LogVarLayer.rst +6 -0
  430. braindecode-1.5.1/docs/generated/stats/braindecode.modules.MaxLayer.rst +6 -0
  431. braindecode-1.5.1/docs/generated/stats/braindecode.modules.MeanLayer.rst +6 -0
  432. braindecode-1.5.1/docs/generated/stats/braindecode.modules.StatLayer.rst +130 -0
  433. braindecode-1.5.1/docs/generated/stats/braindecode.modules.StdLayer.rst +6 -0
  434. braindecode-1.5.1/docs/generated/stats/braindecode.modules.VarLayer.rst +6 -0
  435. braindecode-1.5.1/docs/generated/util/braindecode.modules.aggregate_probas.rst +12 -0
  436. braindecode-1.5.1/docs/generated/wrapper/braindecode.modules.Expression.rst +130 -0
  437. braindecode-1.5.1/docs/generated/wrapper/braindecode.modules.IntermediateOutputWrapper.rst +130 -0
  438. braindecode-1.5.1/docs/index.rst +749 -0
  439. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/whats_new.rst +210 -12
  440. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/pyproject.toml +4 -1
  441. braindecode-1.5.0.dev182195895/braindecode/version.py +0 -1
  442. braindecode-1.5.0.dev182195895/braindecode/visualization/__init__.py +0 -8
  443. braindecode-1.5.0.dev182195895/braindecode/visualization/gradients.py +0 -62
  444. braindecode-1.5.0.dev182195895/braindecode.egg-info/SOURCES.txt +0 -160
  445. braindecode-1.5.0.dev182195895/docs/index.rst +0 -48
  446. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/LICENSE.txt +0 -0
  447. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/MANIFEST.in +0 -0
  448. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/README.rst +0 -0
  449. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/__init__.py +0 -0
  450. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/augmentation/base.py +0 -0
  451. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/classifier.py +0 -0
  452. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/__init__.py +0 -0
  453. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/bbci.py +0 -0
  454. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/bcicomp.py +0 -0
  455. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/bids/__init__.py +0 -0
  456. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/bids/datasets.py +0 -0
  457. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/bids/format.py +0 -0
  458. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/bids/hub.py +0 -0
  459. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/bids/hub_format.py +0 -0
  460. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/bids/hub_io.py +0 -0
  461. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/bids/hub_validation.py +0 -0
  462. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/bids/iterable.py +0 -0
  463. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/chb_mit.py +0 -0
  464. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/mne.py +0 -0
  465. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/moabb.py +0 -0
  466. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/nmt.py +0 -0
  467. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/registry.py +0 -0
  468. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/siena.py +0 -0
  469. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/sleep_physio_challe_18.py +0 -0
  470. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/tuh.py +0 -0
  471. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/utils.py +0 -0
  472. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datasets/xy.py +0 -0
  473. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datautil/__init__.py +0 -0
  474. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datautil/channel_utils.py +0 -0
  475. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datautil/hub_formats.py +0 -0
  476. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datautil/serialization.py +0 -0
  477. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/datautil/util.py +0 -0
  478. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/eegneuralnet.py +0 -0
  479. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/functional/__init__.py +0 -0
  480. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/functional/functions.py +0 -0
  481. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/functional/initialization.py +0 -0
  482. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/atcnet.py +0 -0
  483. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/attentionbasenet.py +0 -0
  484. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/attn_sleep.py +0 -0
  485. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/brainmodule.py +0 -0
  486. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/cbramod.py +0 -0
  487. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/contrawr.py +0 -0
  488. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/ctnet.py +0 -0
  489. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/deep4.py +0 -0
  490. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/deepsleepnet.py +0 -0
  491. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/dgcnn.py +0 -0
  492. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/eegconformer.py +0 -0
  493. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/eeginception_erp.py +0 -0
  494. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/eeginception_mi.py +0 -0
  495. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/eegitnet.py +0 -0
  496. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/eegminer.py +0 -0
  497. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/eegnet.py +0 -0
  498. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/eegnex.py +0 -0
  499. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/eegpt.py +0 -0
  500. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/eegsimpleconv.py +0 -0
  501. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/eegsym.py +0 -0
  502. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/eegtcnet.py +0 -0
  503. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/fbcnet.py +0 -0
  504. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/fblightconvnet.py +0 -0
  505. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/fbmsnet.py +0 -0
  506. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/hybrid.py +0 -0
  507. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/ifnet.py +0 -0
  508. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/luna.py +0 -0
  509. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/medformer.py +0 -0
  510. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/msvtnet.py +0 -0
  511. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/patchedtransformer.py +0 -0
  512. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/sccnet.py +0 -0
  513. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/shallow_fbcsp.py +0 -0
  514. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/sinc_shallow.py +0 -0
  515. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/sleep_stager_blanco_2020.py +0 -0
  516. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/sleep_stager_chambon_2018.py +0 -0
  517. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/sparcnet.py +0 -0
  518. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/sstdpn.py +0 -0
  519. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/syncnet.py +0 -0
  520. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/tcn.py +0 -0
  521. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/tidnet.py +0 -0
  522. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/tsinception.py +0 -0
  523. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/models/usleep.py +0 -0
  524. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/modules/activation.py +0 -0
  525. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/modules/attention.py +0 -0
  526. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/modules/blocks.py +0 -0
  527. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/modules/convolution.py +0 -0
  528. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/modules/filter.py +0 -0
  529. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/modules/layers.py +0 -0
  530. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/modules/linear.py +0 -0
  531. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/modules/parametrization.py +0 -0
  532. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/modules/stats.py +0 -0
  533. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/modules/util.py +0 -0
  534. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/modules/wrapper.py +0 -0
  535. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/preprocessing/__init__.py +0 -0
  536. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/preprocessing/mne_preprocess.py +0 -0
  537. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/preprocessing/util.py +0 -0
  538. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/regressor.py +0 -0
  539. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/samplers/__init__.py +0 -0
  540. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/samplers/base.py +0 -0
  541. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/samplers/ssl.py +0 -0
  542. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/training/__init__.py +0 -0
  543. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/training/callbacks.py +0 -0
  544. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/training/losses.py +0 -0
  545. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/training/scoring.py +0 -0
  546. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/util.py +0 -0
  547. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode/visualization/confusion_matrices.py +0 -0
  548. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode.egg-info/dependency_links.txt +0 -0
  549. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/braindecode.egg-info/top_level.txt +0 -0
  550. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/Makefile +0 -0
  551. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/_templates/autosummary/class.rst +0 -0
  552. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/_templates/autosummary/class_in_subdir.rst +0 -0
  553. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/_templates/autosummary/function.rst +0 -0
  554. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/_templates/autosummary/function_in_subdir.rst +0 -0
  555. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/help.rst +0 -0
  556. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/install/install.rst +0 -0
  557. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/install/install_pip.rst +0 -0
  558. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/install/install_source.rst +0 -0
  559. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/models/categorization/attention.rst +0 -0
  560. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/models/categorization/channel.rst +0 -0
  561. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/models/categorization/convolution.rst +0 -0
  562. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/models/categorization/filterbank.rst +0 -0
  563. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/models/categorization/gnn.rst +0 -0
  564. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/models/categorization/interpretable.rst +0 -0
  565. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/models/categorization/lbm.rst +0 -0
  566. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/models/categorization/recurrent.rst +0 -0
  567. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/models/categorization/spd.rst +0 -0
  568. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/models/models.rst +0 -0
  569. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/models/models_categorization.rst +0 -0
  570. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/models/models_table.rst +0 -0
  571. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/models/models_visualization.rst +0 -0
  572. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/docs/sg_execution_times.rst +0 -0
  573. {braindecode-1.5.0.dev182195895 → braindecode-1.5.1}/setup.cfg +0 -0
@@ -11,9 +11,14 @@ All files within the `src/` directory are licensed under the BSD-3-Clause Licens
11
11
  The following components are licensed under the Creative Commons Attribution-NonCommercial 4.0 International License:
12
12
 
13
13
  - `braindecode/models/eegminer.py`
14
+ - `braindecode/models/meta_neuromotor.py`
14
15
 
15
16
  As well as class later imported into the `braindecode.models.module` named as GeneralizedGaussianFilter.
16
17
 
18
+ The `meta_neuromotor.py` file is a derivative of
19
+ `facebookresearch/generic-neuromotor-interface`, released by Meta Platforms,
20
+ Inc. under CC BY-NC 4.0, and inherits the same noncommercial terms.
21
+
17
22
  ## License Links
18
23
 
19
24
  - [BSD-3-Clause License](https://opensource.org/licenses/BSD-3-Clause)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: braindecode
3
- Version: 1.5.0.dev182195895
3
+ Version: 1.5.1
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>
@@ -43,6 +43,8 @@ Requires-Dist: eegprep[eeglabio]>=0.2.23; extra == "eegprep"
43
43
  Provides-Extra: hub
44
44
  Requires-Dist: huggingface_hub[torch]>=0.20.0; extra == "hub"
45
45
  Requires-Dist: zarr>=3.0; extra == "hub"
46
+ Provides-Extra: viz
47
+ Requires-Dist: captum>=0.7.0; extra == "viz"
46
48
  Provides-Extra: tests
47
49
  Requires-Dist: pytest; extra == "tests"
48
50
  Requires-Dist: pytest-cov; extra == "tests"
@@ -61,6 +63,7 @@ Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
61
63
  Requires-Dist: sphinx-autobuild; extra == "docs"
62
64
  Requires-Dist: sphinxcontrib-bibtex; extra == "docs"
63
65
  Requires-Dist: sphinx_sitemap; extra == "docs"
66
+ Requires-Dist: sphinxext-opengraph; extra == "docs"
64
67
  Requires-Dist: pydata_sphinx_theme; extra == "docs"
65
68
  Requires-Dist: numpydoc; extra == "docs"
66
69
  Requires-Dist: memory_profiler; extra == "docs"
@@ -70,7 +73,7 @@ Requires-Dist: sphinx_design; extra == "docs"
70
73
  Requires-Dist: lightning; extra == "docs"
71
74
  Requires-Dist: seaborn; extra == "docs"
72
75
  Requires-Dist: pre-commit; extra == "docs"
73
- Requires-Dist: openneuro-py; extra == "docs"
76
+ Requires-Dist: openneuro-py>=2026.4.0; extra == "docs"
74
77
  Requires-Dist: plotly; extra == "docs"
75
78
  Requires-Dist: shap; extra == "docs"
76
79
  Requires-Dist: nbformat; extra == "docs"
@@ -82,6 +85,7 @@ Requires-Dist: braindecode[docs]; extra == "all"
82
85
  Requires-Dist: braindecode[hub]; extra == "all"
83
86
  Requires-Dist: braindecode[eegprep]; extra == "all"
84
87
  Requires-Dist: braindecode[typing]; extra == "all"
88
+ Requires-Dist: braindecode[viz]; extra == "all"
85
89
  Dynamic: license-file
86
90
 
87
91
  .. image:: https://zenodo.org/badge/DOI/10.5281/zenodo.17699192.svg
@@ -4,6 +4,7 @@ from . import functional
4
4
  from .base import AugmentedDataLoader, Compose, IdentityTransform, Transform
5
5
  from .transforms import (
6
6
  AmplitudeScale,
7
+ BandRotation,
7
8
  BandstopFilter,
8
9
  ChannelsDropout,
9
10
  ChannelsReref,
@@ -47,6 +48,7 @@ __all__ = [
47
48
  "SegmentationReconstruction",
48
49
  "MaskEncoding",
49
50
  "AmplitudeScale",
51
+ "BandRotation",
50
52
  "ChannelsReref",
51
53
  "functional",
52
54
  ]
@@ -2,6 +2,7 @@
2
2
  # Alexandre Gramfort <alexandre.gramfort@inria.fr>
3
3
  # Gustavo Rodrigues <gustavenrique01@gmail.com>
4
4
  # Bruna Lopes <brunajaflopes@gmail.com>
5
+ # Sarthak Tayal <sarthaktayal2@gmail.com>
5
6
  #
6
7
  # License: BSD (3-clause)
7
8
 
@@ -1265,10 +1266,11 @@ def amplitude_scale(
1265
1266
  y : torch.Tensor
1266
1267
  EEG labels for the example or batch.
1267
1268
  scale : tuple of floats
1268
- Interval from which ypu sample the scaling value
1269
- random_state : int | numpy.random.Generator, optional
1270
- Seed to be used to instantiate numpy random number generator instance.
1271
- Defaults to None.
1269
+ Interval ``(low, high)`` from which the per (sample, channel)
1270
+ scaling value is uniformly sampled.
1271
+ random_state : int | numpy.random.RandomState | None, optional
1272
+ Seed used to instantiate the numpy random number generator that
1273
+ draws the scaling values. Defaults to None.
1272
1274
 
1273
1275
  Returns
1274
1276
  -------
@@ -1285,16 +1287,146 @@ def amplitude_scale(
1285
1287
  Learning Research 136:238-253
1286
1288
  """
1287
1289
 
1288
- rng = torch.Generator()
1289
- rng.manual_seed(random_state)
1290
+ # use the same numpy rng path as the rest of this module. the previous
1291
+ # torch.Generator + manual_seed path crashed on None and on the
1292
+ # numpy RandomState that Transform passes in via self.rng.
1293
+ rng = check_random_state(random_state)
1290
1294
  batch_size, n_channels, _ = X.shape
1291
1295
 
1292
- # Parameter for scaling amplitude / channel / trial
1293
1296
  l, h = scale
1294
- s = l + (h - l) * torch.rand(
1295
- batch_size, n_channels, 1, generator=rng, device=X.device, dtype=X.dtype
1297
+ s = torch.as_tensor(
1298
+ rng.uniform(low=l, high=h, size=(batch_size, n_channels, 1)),
1299
+ device=X.device,
1300
+ dtype=X.dtype,
1296
1301
  )
1297
1302
 
1298
1303
  X = s * X
1299
1304
 
1300
1305
  return X, y
1306
+
1307
+
1308
+ def band_rotation(
1309
+ X: torch.Tensor,
1310
+ y: torch.Tensor,
1311
+ num_bands: int = 2,
1312
+ electrodes_per_band: int = 16,
1313
+ band_offsets: tuple[int, ...] = (-1, 0, 1),
1314
+ max_temporal_jitter: int = 0,
1315
+ circular_jitter: bool = True,
1316
+ random_state: int | np.random.RandomState | None = None,
1317
+ ) -> tuple[torch.Tensor, torch.Tensor]:
1318
+ """Per-band electrode rotation + inter-band temporal jitter.
1319
+
1320
+ Models small wristband rotation between sessions and relative timing
1321
+ noise between two arms. Introduced in [Sivakumar2024]_ for the
1322
+ emg2qwerty CTC keystroke decoding task: each electrode band gets its
1323
+ own circular roll along the channel axis (``Uniform(band_offsets)``
1324
+ positions), and band 1 also gets a sample-level temporal shift
1325
+ (``Uniform(-max_temporal_jitter, +max_temporal_jitter)``) along the
1326
+ time axis.
1327
+
1328
+ Channel layout assumes ``(B, num_bands * electrodes_per_band, T)`` with
1329
+ bands contiguous along the channel axis. Same offset / shift is
1330
+ applied to every sample in the batch (one set of parameters per call).
1331
+
1332
+ Parameters
1333
+ ----------
1334
+ X : torch.Tensor
1335
+ EMG input batch of shape ``(B, C, T)`` with
1336
+ ``C == num_bands * electrodes_per_band``.
1337
+ y : torch.Tensor
1338
+ Labels (returned unchanged).
1339
+ num_bands : int, optional
1340
+ Number of electrode bands (e.g. ``2`` for left + right wristband).
1341
+ Must be ``>= 1``. Defaults to 2.
1342
+ electrodes_per_band : int, optional
1343
+ Electrodes per band (e.g. ``16``). Must be ``>= 1``. Defaults
1344
+ to 16.
1345
+ band_offsets : tuple of int, optional
1346
+ Per-band roll values to sample from uniformly. ``(-1, 0, 1)``
1347
+ covers ±1-electrode misalignment. Must be non-empty. Defaults
1348
+ to ``(-1, 0, 1)``.
1349
+ max_temporal_jitter : int, optional
1350
+ Max ±-sample temporal shift applied to band 1 only when
1351
+ ``num_bands >= 2``. Defaults to 0 (disabled). Must be ``>= 0``.
1352
+ circular_jitter : bool, optional
1353
+ If True (the default, paper-faithful), the temporal jitter is a
1354
+ circular ``torch.roll`` — samples shifted off one edge wrap to
1355
+ the other. If False, the gap left by the shift is zero-padded
1356
+ and the shifted-off samples are dropped, avoiding wrap-around
1357
+ discontinuity at the cost of a small zeroed margin. Has no
1358
+ effect when ``max_temporal_jitter == 0``.
1359
+ random_state : int | numpy.random.RandomState, optional
1360
+ Seed / generator for sampling rotation + jitter values.
1361
+
1362
+ Returns
1363
+ -------
1364
+ torch.Tensor
1365
+ Transformed inputs.
1366
+ torch.Tensor
1367
+ Labels (unchanged).
1368
+
1369
+ References
1370
+ ----------
1371
+ .. [Sivakumar2024] Sivakumar, V., Seely, J., Du, A., Bittner, S. R.,
1372
+ Berenzweig, A., Bolarinwa, A., Gramfort, A., & Mandel, M. I. (2024).
1373
+ "emg2qwerty: A Large Dataset with Baselines for Touch Typing using
1374
+ Surface Electromyography." *NeurIPS Datasets and Benchmarks Track*.
1375
+ """
1376
+ if num_bands < 1:
1377
+ raise ValueError(f"num_bands must be >= 1, got {num_bands}")
1378
+ if electrodes_per_band < 1:
1379
+ raise ValueError(f"electrodes_per_band must be >= 1, got {electrodes_per_band}")
1380
+ # Normalise to a tuple before truth-testing so callers can pass any
1381
+ # sequence-like (incl. ``np.ndarray``) without hitting numpy's
1382
+ # ambiguous-truth-value error on ``if not band_offsets``.
1383
+ band_offsets = tuple(band_offsets)
1384
+ if not band_offsets:
1385
+ raise ValueError("band_offsets must be non-empty")
1386
+ if not all(isinstance(o, (int, np.integer)) for o in band_offsets):
1387
+ raise ValueError(f"band_offsets must contain integers, got {band_offsets!r}")
1388
+ if max_temporal_jitter < 0:
1389
+ raise ValueError(f"max_temporal_jitter must be >= 0, got {max_temporal_jitter}")
1390
+ expected_channels = num_bands * electrodes_per_band
1391
+ if X.shape[1] != expected_channels:
1392
+ raise ValueError(
1393
+ f"X.shape[1]={X.shape[1]} != num_bands * electrodes_per_band="
1394
+ f"{expected_channels}"
1395
+ )
1396
+
1397
+ rng = check_random_state(random_state)
1398
+ band_offsets_arr = np.asarray(band_offsets)
1399
+ out = X.clone()
1400
+
1401
+ # Per-band channel-axis rolls. A vectorized ``torch.gather`` was
1402
+ # benchmarked and is ~16 % slower for the typical ``num_bands == 2``
1403
+ # case on CPU (the index tensor is larger than what two contiguous
1404
+ # rolls touch); the gather only wins past ``num_bands >= 8``.
1405
+ for b in range(num_bands):
1406
+ offset = int(rng.choice(band_offsets_arr))
1407
+ if offset:
1408
+ sl = slice(b * electrodes_per_band, (b + 1) * electrodes_per_band)
1409
+ out[:, sl, :] = torch.roll(out[:, sl, :], offset, dims=1)
1410
+
1411
+ # Inter-band temporal jitter — paper recipe applies it to band 1 only.
1412
+ if max_temporal_jitter > 0 and num_bands >= 2:
1413
+ shift = int(rng.randint(-max_temporal_jitter, max_temporal_jitter + 1))
1414
+ if shift:
1415
+ sl = slice(electrodes_per_band, 2 * electrodes_per_band)
1416
+ band1 = out[:, sl, :]
1417
+ if circular_jitter:
1418
+ # Paper-faithful circular shift; wraps end-of-window
1419
+ # samples to the start (and vice versa).
1420
+ out[:, sl, :] = torch.roll(band1, shift, dims=2)
1421
+ else:
1422
+ # Crop-and-pad shift: drop samples that fall off one end,
1423
+ # zero-pad the gap on the other. Avoids the wrap-around
1424
+ # discontinuity at the cost of a ``|shift|``-sample margin.
1425
+ shifted = torch.zeros_like(band1)
1426
+ if shift > 0:
1427
+ shifted[:, :, shift:] = band1[:, :, :-shift]
1428
+ else: # shift < 0
1429
+ shifted[:, :, :shift] = band1[:, :, -shift:]
1430
+ out[:, sl, :] = shifted
1431
+
1432
+ return out, y
@@ -16,6 +16,7 @@ from mne.channels import make_standard_montage
16
16
  from .base import Transform
17
17
  from .functional import (
18
18
  amplitude_scale,
19
+ band_rotation,
19
20
  bandstop_filter,
20
21
  channels_dropout,
21
22
  channels_permute,
@@ -1356,3 +1357,99 @@ class AmplitudeScale(Transform):
1356
1357
  def get_augmentation_params(self, *batch):
1357
1358
  """Return transform parameters."""
1358
1359
  return {"random_state": self.rng, "scale": self.scale}
1360
+
1361
+
1362
+ class BandRotation(Transform):
1363
+ """Per-band electrode rotation + inter-band temporal jitter.
1364
+
1365
+ Models small wristband rotation between sessions and relative timing
1366
+ noise between two arms. Introduced in [Sivakumar2024]_ for the
1367
+ emg2qwerty surface-EMG keystroke decoding task: the channel axis is
1368
+ laid out as ``(B, num_bands * electrodes_per_band, T)`` with bands
1369
+ contiguous, each band gets a uniform circular roll along the channel
1370
+ axis, and when ``num_bands >= 2``, band 1 also gets a sample-level
1371
+ temporal shift. The same offset / shift is applied to every sample
1372
+ in a transformed sub-batch (one set of parameters per call).
1373
+
1374
+ Parameters
1375
+ ----------
1376
+ probability : float
1377
+ Float setting the probability of applying the operation.
1378
+ num_bands : int, optional
1379
+ Number of electrode bands (e.g. ``2`` for left + right wristband).
1380
+ Must be ``>= 1``. Defaults to 2.
1381
+ electrodes_per_band : int, optional
1382
+ Electrodes per band (e.g. ``16``). Must be ``>= 1``. Defaults
1383
+ to 16.
1384
+ band_offsets : tuple of int, optional
1385
+ Per-band roll values to sample from uniformly. ``(-1, 0, 1)``
1386
+ covers ±1-electrode misalignment. Must be non-empty. Defaults
1387
+ to ``(-1, 0, 1)``.
1388
+ max_temporal_jitter : int, optional
1389
+ Max ±-sample temporal shift applied to band 1. Defaults to 0
1390
+ (jitter disabled). Must be ``>= 0``. The emg2qwerty paper uses
1391
+ 120 samples (60 ms at 2 kHz).
1392
+ circular_jitter : bool, optional
1393
+ If True (default, paper-faithful) the jitter is a circular roll;
1394
+ if False the gap left by the shift is zero-padded. See
1395
+ :func:`band_rotation`.
1396
+ random_state : int | numpy.random.RandomState, optional
1397
+ Seed for the rotation / jitter sampler. Defaults to None.
1398
+
1399
+ References
1400
+ ----------
1401
+ .. [Sivakumar2024] Sivakumar, V., Seely, J., Du, A., Bittner, S. R.,
1402
+ Berenzweig, A., Bolarinwa, A., Gramfort, A., & Mandel, M. I. (2024).
1403
+ "emg2qwerty: A Large Dataset with Baselines for Touch Typing using
1404
+ Surface Electromyography." *NeurIPS Datasets and Benchmarks Track*.
1405
+ """
1406
+
1407
+ operation = staticmethod(band_rotation) # type: ignore[assignment]
1408
+
1409
+ def __init__(
1410
+ self,
1411
+ probability,
1412
+ num_bands=2,
1413
+ electrodes_per_band=16,
1414
+ band_offsets=(-1, 0, 1),
1415
+ max_temporal_jitter=0,
1416
+ circular_jitter=True,
1417
+ random_state=None,
1418
+ ):
1419
+ super().__init__(probability=probability, random_state=random_state)
1420
+ # Up-front parameter validation; the underlying ``band_rotation``
1421
+ # also re-checks at call time, but raising here surfaces config
1422
+ # mistakes when the Transform is built rather than on the first
1423
+ # batch.
1424
+ if num_bands < 1:
1425
+ raise ValueError(f"num_bands must be >= 1, got {num_bands}")
1426
+ if electrodes_per_band < 1:
1427
+ raise ValueError(
1428
+ f"electrodes_per_band must be >= 1, got {electrodes_per_band}"
1429
+ )
1430
+ band_offsets = tuple(band_offsets)
1431
+ if not band_offsets:
1432
+ raise ValueError("band_offsets must be non-empty")
1433
+ if not all(isinstance(o, (int, np.integer)) for o in band_offsets):
1434
+ raise ValueError(
1435
+ f"band_offsets must contain integers, got {band_offsets!r}"
1436
+ )
1437
+ if max_temporal_jitter < 0:
1438
+ raise ValueError(
1439
+ f"max_temporal_jitter must be >= 0, got {max_temporal_jitter}"
1440
+ )
1441
+ self.num_bands = num_bands
1442
+ self.electrodes_per_band = electrodes_per_band
1443
+ self.band_offsets = band_offsets
1444
+ self.max_temporal_jitter = max_temporal_jitter
1445
+ self.circular_jitter = circular_jitter
1446
+
1447
+ def get_augmentation_params(self, *batch):
1448
+ return {
1449
+ "num_bands": self.num_bands,
1450
+ "electrodes_per_band": self.electrodes_per_band,
1451
+ "band_offsets": self.band_offsets,
1452
+ "max_temporal_jitter": self.max_temporal_jitter,
1453
+ "circular_jitter": self.circular_jitter,
1454
+ "random_state": self.rng,
1455
+ }
@@ -18,7 +18,7 @@ import shutil
18
18
  import warnings
19
19
  from abc import abstractmethod
20
20
  from collections import Counter
21
- from collections.abc import Callable
21
+ from collections.abc import Callable, Hashable
22
22
  from glob import glob
23
23
  from pathlib import Path
24
24
  from typing import Any, Generic, Iterable, no_type_check
@@ -1340,6 +1340,124 @@ class BaseConcatDataset(ConcatDataset, HubDatasetMixin, Generic[T]):
1340
1340
  raise TypeError("target_transform must be a callable.")
1341
1341
  self._target_transform = fn
1342
1342
 
1343
+ def set_target(self, column: Hashable) -> "BaseConcatDataset":
1344
+ """Use ``column`` as the target ``y`` for every subdataset.
1345
+
1346
+ Dispatches on the subdataset type:
1347
+
1348
+ * For :class:`WindowsDataset` / :class:`EEGWindowsDataset`,
1349
+ ``column`` is looked up in per-window ``metadata`` first, then in
1350
+ the per-record ``description`` (broadcast to every window). The
1351
+ resolved values overwrite ``ds.metadata['target']`` and ``ds.y``.
1352
+ For :class:`WindowsDataset`, the underlying ``ds.windows.metadata``
1353
+ is kept in sync so ``get_metadata()`` and the repr reflect the
1354
+ new target.
1355
+ * For :class:`RawDataset`, ``column`` must exist on the
1356
+ ``description``. ``ds.target_name`` is set to ``column`` so
1357
+ ``__getitem__`` reads ``description[column]`` as ``y`` on every
1358
+ access — no rebuild needed.
1359
+
1360
+ Parameters
1361
+ ----------
1362
+ column : Hashable
1363
+ Name of a metadata column or description field (BIDS entity,
1364
+ participants.tsv extra, ...). Typically a string, but any
1365
+ hashable that pandas accepts as a column label is allowed.
1366
+
1367
+ Returns
1368
+ -------
1369
+ self : BaseConcatDataset
1370
+
1371
+ Raises
1372
+ ------
1373
+ TypeError
1374
+ If any subdataset is not a :class:`WindowsDataset`,
1375
+ :class:`EEGWindowsDataset`, or :class:`RawDataset`, or if a
1376
+ windowed subdataset has lazy (non-DataFrame) metadata.
1377
+ ValueError
1378
+ If ``column`` is not present on a subdataset's metadata or
1379
+ description, or if a windowed subdataset has
1380
+ ``targets_from='channels'`` (which would make this a silent
1381
+ no-op since ``__getitem__`` reads y from misc channels, not
1382
+ from ``metadata['target']``).
1383
+ """
1384
+ for i, ds in enumerate(self.datasets):
1385
+ if isinstance(ds, (WindowsDataset, EEGWindowsDataset)):
1386
+ if not isinstance(ds.metadata, pd.DataFrame):
1387
+ # _LazyDataFrame (lazy_metadata=True) does not implement
1388
+ # .copy()/__setitem__, so the in-place write below would
1389
+ # raise AttributeError. Surface the precondition cleanly.
1390
+ raise TypeError(
1391
+ "set_target requires a materialized metadata "
1392
+ f"DataFrame; datasets[{i}].metadata is "
1393
+ f"{type(ds.metadata).__name__}. Re-window with "
1394
+ "lazy_metadata=False to use set_target."
1395
+ )
1396
+ if getattr(ds, "targets_from", "metadata") != "metadata":
1397
+ # __getitem__ would read y from misc channels; writing
1398
+ # metadata['target']/ds.y would be a silent no-op.
1399
+ raise ValueError(
1400
+ f"datasets[{i}] has targets_from="
1401
+ f"{ds.targets_from!r}; set_target only applies when "
1402
+ "targets_from='metadata' (otherwise __getitem__ "
1403
+ "derives y from misc channels and would ignore the "
1404
+ "rewritten target column)."
1405
+ )
1406
+ n = len(ds)
1407
+ md = ds.metadata
1408
+ if column in md.columns:
1409
+ values = md[column].iloc[:n].to_list()
1410
+ elif (
1411
+ isinstance(ds.description, pd.Series)
1412
+ and column in ds.description.index
1413
+ ):
1414
+ values = [ds.description[column]] * n
1415
+ else:
1416
+ desc_keys = (
1417
+ list(ds.description.index)
1418
+ if isinstance(ds.description, pd.Series)
1419
+ else []
1420
+ )
1421
+ raise ValueError(
1422
+ f"Column {column!r} not found on datasets[{i}]: "
1423
+ f"metadata cols={list(md.columns)}, "
1424
+ f"description keys={desc_keys}."
1425
+ )
1426
+ # In-place write so the WindowsDataset's metadata and the
1427
+ # underlying mne.Epochs.metadata (which start as the same
1428
+ # object reference) both reflect the new target. Defensive
1429
+ # second write covers the case where they got de-aliased
1430
+ # earlier by a caller-side reassignment.
1431
+ md["target"] = values
1432
+ windows_obj = getattr(ds, "_windows", None)
1433
+ if windows_obj is not None and windows_obj.metadata is not md:
1434
+ windows_obj.metadata["target"] = values
1435
+ # values is already a fresh list (Series.to_list() / [x] * n);
1436
+ # no defensive copy needed — pandas keeps its own representation
1437
+ # for md["target"] so mutating ds.y won't reach back into it.
1438
+ ds.y = values
1439
+ elif isinstance(ds, RawDataset):
1440
+ if (
1441
+ not isinstance(ds.description, pd.Series)
1442
+ or column not in ds.description.index
1443
+ ):
1444
+ desc_keys = (
1445
+ list(ds.description.index)
1446
+ if isinstance(ds.description, pd.Series)
1447
+ else []
1448
+ )
1449
+ raise ValueError(
1450
+ f"Column {column!r} not found on datasets[{i}] "
1451
+ f"description (keys={desc_keys})."
1452
+ )
1453
+ ds.target_name = column
1454
+ else:
1455
+ raise TypeError(
1456
+ "set_target requires WindowsDataset, EEGWindowsDataset, "
1457
+ f"or RawDataset; datasets[{i}] is {type(ds).__name__}."
1458
+ )
1459
+ return self
1460
+
1343
1461
  def _outdated_save(self, path, overwrite=False):
1344
1462
  """This is a copy of the old saving function, that had inconsistent.
1345
1463
 
@@ -6,10 +6,12 @@
6
6
  from __future__ import annotations
7
7
 
8
8
  import os
9
+ import time
9
10
 
10
11
  import mne
11
12
  import numpy as np
12
13
  import pandas as pd
14
+ import requests
13
15
  from mne.datasets.sleep_physionet.age import fetch_data
14
16
 
15
17
  from .base import BaseConcatDataset, RawDataset
@@ -59,7 +61,19 @@ class SleepPhysionet(BaseConcatDataset):
59
61
  if recording_ids is None:
60
62
  recording_ids = [1, 2]
61
63
 
62
- paths = fetch_data(subject_ids, recording=recording_ids, on_missing="warn")
64
+ max_attempts = 5
65
+ retry_delay_s = 10
66
+
67
+ for attempt in range(max_attempts):
68
+ try:
69
+ paths = fetch_data(
70
+ subject_ids, recording=recording_ids, on_missing="warn"
71
+ )
72
+ break
73
+ except requests.exceptions.RequestException:
74
+ if attempt == max_attempts - 1:
75
+ raise
76
+ time.sleep(retry_delay_s)
63
77
 
64
78
  all_base_ds = list()
65
79
  for p in paths:
@@ -4,10 +4,11 @@ from .atcnet import ATCNet
4
4
  from .attentionbasenet import AttentionBaseNet
5
5
  from .attn_sleep import AttnSleep
6
6
  from .base import EEGModuleMixin
7
- from .bendr import BENDR
8
- from .biot import BIOT
7
+ from .bendr import BENDR, InterpolatedBENDR
8
+ from .biot import BIOT, InterpolatedBIOT
9
9
  from .brainmodule import BrainModule
10
10
  from .cbramod import CBraMod
11
+ from .codebrain import CodeBrain
11
12
  from .contrawr import ContraWR
12
13
  from .ctnet import CTNet
13
14
  from .deep4 import Deep4Net
@@ -24,20 +25,24 @@ from .eegpt import EEGPT
24
25
  from .eegsimpleconv import EEGSimpleConv
25
26
  from .eegsym import EEGSym
26
27
  from .eegtcnet import EEGTCNet
28
+ from .emg2qwerty import EMG2QwertyNet
27
29
  from .fbcnet import FBCNet
28
30
  from .fblightconvnet import FBLightConvNet
29
31
  from .fbmsnet import FBMSNet
30
32
  from .hybrid import HybridNet
31
33
  from .ifnet import IFNet
32
- from .labram import Labram
34
+ from .interpolated import InterpolatedModel
35
+ from .labram import InterpolatedLaBraM, Labram
33
36
  from .luna import LUNA
34
37
  from .medformer import MEDFormer
38
+ from .meta_neuromotor import MetaNeuromotorHand
35
39
  from .msvtnet import MSVTNet
36
40
  from .patchedtransformer import PBT
37
41
  from .reve import REVE
38
42
  from .sccnet import SCCNet
39
43
  from .shallow_fbcsp import ShallowFBCSPNet
40
44
  from .signal_jepa import (
45
+ InterpolatedSignalJEPA,
41
46
  SignalJEPA,
42
47
  SignalJEPA_Contextual,
43
48
  SignalJEPA_PostLocal,
@@ -72,6 +77,7 @@ __all__ = [
72
77
  "BIOT",
73
78
  "BENDR",
74
79
  "CBraMod",
80
+ "CodeBrain",
75
81
  "ContraWR",
76
82
  "CTNet",
77
83
  "Deep4Net",
@@ -90,11 +96,18 @@ __all__ = [
90
96
  "EEGSimpleConv",
91
97
  "EEGTCNet",
92
98
  "DGCNN",
99
+ "EMG2QwertyNet",
93
100
  "FBCNet",
94
101
  "FBLightConvNet",
95
102
  "FBMSNet",
103
+ "MetaNeuromotorHand",
96
104
  "HybridNet",
97
105
  "IFNet",
106
+ "InterpolatedBENDR",
107
+ "InterpolatedBIOT",
108
+ "InterpolatedLaBraM",
109
+ "InterpolatedModel",
110
+ "InterpolatedSignalJEPA",
98
111
  "Labram",
99
112
  "LUNA",
100
113
  "extract_channel_locations_from_chs_info",
@@ -33,13 +33,25 @@ huggingface_hub = _soft_import(
33
33
  HAS_HF_HUB = huggingface_hub is not False
34
34
 
35
35
 
36
- class _BaseHubMixin:
37
- pass
36
+ _HF_INSTALL_HINT = (
37
+ "requires the `huggingface_hub` package. "
38
+ "Install with: pip install 'braindecode[hub]'"
39
+ )
40
+
41
+
42
+ class _BaseHubMixinStub:
43
+ @classmethod
44
+ def from_pretrained(cls, *args, **kwargs):
45
+ raise ImportError(f"{cls.__name__}.from_pretrained() {_HF_INSTALL_HINT}")
46
+
47
+ def push_to_hub(self, *args, **kwargs):
48
+ raise ImportError(f"{type(self).__name__}.push_to_hub() {_HF_INSTALL_HINT}")
38
49
 
39
50
 
40
51
  # Define base class for hub mixin
41
- if HAS_HF_HUB:
42
- _BaseHubMixin: Type = huggingface_hub.PyTorchModelHubMixin # type: ignore
52
+ _BaseHubMixin: Type = (
53
+ huggingface_hub.PyTorchModelHubMixin if HAS_HF_HUB else _BaseHubMixinStub
54
+ )
43
55
 
44
56
 
45
57
  def deprecated_args(obj, *old_new_args):