braindecode 0.8.1__py3-none-any.whl → 1.0.0__py3-none-any.whl

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.

Potentially problematic release.


This version of braindecode might be problematic. Click here for more details.

Files changed (108) hide show
  1. braindecode/__init__.py +1 -2
  2. braindecode/augmentation/__init__.py +39 -19
  3. braindecode/augmentation/base.py +25 -28
  4. braindecode/augmentation/functional.py +237 -100
  5. braindecode/augmentation/transforms.py +326 -158
  6. braindecode/classifier.py +26 -24
  7. braindecode/datasets/__init__.py +28 -10
  8. braindecode/datasets/base.py +220 -134
  9. braindecode/datasets/bbci.py +43 -52
  10. braindecode/datasets/bcicomp.py +47 -32
  11. braindecode/datasets/bids.py +245 -0
  12. braindecode/datasets/mne.py +45 -24
  13. braindecode/datasets/moabb.py +87 -27
  14. braindecode/datasets/nmt.py +311 -0
  15. braindecode/datasets/sleep_physio_challe_18.py +412 -0
  16. braindecode/datasets/sleep_physionet.py +43 -26
  17. braindecode/datasets/tuh.py +324 -140
  18. braindecode/datasets/xy.py +27 -12
  19. braindecode/datautil/__init__.py +34 -18
  20. braindecode/datautil/serialization.py +98 -71
  21. braindecode/eegneuralnet.py +63 -47
  22. braindecode/functional/__init__.py +10 -0
  23. braindecode/functional/functions.py +251 -0
  24. braindecode/functional/initialization.py +47 -0
  25. braindecode/models/__init__.py +36 -14
  26. braindecode/models/atcnet.py +153 -159
  27. braindecode/models/attentionbasenet.py +550 -0
  28. braindecode/models/base.py +86 -102
  29. braindecode/models/biot.py +483 -0
  30. braindecode/models/contrawr.py +296 -0
  31. braindecode/models/ctnet.py +450 -0
  32. braindecode/models/deep4.py +64 -75
  33. braindecode/models/deepsleepnet.py +149 -119
  34. braindecode/models/eegconformer.py +111 -171
  35. braindecode/models/eeginception_erp.py +109 -118
  36. braindecode/models/eeginception_mi.py +155 -97
  37. braindecode/models/eegitnet.py +215 -151
  38. braindecode/models/eegminer.py +255 -0
  39. braindecode/models/eegnet.py +229 -161
  40. braindecode/models/eegnex.py +247 -0
  41. braindecode/models/eegresnet.py +234 -152
  42. braindecode/models/eegsimpleconv.py +199 -0
  43. braindecode/models/eegtcnet.py +335 -0
  44. braindecode/models/fbcnet.py +221 -0
  45. braindecode/models/fblightconvnet.py +313 -0
  46. braindecode/models/fbmsnet.py +325 -0
  47. braindecode/models/hybrid.py +52 -71
  48. braindecode/models/ifnet.py +441 -0
  49. braindecode/models/labram.py +1166 -0
  50. braindecode/models/msvtnet.py +375 -0
  51. braindecode/models/sccnet.py +182 -0
  52. braindecode/models/shallow_fbcsp.py +50 -56
  53. braindecode/models/signal_jepa.py +1012 -0
  54. braindecode/models/sinc_shallow.py +337 -0
  55. braindecode/models/sleep_stager_blanco_2020.py +55 -46
  56. braindecode/models/sleep_stager_chambon_2018.py +54 -53
  57. braindecode/models/sleep_stager_eldele_2021.py +248 -141
  58. braindecode/models/sparcnet.py +378 -0
  59. braindecode/models/summary.csv +41 -0
  60. braindecode/models/syncnet.py +232 -0
  61. braindecode/models/tcn.py +158 -88
  62. braindecode/models/tidnet.py +280 -167
  63. braindecode/models/tsinception.py +258 -0
  64. braindecode/models/usleep.py +190 -177
  65. braindecode/models/util.py +109 -141
  66. braindecode/modules/__init__.py +38 -0
  67. braindecode/modules/activation.py +60 -0
  68. braindecode/modules/attention.py +757 -0
  69. braindecode/modules/blocks.py +108 -0
  70. braindecode/modules/convolution.py +274 -0
  71. braindecode/modules/filter.py +632 -0
  72. braindecode/modules/layers.py +133 -0
  73. braindecode/modules/linear.py +50 -0
  74. braindecode/modules/parametrization.py +38 -0
  75. braindecode/modules/stats.py +77 -0
  76. braindecode/modules/util.py +77 -0
  77. braindecode/modules/wrapper.py +75 -0
  78. braindecode/preprocessing/__init__.py +36 -11
  79. braindecode/preprocessing/mne_preprocess.py +13 -7
  80. braindecode/preprocessing/preprocess.py +139 -75
  81. braindecode/preprocessing/windowers.py +576 -187
  82. braindecode/regressor.py +23 -12
  83. braindecode/samplers/__init__.py +16 -8
  84. braindecode/samplers/base.py +148 -32
  85. braindecode/samplers/ssl.py +162 -17
  86. braindecode/training/__init__.py +18 -10
  87. braindecode/training/callbacks.py +2 -4
  88. braindecode/training/losses.py +3 -8
  89. braindecode/training/scoring.py +76 -68
  90. braindecode/util.py +55 -59
  91. braindecode/version.py +1 -1
  92. braindecode/visualization/__init__.py +2 -3
  93. braindecode/visualization/confusion_matrices.py +117 -73
  94. braindecode/visualization/gradients.py +14 -10
  95. {braindecode-0.8.1.dist-info → braindecode-1.0.0.dist-info}/METADATA +39 -55
  96. braindecode-1.0.0.dist-info/RECORD +101 -0
  97. {braindecode-0.8.1.dist-info → braindecode-1.0.0.dist-info}/WHEEL +1 -1
  98. {braindecode-0.8.1.dist-info → braindecode-1.0.0.dist-info/licenses}/LICENSE.txt +1 -1
  99. braindecode-1.0.0.dist-info/licenses/NOTICE.txt +20 -0
  100. braindecode/datautil/mne.py +0 -9
  101. braindecode/datautil/preprocess.py +0 -12
  102. braindecode/datautil/windowers.py +0 -6
  103. braindecode/datautil/xy.py +0 -9
  104. braindecode/models/eeginception.py +0 -317
  105. braindecode/models/functions.py +0 -47
  106. braindecode/models/modules.py +0 -358
  107. braindecode-0.8.1.dist-info/RECORD +0 -68
  108. {braindecode-0.8.1.dist-info → braindecode-1.0.0.dist-info}/top_level.txt +0 -0
@@ -2,22 +2,27 @@
2
2
  #
3
3
  # License: BSD (3-clause)
4
4
 
5
- import numpy as np
6
5
  import matplotlib.pyplot as plt
6
+ import numpy as np
7
7
  from matplotlib import cm
8
8
 
9
9
 
10
- def plot_confusion_matrix(confusion_mat,
11
- class_names=None, figsize=None,
12
- colormap=cm.bwr,
13
- textcolor='black', vmin=None, vmax=None,
14
- fontweight='normal',
15
- rotate_row_labels=90,
16
- rotate_col_labels=0,
17
- with_f1_score=False,
18
- norm_axes=(0, 1),
19
- rotate_precision=False,
20
- class_names_fontsize=12):
10
+ def plot_confusion_matrix(
11
+ confusion_mat,
12
+ class_names=None,
13
+ figsize=None,
14
+ colormap=cm.bwr,
15
+ textcolor="black",
16
+ vmin=None,
17
+ vmax=None,
18
+ fontweight="normal",
19
+ rotate_row_labels=90,
20
+ rotate_col_labels=0,
21
+ with_f1_score=False,
22
+ norm_axes=(0, 1),
23
+ rotate_precision=False,
24
+ class_names_fontsize=12,
25
+ ):
21
26
  """
22
27
 
23
28
  Generates a confusion matrix with additional precision and sensitivity metrics as in [1]_.
@@ -68,8 +73,9 @@ def plot_confusion_matrix(confusion_mat,
68
73
  class_names = [str(i_class + 1) for i_class in range(n_classes)]
69
74
 
70
75
  # norm by all targets
71
- normed_conf_mat = confusion_mat / np.float32(np.sum(confusion_mat,
72
- axis=norm_axes, keepdims=True))
76
+ normed_conf_mat = confusion_mat / np.float32(
77
+ np.sum(confusion_mat, axis=norm_axes, keepdims=True)
78
+ )
73
79
 
74
80
  fig = plt.figure(figsize=figsize)
75
81
  plt.clf()
@@ -83,13 +89,20 @@ def plot_confusion_matrix(confusion_mat,
83
89
  # see http://stackoverflow.com/a/31397438/1469195
84
90
  # brighten so that black text remains readable
85
91
  # used alpha=0.6 before
86
- def _brighten(x, ):
92
+ def _brighten(
93
+ x,
94
+ ):
87
95
  brightened_x = 1 - ((1 - np.array(x)) * 0.4)
88
96
  return brightened_x
89
97
 
90
98
  brightened_cmap = _cmap_map(_brighten, colormap) # colormap #
91
- ax.imshow(np.array(normed_conf_mat), cmap=brightened_cmap,
92
- interpolation='nearest', vmin=vmin, vmax=vmax)
99
+ ax.imshow(
100
+ np.array(normed_conf_mat),
101
+ cmap=brightened_cmap,
102
+ interpolation="nearest",
103
+ vmin=vmin,
104
+ vmax=vmax,
105
+ )
93
106
 
94
107
  # make space for precision and sensitivity
95
108
  plt.xlim(-0.5, normed_conf_mat.shape[0] + 0.5)
@@ -99,42 +112,48 @@ def plot_confusion_matrix(confusion_mat,
99
112
  for x in range(width):
100
113
  for y in range(height):
101
114
  if x == y:
102
- this_font_weight = 'bold'
115
+ this_font_weight = "bold"
103
116
  else:
104
117
  this_font_weight = fontweight
105
118
  annotate_str = "{:d}".format(confusion_mat[x][y])
106
119
  annotate_str += "\n"
107
- ax.annotate(annotate_str.format(confusion_mat[x][y]),
108
- xy=(y, x),
109
- horizontalalignment='center',
110
- verticalalignment='center', fontsize=12,
111
- color=textcolor,
112
- fontweight=this_font_weight)
120
+ ax.annotate(
121
+ annotate_str.format(confusion_mat[x][y]),
122
+ xy=(y, x),
123
+ horizontalalignment="center",
124
+ verticalalignment="center",
125
+ fontsize=12,
126
+ color=textcolor,
127
+ fontweight=this_font_weight,
128
+ )
113
129
  if x != y or (not with_f1_score):
114
130
  ax.annotate(
115
- "\n\n{:4.1f}%".format(
116
- normed_conf_mat[x][y] * 100),
131
+ "\n\n{:4.1f}%".format(normed_conf_mat[x][y] * 100),
117
132
  xy=(y, x),
118
- horizontalalignment='center',
119
- verticalalignment='center', fontsize=10,
133
+ horizontalalignment="center",
134
+ verticalalignment="center",
135
+ fontsize=10,
120
136
  color=textcolor,
121
- fontweight=this_font_weight)
137
+ fontweight=this_font_weight,
138
+ )
122
139
  else:
123
140
  assert x == y
124
- precision = confusion_mat[x][x] / float(np.sum(
125
- confusion_mat[x, :]))
126
- sensitivity = confusion_mat[x][x] / float(np.sum(
127
- confusion_mat[:, y]))
141
+ precision = confusion_mat[x][x] / float(np.sum(confusion_mat[x, :]))
142
+ sensitivity = confusion_mat[x][x] / float(np.sum(confusion_mat[:, y]))
128
143
  f1_score = 2 * precision * sensitivity / (precision + sensitivity)
129
144
 
130
- ax.annotate("\n{:4.1f}%\n{:4.1f}% (F)".format(
131
- (confusion_mat[x][y] / float(np.sum(confusion_mat))) * 100,
132
- f1_score * 100),
145
+ ax.annotate(
146
+ "\n{:4.1f}%\n{:4.1f}% (F)".format(
147
+ (confusion_mat[x][y] / float(np.sum(confusion_mat))) * 100,
148
+ f1_score * 100,
149
+ ),
133
150
  xy=(y, x + 0.1),
134
- horizontalalignment='center',
135
- verticalalignment='center', fontsize=10,
151
+ horizontalalignment="center",
152
+ verticalalignment="center",
153
+ fontsize=10,
136
154
  color=textcolor,
137
- fontweight=this_font_weight)
155
+ fontweight=this_font_weight,
156
+ )
138
157
 
139
158
  # Add values for target correctness etc.
140
159
  for x in range(width):
@@ -145,10 +164,13 @@ def plot_confusion_matrix(confusion_mat,
145
164
  correctness = confusion_mat[x][x] / float(np.sum(confusion_mat[x, :]))
146
165
  annotate_str = ""
147
166
  annotate_str += "\n{:5.2f}%".format(correctness * 100)
148
- ax.annotate(annotate_str,
149
- xy=(y, x),
150
- horizontalalignment='center',
151
- verticalalignment='center', fontsize=12)
167
+ ax.annotate(
168
+ annotate_str,
169
+ xy=(y, x),
170
+ horizontalalignment="center",
171
+ verticalalignment="center",
172
+ fontsize=12,
173
+ )
152
174
 
153
175
  for y in range(height):
154
176
  x = len(confusion_mat)
@@ -158,47 +180,68 @@ def plot_confusion_matrix(confusion_mat,
158
180
  correctness = confusion_mat[y][y] / float(np.sum(confusion_mat[:, y]))
159
181
  annotate_str = ""
160
182
  annotate_str += "\n{:5.2f}%".format(correctness * 100)
161
- ax.annotate(annotate_str,
162
- xy=(y, x),
163
- horizontalalignment='center',
164
- verticalalignment='center', fontsize=12)
165
-
166
- overall_correctness = np.sum(np.diag(confusion_mat)) / np.sum(confusion_mat).astype(float)
167
- ax.annotate("{:5.2f}%".format(overall_correctness * 100),
168
- xy=(len(confusion_mat), len(confusion_mat)),
169
- horizontalalignment='center',
170
- verticalalignment='center', fontsize=12,
171
- fontweight='bold')
172
-
173
- plt.xticks(range(width), class_names, fontsize=class_names_fontsize,
174
- rotation=rotate_col_labels)
175
- plt.yticks(np.arange(0, height), class_names,
176
- va='center',
177
- fontsize=class_names_fontsize, rotation=rotate_row_labels)
183
+ ax.annotate(
184
+ annotate_str,
185
+ xy=(y, x),
186
+ horizontalalignment="center",
187
+ verticalalignment="center",
188
+ fontsize=12,
189
+ )
190
+
191
+ overall_correctness = np.sum(np.diag(confusion_mat)) / np.sum(confusion_mat).astype(
192
+ float
193
+ )
194
+ ax.annotate(
195
+ "{:5.2f}%".format(overall_correctness * 100),
196
+ xy=(len(confusion_mat), len(confusion_mat)),
197
+ horizontalalignment="center",
198
+ verticalalignment="center",
199
+ fontsize=12,
200
+ fontweight="bold",
201
+ )
202
+
203
+ plt.xticks(
204
+ range(width),
205
+ class_names,
206
+ fontsize=class_names_fontsize,
207
+ rotation=rotate_col_labels,
208
+ )
209
+ plt.yticks(
210
+ np.arange(0, height),
211
+ class_names,
212
+ va="center",
213
+ fontsize=class_names_fontsize,
214
+ rotation=rotate_row_labels,
215
+ )
178
216
  plt.grid(False)
179
- plt.ylabel('Predictions', fontsize=15)
180
- plt.xlabel('Targets', fontsize=15)
217
+ plt.ylabel("Predictions", fontsize=15)
218
+ plt.xlabel("Targets", fontsize=15)
181
219
 
182
220
  # n classes is also shape of matrix/size
183
- ax.text(-1.2, n_classes + 0.2, "Recall", ha='center', va='center',
184
- fontsize=13)
221
+ ax.text(-1.2, n_classes + 0.2, "Recall", ha="center", va="center", fontsize=13)
185
222
  if rotate_precision:
186
223
  rotation = 90
187
224
  x_pos = -1.1
188
- va = 'center'
225
+ va = "center"
189
226
  else:
190
227
  rotation = 0
191
228
  x_pos = -0.8
192
- va = 'top'
193
- ax.text(n_classes, x_pos, "Precision", ha='center', va=va,
194
- rotation=rotation, # 270,
195
- fontsize=13)
229
+ va = "top"
230
+ ax.text(
231
+ n_classes,
232
+ x_pos,
233
+ "Precision",
234
+ ha="center",
235
+ va=va,
236
+ rotation=rotation, # 270,
237
+ fontsize=13,
238
+ )
196
239
 
197
240
  return fig
198
241
 
199
242
 
200
243
  # see http://stackoverflow.com/a/31397438/1469195
201
- def _cmap_map(function, cmap, name='colormap_mod', N=None, gamma=None):
244
+ def _cmap_map(function, cmap, name="colormap_mod", N=None, gamma=None):
202
245
  """
203
246
  Modify a colormap using `function` which must operate on 3-element
204
247
  arrays of [r, g, b] values.
@@ -211,6 +254,7 @@ def _cmap_map(function, cmap, name='colormap_mod', N=None, gamma=None):
211
254
  loaded using plt.get_cmap(name).
212
255
  """
213
256
  from matplotlib.colors import LinearSegmentedColormap as lsc
257
+
214
258
  if N is None:
215
259
  N = cmap.N
216
260
  if gamma is None:
@@ -225,7 +269,7 @@ def _cmap_map(function, cmap, name='colormap_mod', N=None, gamma=None):
225
269
  y0 = cmap(step_list)[:, :3]
226
270
  y1 = y0.copy()[:, :3]
227
271
  # Go back to catch the discontinuities, and place them into y0, y1
228
- for iclr, key in enumerate(['red', 'green', 'blue']):
272
+ for iclr, key in enumerate(["red", "green", "blue"]):
229
273
  for istp, step in enumerate(step_list):
230
274
  try:
231
275
  ind = step_dict[key].index(step)
@@ -238,8 +282,8 @@ def _cmap_map(function, cmap, name='colormap_mod', N=None, gamma=None):
238
282
  y0 = np.array(list(map(function, y0)))
239
283
  y1 = np.array(list(map(function, y1)))
240
284
  # Build the new colormap (overwriting step_dict):
241
- for iclr, clr in enumerate(['red', 'green', 'blue']):
285
+ for iclr, clr in enumerate(["red", "green", "blue"]):
242
286
  step_dict[clr] = np.vstack((step_list, y0[:, iclr], y1[:, iclr])).T
243
287
  # Remove alpha, otherwise crashes...
244
- step_dict.pop('alpha', None)
288
+ step_dict.pop("alpha", None)
245
289
  return lsc(name, step_dict, N=N, gamma=gamma)
@@ -3,16 +3,20 @@
3
3
  # License: BSD (3-clause)
4
4
 
5
5
  import numpy as np
6
- from skorch.utils import to_numpy, to_tensor
7
6
  import torch
7
+ from skorch.utils import to_numpy, to_tensor
8
8
 
9
9
 
10
10
  def compute_amplitude_gradients(model, dataset, batch_size):
11
- loader = torch.utils.data.DataLoader(dataset, batch_size=batch_size,
12
- drop_last=False, shuffle=False)
11
+ loader = torch.utils.data.DataLoader(
12
+ dataset, batch_size=batch_size, drop_last=False, shuffle=False
13
+ )
13
14
  all_amp_grads = []
14
15
  for batch_X, _, _ in loader:
15
- this_amp_grads = compute_amplitude_gradients_for_X(model, batch_X, )
16
+ this_amp_grads = compute_amplitude_gradients_for_X(
17
+ model,
18
+ batch_X,
19
+ )
16
20
  all_amp_grads.append(this_amp_grads)
17
21
  all_amp_grads = np.concatenate(all_amp_grads, axis=1)
18
22
  return all_amp_grads
@@ -27,22 +31,22 @@ def compute_amplitude_gradients_for_X(model, X):
27
31
  phases_th = to_tensor(phases.astype(np.float32), device=device).requires_grad_(True)
28
32
 
29
33
  fft_coefs = amps_th.unsqueeze(-1) * torch.stack(
30
- (torch.cos(phases_th), torch.sin(phases_th)), dim=-1)
34
+ (torch.cos(phases_th), torch.sin(phases_th)), dim=-1
35
+ )
31
36
  fft_coefs = fft_coefs.squeeze(3)
32
37
 
33
38
  try:
34
39
  complex_fft_coefs = torch.view_as_complex(fft_coefs)
35
- iffted = torch.fft.irfft(
36
- complex_fft_coefs, n=X.shape[2], dim=2)
40
+ iffted = torch.fft.irfft(complex_fft_coefs, n=X.shape[2], dim=2)
37
41
  except AttributeError:
38
42
  iffted = torch.irfft( # Deprecated since 1.7
39
- fft_coefs, signal_ndim=1, signal_sizes=(X.shape[2],))
43
+ fft_coefs, signal_ndim=1, signal_sizes=(X.shape[2],)
44
+ )
40
45
 
41
46
  outs = model(iffted)
42
47
 
43
48
  n_filters = outs.shape[1]
44
- amp_grads_per_filter = np.full((n_filters,) + ffted.shape,
45
- np.nan, dtype=np.float32)
49
+ amp_grads_per_filter = np.full((n_filters,) + ffted.shape, np.nan, dtype=np.float32)
46
50
  for i_filter in range(n_filters):
47
51
  mean_out = torch.mean(outs[:, i_filter])
48
52
  mean_out.backward(retain_graph=True)
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: braindecode
3
- Version: 0.8.1
3
+ Version: 1.0.0
4
4
  Summary: Deep learning software to decode EEG, ECG or MEG signals
5
5
  Author-email: Robin Tibor Schirrmeister <robintibor@gmail.com>
6
6
  Maintainer-email: Alexandre Gramfort <agramfort@meta.com>, Bruno Aristimunha Pinto <b.aristimunha@gmail.com>, Robin Tibor Schirrmeister <robintibor@gmail.com>
@@ -15,14 +15,15 @@ Classifier: Intended Audience :: Science/Research
15
15
  Classifier: Topic :: Software Development :: Build Tools
16
16
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
17
17
  Classifier: License :: OSI Approved :: BSD License
18
- Classifier: Programming Language :: Python :: 3.8
19
- Classifier: Programming Language :: Python :: 3.9
20
18
  Classifier: Programming Language :: Python :: 3.10
21
19
  Classifier: Programming Language :: Python :: 3.11
22
- Requires-Python: >=3.8
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Requires-Python: >3.9
23
22
  Description-Content-Type: text/x-rst
24
23
  License-File: LICENSE.txt
25
- Requires-Dist: mne
24
+ License-File: NOTICE.txt
25
+ Requires-Dist: mne>=1.10.0
26
+ Requires-Dist: mne_bids>=0.16
26
27
  Requires-Dist: numpy
27
28
  Requires-Dist: pandas
28
29
  Requires-Dist: scipy
@@ -30,29 +31,36 @@ Requires-Dist: matplotlib
30
31
  Requires-Dist: h5py
31
32
  Requires-Dist: skorch
32
33
  Requires-Dist: torch
34
+ Requires-Dist: torchaudio
33
35
  Requires-Dist: einops
34
36
  Requires-Dist: joblib
35
37
  Requires-Dist: torchinfo
36
- Requires-Dist: docstring-inheritance
37
- Provides-Extra: docs
38
- Requires-Dist: sphinx-gallery ; extra == 'docs'
39
- Requires-Dist: sphinx-rtd-theme ; extra == 'docs'
40
- Requires-Dist: pydata-sphinx-theme ; extra == 'docs'
41
- Requires-Dist: numpydoc ; extra == 'docs'
42
- Requires-Dist: memory-profiler ; extra == 'docs'
43
- Requires-Dist: pillow ; extra == 'docs'
44
- Requires-Dist: ipython ; extra == 'docs'
45
- Requires-Dist: sphinx-design ; extra == 'docs'
46
- Requires-Dist: lightning ; extra == 'docs'
47
- Requires-Dist: seaborn ; extra == 'docs'
48
- Requires-Dist: pre-commit ; extra == 'docs'
38
+ Requires-Dist: wfdb
39
+ Requires-Dist: h5py
40
+ Requires-Dist: linear_attention_transformer
41
+ Requires-Dist: docstring_inheritance
49
42
  Provides-Extra: moabb
50
- Requires-Dist: moabb >=1.0.0 ; extra == 'moabb'
43
+ Requires-Dist: moabb>=1.2.0; extra == "moabb"
51
44
  Provides-Extra: tests
52
- Requires-Dist: pytest ; extra == 'tests'
53
- Requires-Dist: pytest-cov ; extra == 'tests'
54
- Requires-Dist: codecov ; extra == 'tests'
55
- Requires-Dist: pytest-cases ; extra == 'tests'
45
+ Requires-Dist: pytest; extra == "tests"
46
+ Requires-Dist: pytest-cov; extra == "tests"
47
+ Requires-Dist: codecov; extra == "tests"
48
+ Requires-Dist: pytest_cases; extra == "tests"
49
+ Requires-Dist: mypy; extra == "tests"
50
+ Provides-Extra: docs
51
+ Requires-Dist: sphinx_gallery; extra == "docs"
52
+ Requires-Dist: sphinx_rtd_theme; extra == "docs"
53
+ Requires-Dist: pydata_sphinx_theme; extra == "docs"
54
+ Requires-Dist: numpydoc; extra == "docs"
55
+ Requires-Dist: memory_profiler; extra == "docs"
56
+ Requires-Dist: pillow; extra == "docs"
57
+ Requires-Dist: ipython; extra == "docs"
58
+ Requires-Dist: sphinx_design; extra == "docs"
59
+ Requires-Dist: lightning; extra == "docs"
60
+ Requires-Dist: seaborn; extra == "docs"
61
+ Requires-Dist: pre-commit; extra == "docs"
62
+ Requires-Dist: openneuro-py; extra == "docs"
63
+ Dynamic: license-file
56
64
 
57
65
  .. image:: https://badges.gitter.im/braindecodechat/community.svg
58
66
  :alt: Join the chat at https://gitter.im/braindecodechat/community
@@ -166,37 +174,13 @@ as well as the `MNE-Python <https://mne.tools>`_ software that is used by braind
166
174
  Licensing
167
175
  ^^^^^^^^^
168
176
 
169
- Braindecode is **BSD-licenced** (BSD-3-Clause):
170
-
171
- This software is OSI Certified Open Source Software.
172
- OSI Certified is a certification mark of the Open Source Initiative.
173
-
174
- Copyright (c) 2011-2022, authors of Braindecode.
175
- All rights reserved.
176
-
177
- Redistribution and use in source and binary forms, with or without
178
- modification, are permitted provided that the following conditions are met:
179
-
180
- * Redistributions of source code must retain the above copyright notice,
181
- this list of conditions and the following disclaimer.
177
+ This project is primarily licensed under the BSD-3-Clause License.
182
178
 
183
- * Redistributions in binary form must reproduce the above copyright notice,
184
- this list of conditions and the following disclaimer in the documentation
185
- and/or other materials provided with the distribution.
179
+ Additional Components
180
+ ~~~~~~~~~~~~~~~~~~~~~
186
181
 
187
- * Neither the names of braindecode authors nor the names of any
188
- contributors may be used to endorse or promote products derived from
189
- this software without specific prior written permission.
182
+ Some components within this repository are licensed under the Creative Commons Attribution-NonCommercial 4.0 International
183
+ License.
190
184
 
191
- **This software is provided by the copyright holders and contributors
192
- "as is" and any express or implied warranties, including, but not
193
- limited to, the implied warranties of merchantability and fitness for
194
- a particular purpose are disclaimed. In no event shall the copyright
195
- owner or contributors be liable for any direct, indirect, incidental,
196
- special, exemplary, or consequential damages (including, but not
197
- limited to, procurement of substitute goods or services; loss of use,
198
- data, or profits; or business interruption) however caused and on any
199
- theory of liability, whether in contract, strict liability, or tort
200
- (including negligence or otherwise) arising in any way out of the use
201
- of this software, even if advised of the possibility of such
202
- damage.**
185
+ Please refer to the ``LICENSE`` and ``NOTICE`` files for more detailed
186
+ information.
@@ -0,0 +1,101 @@
1
+ braindecode/__init__.py,sha256=Ac3LEEyIHWFY_fFh3eAY1GZUqXcUxVSJwOSUCwGEDvQ,182
2
+ braindecode/classifier.py,sha256=k9vSCtfQbld0YVleDi5rrrmk6k_k5JYEPPBYcNxYjZ8,9807
3
+ braindecode/eegneuralnet.py,sha256=dz8k_-2jV7WqkaX4bQG-dmr-vRT7ZtOwJqomXyC9PTw,15287
4
+ braindecode/regressor.py,sha256=VLfrpiXklwI4onkwue3QmzlBWcvspu0tlrLo9RT1Oiw,9375
5
+ braindecode/util.py,sha256=J-tBcDJNlMTIFW2mfOy6Ko0nsgdP4obRoEVDeg2rFH0,12686
6
+ braindecode/version.py,sha256=J-j-u0itpEFT6irdmWmixQqYMadNl1X91TxUmoiLHMI,22
7
+ braindecode/augmentation/__init__.py,sha256=LG7ONqCufYAF9NZt8POIp10lYXb8iSueYkF-CWGK2Ls,1001
8
+ braindecode/augmentation/base.py,sha256=gg7wYsVfa9jfqBddtE03B5ZrPHFFmPl2sa3LOrRnGfo,7325
9
+ braindecode/augmentation/functional.py,sha256=ygkMNEFHaUdRQfk7meMML19FnM406Uf34h-ztKXdJwM,37978
10
+ braindecode/augmentation/transforms.py,sha256=JFkUll0bUaaMBdWFcFex9aYqgnvfpc3IZbs8hHB_Zdo,44273
11
+ braindecode/datasets/__init__.py,sha256=CTl8ucbG948ZJqntEBELb-Pn8GsZLfFZLgVcB-fhw4k,891
12
+ braindecode/datasets/base.py,sha256=ED8RQWusMyWf0T7b_HXwouR2Ax47qppEc506AlSzBt0,32155
13
+ braindecode/datasets/bbci.py,sha256=BC9o1thEyYBREAo930O7zZz3xZB-l4Odt5j8E_1huXI,19277
14
+ braindecode/datasets/bcicomp.py,sha256=ER_XmqxhpoO2FWELMesQXQ40OTe7BXoy7nYDSiZG9kE,7556
15
+ braindecode/datasets/bids.py,sha256=4asq1HyQHgJjwW7w-GMlvTVQhi-hR2HWLJ8Z__UrUS4,8846
16
+ braindecode/datasets/mne.py,sha256=Dg6RZAAwd8TVGrvLOPF5B_JrbyGUWg52vWmn6fLMOQM,6135
17
+ braindecode/datasets/moabb.py,sha256=JmBcFV7QJT8GCgLNNKWgxJVnEVnO5wd9U_uiIqTIxDM,7091
18
+ braindecode/datasets/nmt.py,sha256=E4T8OYBEwWRSjh7VFzmyxaZbf5ufFVEBYYmQEd1ghUU,10430
19
+ braindecode/datasets/sleep_physio_challe_18.py,sha256=KTvUtuarOOYu6PHN6H1vcy4W9xilwtZE08n7JSrk8Cs,15414
20
+ braindecode/datasets/sleep_physionet.py,sha256=jieRx6u-MQ4jn_5Zox_pVV8WjBwXKLv9uq4GXRAZ_58,4087
21
+ braindecode/datasets/tuh.py,sha256=iG1hOtdevzKGEVpeuRFDBOnsW_rWa5zEmMFJfYR1hqg,22867
22
+ braindecode/datasets/xy.py,sha256=xT-nS_5jpuVKJ0SGqc7Ia0FVpqj86UfuzcYQdEGZdp0,2986
23
+ braindecode/datautil/__init__.py,sha256=53iVndXeqRYQ2k0S4qtjoMHYLqrrjIivYkUBgxT_wHw,1713
24
+ braindecode/datautil/serialization.py,sha256=cqLn7H4NW_8O-Et-w7GoDMyCWuILZoV8LdqKGAGd13k,12574
25
+ braindecode/datautil/util.py,sha256=ZfDoxLieKsgI8xcWQqebV-vJ5pJYRvRRHkEwhwpgoKU,674
26
+ braindecode/functional/__init__.py,sha256=Jpp3A1OCdYoJ94y5VVDb9jjiimIcKk2RdrGnaOlh2cw,213
27
+ braindecode/functional/functions.py,sha256=7HQHmGG-kk3VjPY5cE-XFK6_9Mlj0ZODbzYAlpcXW3U,8634
28
+ braindecode/functional/initialization.py,sha256=BUSC7y2TMsfShpMYBVwm3xg3ODFqWp-STH7yD4sn8zk,1388
29
+ braindecode/models/__init__.py,sha256=FLOI-_mvkwapRY2DhQp-bSf5nWNoG4aMIvV0Unqgyy8,1681
30
+ braindecode/models/atcnet.py,sha256=0DCaJ0FEZhFrA1oYigJkcsS5sSLtEginvjxVVEOxjN0,22767
31
+ braindecode/models/attentionbasenet.py,sha256=KneWnjUA_LMOUF__2xPQmmrdlzpvrxh9A736eoY5A4o,21235
32
+ braindecode/models/base.py,sha256=9icrWNZBGbh_VLyB9m8g_K1QyK7s3mh8X-hJ29gEbWs,10802
33
+ braindecode/models/biot.py,sha256=5BpyBQ8WbFwCDFnTQDqtm1FqORIIvghy22YkLncxXnA,16653
34
+ braindecode/models/contrawr.py,sha256=rcdK8ODlUV9cmdlhholx565lGrYuOZSC7VRC-zF2HoM,9246
35
+ braindecode/models/ctnet.py,sha256=KdYin0IG9AfUx1hlBi7scwSDVPJCLX7XC8vYII8x3Yk,13705
36
+ braindecode/models/deep4.py,sha256=t5aa9O4j0OmDLFyTO1SKZN6VznCz47Uok2QH0LRpkv0,12019
37
+ braindecode/models/deepsleepnet.py,sha256=RrciuVJtZ-fhiUl-yLPfK2FP-G29V5Wor6pPlrMHQWQ,9218
38
+ braindecode/models/eegconformer.py,sha256=Q24aWnTEkfgaxGg0qMcPqMtmyIIYl5z7Ys3lJLrWPLQ,11636
39
+ braindecode/models/eeginception_erp.py,sha256=mwh3rGSHAJVvnbOlYTuWWkKxlmFAdAXBNCrq4IPgOS4,11408
40
+ braindecode/models/eeginception_mi.py,sha256=ta3IPs22mFc8Fg8jRjWCucIQu6tUvSn2xDD4NIRVFZM,12161
41
+ braindecode/models/eegitnet.py,sha256=-twgYp5GCAlBFVl4tAK6qTVvE6wDRWvB9RHeP7h4SHk,9840
42
+ braindecode/models/eegminer.py,sha256=IKVOheOSLUwgy7Tdl1jWt7jaYrw4AecRfVMtMBflOFY,9877
43
+ braindecode/models/eegnet.py,sha256=-5Ixnw7ypd6qxYHXnvVMkErLxH4otlPkEIgIxItZ8eA,16300
44
+ braindecode/models/eegnex.py,sha256=KNJIh8pFNhY087Bey2OPzDD4Uqw9pS6UkwMjnOngBzg,8497
45
+ braindecode/models/eegresnet.py,sha256=cqWOSGqfJN_dNYUU9l8nYd_S3T1N-UX5-encKQzfBlg,12057
46
+ braindecode/models/eegsimpleconv.py,sha256=sHpK-7ZGOCMuXsdkSVuarFTd1T0jMJUP_xwXP3gxQwc,7268
47
+ braindecode/models/eegtcnet.py,sha256=np-93Ttctp2uaEYpMrfXfH5bJmCOUZZHLjv8GJEEym4,10830
48
+ braindecode/models/fbcnet.py,sha256=nMO-xc2XHdlj0h6Veby2sB-nFBNwYA4vm8TMAUfSENA,7494
49
+ braindecode/models/fblightconvnet.py,sha256=d5MwhawhkjilAMo0ckaYMxJhdGMEuorWgHX-TBgwv6s,11041
50
+ braindecode/models/fbmsnet.py,sha256=LYw7Smk0Hpft6PBsSq801xCqU5B88nhX-E-oDfilPnw,11689
51
+ braindecode/models/hybrid.py,sha256=hA8jwD3_3LL71BxUjRM1dkhqlHU9E9hjuDokh-jBq-4,4024
52
+ braindecode/models/ifnet.py,sha256=Y2bwfko3SDjD74AzgUEzgMhKJFGCCw_Q_Noh5VONEjQ,15137
53
+ braindecode/models/labram.py,sha256=PHTf7KuOTnDYeFmiCRxTvAhHzHLXEdIYQWSnQp1wOJI,41034
54
+ braindecode/models/msvtnet.py,sha256=Y2n1X6cklleU4YA6ZIgw70DYTCl88gTMWKqgvWTniwg,12658
55
+ braindecode/models/sccnet.py,sha256=Y9mh9jb0-BKiQU9oD3J-zQqNd83GJIjB_E_rUm2hH90,6704
56
+ braindecode/models/shallow_fbcsp.py,sha256=-sL6XCmCUZVhKKrC84-KWgwhWKQQvev1oNSmH_d6FA4,7499
57
+ braindecode/models/signal_jepa.py,sha256=0YI9thmiP3MRTf-cekewIHoXKjafuZqepLSsvHXN5Cc,37129
58
+ braindecode/models/sinc_shallow.py,sha256=Ilv8K1XhMGiRTBtQdq7L595i6cEFYOBe0_UDv-LqL7s,11907
59
+ braindecode/models/sleep_stager_blanco_2020.py,sha256=qPKMDLuv4J7et4dZHyTe-j0oB6ESYn9mA_aW7RMC-rU,6002
60
+ braindecode/models/sleep_stager_chambon_2018.py,sha256=62x2Rdjd5UZDX8YlnfAtdRCrjLsPvPpnUweGElZLdkw,5213
61
+ braindecode/models/sleep_stager_eldele_2021.py,sha256=-gY-cGmxQ2waA-6fwIvxYWQSodZQKPzXr7v3g3FwBt8,17593
62
+ braindecode/models/sparcnet.py,sha256=3lDsQzwq8r_Dg1HlrZiBmwx_ijCXDm2ngOfTneorBIk,12144
63
+ braindecode/models/summary.csv,sha256=l7HYYwv3Z69JRPVIhVq-wr_nC1J1KIz6IGw_zeRSk58,6110
64
+ braindecode/models/syncnet.py,sha256=nrWJC5ijCSWKVZyRn-dmOuc1t5vk2C6tx8U3U4j5d5Y,8362
65
+ braindecode/models/tcn.py,sha256=siazLYl3zOtD499UZFjQwqsYNOomMX6lGmXGxltYxWk,8170
66
+ braindecode/models/tidnet.py,sha256=k7Q0yAnEBmq1sqhsvoV4-g8wfYSUQ-C3iYxfLp5m8xQ,11805
67
+ braindecode/models/tsinception.py,sha256=E1jDXpGYiOddOFmeV-0esy-DHoCpS6LFygbDfwVcgSY,8864
68
+ braindecode/models/usleep.py,sha256=dFh3KiZITu13gMxcbPGoK4hq2ySDWzVSCQXkj1006w0,11605
69
+ braindecode/models/util.py,sha256=7he-Y5KpDYXjMhLbQXauJWslynM4FvbeYG9VT82zbHg,5387
70
+ braindecode/modules/__init__.py,sha256=cwH_l1R6Y6t3OV9qunh6UkPIWGH2JtMh9gGKxgMhvc8,911
71
+ braindecode/modules/activation.py,sha256=lTO2IjZWBDeXZ4ZVDgLmTDmxHdqyAny3Fsy07HY9tmQ,1466
72
+ braindecode/modules/attention.py,sha256=fsjruzqMdtPbcS6jbU5ux8xtHl0BVrKt4agyf2yNe_E,23966
73
+ braindecode/modules/blocks.py,sha256=QE34HBg7kmEj0z-8dQZ1jJErLRPcniGIorMTeIArpv4,3621
74
+ braindecode/modules/convolution.py,sha256=VAqJXj1Xfb7qlnjRAhH_fJT8qPcaAqy5FHu_sNEbkWw,8291
75
+ braindecode/modules/filter.py,sha256=Utjdnt2dxGXE7ibr778IhwwRBN3FfSu7lxB07aCbDdY,25158
76
+ braindecode/modules/layers.py,sha256=RL4O-kXgCBjVTe8TgA2t_o9fPvv4pv5Jr3wyRtH-XlU,3794
77
+ braindecode/modules/linear.py,sha256=r8bxoz43x5F382j5wqHF6DhZy6Hij9gUQzBz4ZYzqvI,1723
78
+ braindecode/modules/parametrization.py,sha256=sTvV21-sdpqpiY2PzwDebi7SeEvkFw8yDgA6OqJDo34,1310
79
+ braindecode/modules/stats.py,sha256=ETqZH6PPyYCss2PKBDNrO4uUeijR4bxvjCQCXjNJkH4,2398
80
+ braindecode/modules/util.py,sha256=5oKG2sfrn21MGAJ8BHxEBLbjC9agZDq-s56KZX4cijo,2622
81
+ braindecode/modules/wrapper.py,sha256=O2krRJKwhpRRbevT_a2cM80Ww355MjDtXK_T9xTA_nk,2453
82
+ braindecode/preprocessing/__init__.py,sha256=V0iwdzb6DzpUaCabA7I6HmOqXK_XvTbpP5HaEduSJ4s,776
83
+ braindecode/preprocessing/mne_preprocess.py,sha256=_Jczaitqbx16utsUOhnonEcoExf6jPsWNwVOVvoKFfU,2210
84
+ braindecode/preprocessing/preprocess.py,sha256=-9IKjb0THq36m54TK-YRzV18wIkxmVgTcGO2sEH6q98,17665
85
+ braindecode/preprocessing/windowers.py,sha256=6w6mOnroGWnV7tS23UagZZepswaxaL00S45Jr5AViRE,36551
86
+ braindecode/samplers/__init__.py,sha256=TLuO6gXv2WioJdX671MI_CHVSsOfbjnly1Xv9K3_WdA,452
87
+ braindecode/samplers/base.py,sha256=bDJArEyGZQuGUv6fkIms-u8--pY8z7YJIvr6iJEaNzE,15140
88
+ braindecode/samplers/ssl.py,sha256=C-FKopnbncN_-spQPCrgljY5Qds4fgTLr2TG3s_-QqU,9146
89
+ braindecode/training/__init__.py,sha256=sxtfI6MgxX3aP03EFc0wJYA37uULoL9SQyUao1Oxyn0,523
90
+ braindecode/training/callbacks.py,sha256=LqXqzJd6s3w0pvAKy9TEVTxWwVRyWNEu2uyWVsvb9RQ,839
91
+ braindecode/training/losses.py,sha256=EyVVZE_028G6WwrAtzLbrRfDLgsoKwLLhqIkOYBXNL4,3551
92
+ braindecode/training/scoring.py,sha256=tG7uCojIG3KIQZq3AymrdwlIJLlzbgsS0nBLUXQ-A8s,19062
93
+ braindecode/visualization/__init__.py,sha256=4EER_xHqZIDzEvmgUEm7K1bgNKpyZAIClR9ZCkMuY4M,240
94
+ braindecode/visualization/confusion_matrices.py,sha256=qIWMLEHow5CJ7PhGggD8mnD55Le6xhma9HSzt4R33fc,9509
95
+ braindecode/visualization/gradients.py,sha256=qAtXmuXkCDsWs8RMxvE6T9dz3uv_BhwTqhzkFFsEUDI,1948
96
+ braindecode-1.0.0.dist-info/licenses/LICENSE.txt,sha256=7rg7k6hyj8m9whQ7dpKbqnCssoOEx_Mbtqb4uSOjljE,1525
97
+ braindecode-1.0.0.dist-info/licenses/NOTICE.txt,sha256=sOxuTbalPxTM8H6VqtvGbXCt_BoOF7JevEYG_knqbm4,620
98
+ braindecode-1.0.0.dist-info/METADATA,sha256=h7UXT9Mpi-aJUWWsn6tuOrnn3pTaY9HX4D6e-idWSr8,6807
99
+ braindecode-1.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
100
+ braindecode-1.0.0.dist-info/top_level.txt,sha256=pHsWQmSy0uhIez62-HA9j0iaXKvSbUL39ifFRkFnChA,12
101
+ braindecode-1.0.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.3)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,6 +1,6 @@
1
1
  BSD 3-Clause License
2
2
 
3
- Copyright (c) 2017-2020 Braindecode Developers
3
+ Copyright (c) 2017-currently Braindecode Developers
4
4
  All rights reserved.
5
5
 
6
6
  Redistribution and use in source and binary forms, with or without modification,
@@ -0,0 +1,20 @@
1
+ # BRAINDECODE Notice
2
+
3
+ ## Licensed Components
4
+
5
+ ### BSD-3-Clause Licensed Files
6
+
7
+ All files within the `src/` directory are licensed under the BSD-3-Clause License.
8
+
9
+ ### CC BY-NC 4.0 Licensed Files
10
+
11
+ The following components are licensed under the Creative Commons Attribution-NonCommercial 4.0 International License:
12
+
13
+ - `braindecode/models/eegminer.py`
14
+
15
+ As well as class later imported into the `braindecode.models.module` named as GeneralizedGaussianFilter.
16
+
17
+ ## License Links
18
+
19
+ - [BSD-3-Clause License](https://opensource.org/licenses/BSD-3-Clause)
20
+ - [CC BY-NC 4.0 License](https://creativecommons.org/licenses/by-nc/4.0/)
@@ -1,9 +0,0 @@
1
- # Authors: Robin Schirrmeister <robintibor@gmail.com>
2
- #
3
- # License: BSD (3-clause)
4
-
5
- from ..datasets.mne import * # noqa: F401,F403
6
- from warnings import warn
7
-
8
- warn('datautil.mne module is deprecated and is now under '
9
- 'datasets.mne, please use from import braindecode.datasets.mne')
@@ -1,12 +0,0 @@
1
- # Authors: Robin Schirrmeister <robintibor@gmail.com>
2
- #
3
- # License: BSD (3-clause)
4
-
5
- # To be removed in future versions
6
-
7
- from ..preprocessing.preprocess import * # noqa: F401,F403
8
- from warnings import warn
9
-
10
- warn('datautil.preprocess module is deprecated and is now under '
11
- 'preprocessing.preprocess, please use from import '
12
- 'braindecode.preprocessing.preprocess')
@@ -1,6 +0,0 @@
1
- from warnings import warn
2
- from ..preprocessing.windowers import * # noqa: F401,F403
3
-
4
- warn('datautil.windowers module is deprecated and is now under '
5
- 'preprocessing.windowers, please use from import '
6
- 'braindecode.preprocessing.windowers')
@@ -1,9 +0,0 @@
1
- # Authors: Robin Schirrmeister <robintibor@gmail.com>
2
- #
3
- # License: BSD (3-clause)
4
-
5
- from warnings import warn
6
- from ..datasets.xy import * # noqa: F401,F403
7
-
8
- warn('datautil.xy module is deprecated and is now under '
9
- 'datasets.xy, please use from import braindecode.datasets.xy')