eegdash 0.4.1__py3-none-any.whl → 0.4.1.dev185__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 eegdash might be problematic. Click here for more details.

@@ -4,7 +4,7 @@ import inspect
4
4
  from collections.abc import Callable
5
5
 
6
6
  from . import extractors, feature_bank
7
- from .extractors import FeatureExtractor, MultivariateFeature, _get_underlying_func
7
+ from .extractors import _get_underlying_func
8
8
 
9
9
  __all__ = [
10
10
  "get_all_feature_extractors",
@@ -25,21 +25,24 @@ def get_feature_predecessors(feature_or_extractor: Callable) -> list:
25
25
  Parameters
26
26
  ----------
27
27
  feature_or_extractor : callable
28
- The feature function or :class:`FeatureExtractor` class to inspect.
28
+ The feature function or :class:`~eegdash.features.extractors.FeatureExtractor`
29
+ class to inspect.
29
30
 
30
31
  Returns
31
32
  -------
32
33
  list
33
34
  A nested list representing the dependency tree. For a simple linear
34
35
  chain, this will be a flat list from the specific feature up to the
35
- base `FeatureExtractor`. For multiple dependencies, it will contain
36
- tuples of sub-dependencies.
36
+ base :class:`~eegdash.features.extractors.FeatureExtractor`. For
37
+ multiple dependencies, it will contain tuples of sub-dependencies.
37
38
 
38
39
  """
39
40
  current = _get_underlying_func(feature_or_extractor)
40
- if current is FeatureExtractor:
41
+ if current is extractors.FeatureExtractor:
41
42
  return [current]
42
- predecessor = getattr(current, "parent_extractor_type", [FeatureExtractor])
43
+ predecessor = getattr(
44
+ current, "parent_extractor_type", [extractors.FeatureExtractor]
45
+ )
43
46
  if len(predecessor) == 1:
44
47
  return [current, *get_feature_predecessors(predecessor[0])]
45
48
  else:
@@ -50,7 +53,7 @@ def get_feature_predecessors(feature_or_extractor: Callable) -> list:
50
53
  return [current, tuple(predecessors)]
51
54
 
52
55
 
53
- def get_feature_kind(feature: Callable) -> MultivariateFeature:
56
+ def get_feature_kind(feature: Callable) -> extractors.MultivariateFeature:
54
57
  """Get the 'kind' of a feature function.
55
58
 
56
59
  The feature kind (e.g., univariate, bivariate) is typically attached by a
@@ -63,8 +66,8 @@ def get_feature_kind(feature: Callable) -> MultivariateFeature:
63
66
 
64
67
  Returns
65
68
  -------
66
- MultivariateFeature
67
- An instance of the feature kind (e.g., `UnivariateFeature()`).
69
+ :class:`~eegdash.features.extractors.MultivariateFeature`
70
+ An instance of the feature kind (e.g., ``UnivariateFeature()``).
68
71
 
69
72
  """
70
73
  return _get_underlying_func(feature).feature_kind
@@ -89,30 +92,30 @@ def get_all_features() -> list[tuple[str, Callable]]:
89
92
  return inspect.getmembers(feature_bank, isfeature)
90
93
 
91
94
 
92
- def get_all_feature_extractors() -> list[tuple[str, type[FeatureExtractor]]]:
93
- """Get a list of all available `FeatureExtractor` classes.
95
+ def get_all_feature_extractors() -> list[tuple[str, type[extractors.FeatureExtractor]]]:
96
+ """Get a list of all available :class:`~eegdash.features.extractors.FeatureExtractor` classes.
94
97
 
95
98
  Scans the `eegdash.features.feature_bank` module for all classes that
96
99
  subclass :class:`~eegdash.features.extractors.FeatureExtractor`.
97
100
 
98
101
  Returns
99
102
  -------
100
- list[tuple[str, type[FeatureExtractor]]]
103
+ list[tuple[str, type[eegdash.features.extractors.FeatureExtractor]]]
101
104
  A list of (name, class) tuples for all discovered feature extractors,
102
- including the base `FeatureExtractor` itself.
105
+ including the base :class:`~eegdash.features.extractors.FeatureExtractor` itself.
103
106
 
104
107
  """
105
108
 
106
109
  def isfeatureextractor(x):
107
- return inspect.isclass(x) and issubclass(x, FeatureExtractor)
110
+ return inspect.isclass(x) and issubclass(x, extractors.FeatureExtractor)
108
111
 
109
112
  return [
110
- ("FeatureExtractor", FeatureExtractor),
113
+ ("FeatureExtractor", extractors.FeatureExtractor),
111
114
  *inspect.getmembers(feature_bank, isfeatureextractor),
112
115
  ]
113
116
 
114
117
 
115
- def get_all_feature_kinds() -> list[tuple[str, type[MultivariateFeature]]]:
118
+ def get_all_feature_kinds() -> list[tuple[str, type[extractors.MultivariateFeature]]]:
116
119
  """Get a list of all available feature 'kind' classes.
117
120
 
118
121
  Scans the `eegdash.features.extractors` module for all classes that
@@ -120,12 +123,12 @@ def get_all_feature_kinds() -> list[tuple[str, type[MultivariateFeature]]]:
120
123
 
121
124
  Returns
122
125
  -------
123
- list[tuple[str, type[MultivariateFeature]]]
126
+ list[tuple[str, type[eegdash.features.extractors.MultivariateFeature]]]
124
127
  A list of (name, class) tuples for all discovered feature kinds.
125
128
 
126
129
  """
127
130
 
128
131
  def isfeaturekind(x):
129
- return inspect.isclass(x) and issubclass(x, MultivariateFeature)
132
+ return inspect.isclass(x) and issubclass(x, extractors.MultivariateFeature)
130
133
 
131
134
  return inspect.getmembers(extractors, isfeaturekind)
@@ -26,11 +26,13 @@ __all__ = [
26
26
  def load_features_concat_dataset(
27
27
  path: str | Path, ids_to_load: list[int] | None = None, n_jobs: int = 1
28
28
  ) -> FeaturesConcatDataset:
29
- """Load a stored `FeaturesConcatDataset` from a directory.
29
+ """Load a stored :class:`~eegdash.features.datasets.FeaturesConcatDataset` from a directory.
30
30
 
31
- This function reconstructs a :class:`FeaturesConcatDataset` by loading
32
- individual :class:`FeaturesDataset` instances from subdirectories within
33
- the given path. It uses joblib for parallel loading.
31
+ This function reconstructs a
32
+ :class:`~eegdash.features.datasets.FeaturesConcatDataset` by loading
33
+ individual :class:`~eegdash.features.datasets.FeaturesDataset` instances
34
+ from subdirectories within the given path. It uses joblib for parallel
35
+ loading.
34
36
 
35
37
  Parameters
36
38
  ----------
@@ -48,7 +50,8 @@ def load_features_concat_dataset(
48
50
  Returns
49
51
  -------
50
52
  eegdash.features.datasets.FeaturesConcatDataset
51
- A concatenated dataset containing the loaded `FeaturesDataset` instances.
53
+ A concatenated dataset containing the loaded
54
+ :class:`~eegdash.features.datasets.FeaturesDataset` instances.
52
55
 
53
56
  """
54
57
  # Make sure we always work with a pathlib.Path
@@ -65,15 +68,17 @@ def load_features_concat_dataset(
65
68
 
66
69
 
67
70
  def _load_parallel(path: Path, i: str) -> FeaturesDataset:
68
- """Load a single `FeaturesDataset` from its subdirectory.
71
+ """Load a single :class:`~eegdash.features.datasets.FeaturesDataset` from its subdirectory.
69
72
 
70
- This is a helper function for `load_features_concat_dataset` that handles
71
- the loading of one dataset's files (features, metadata, descriptions, etc.).
73
+ This is a helper function for
74
+ :func:`~eegdash.features.serialization.load_features_concat_dataset` that
75
+ handles the loading of one dataset's files (features, metadata, descriptions, etc.).
72
76
 
73
77
  Parameters
74
78
  ----------
75
79
  path : pathlib.Path
76
- The root directory of the saved `FeaturesConcatDataset`.
80
+ The root directory of the saved
81
+ :class:`~eegdash.features.datasets.FeaturesConcatDataset`.
77
82
  i : str
78
83
  The identifier of the dataset to load, corresponding to its
79
84
  subdirectory name.
eegdash/features/utils.py CHANGED
@@ -14,8 +14,8 @@ from braindecode.datasets.base import (
14
14
  WindowsDataset,
15
15
  )
16
16
 
17
+ from . import extractors
17
18
  from .datasets import FeaturesConcatDataset, FeaturesDataset
18
- from .extractors import FeatureExtractor
19
19
 
20
20
  __all__ = [
21
21
  "extract_features",
@@ -25,7 +25,7 @@ __all__ = [
25
25
 
26
26
  def _extract_features_from_windowsdataset(
27
27
  win_ds: EEGWindowsDataset | WindowsDataset,
28
- feature_extractor: FeatureExtractor,
28
+ feature_extractor: extractors.FeatureExtractor,
29
29
  batch_size: int = 512,
30
30
  ) -> FeaturesDataset:
31
31
  """Extract features from a single `WindowsDataset`.
@@ -38,14 +38,14 @@ def _extract_features_from_windowsdataset(
38
38
  ----------
39
39
  win_ds : EEGWindowsDataset or WindowsDataset
40
40
  The windowed dataset to extract features from.
41
- feature_extractor : FeatureExtractor
41
+ feature_extractor : ~eegdash.features.extractors.FeatureExtractor
42
42
  The feature extractor instance to apply.
43
43
  batch_size : int, default 512
44
44
  The number of windows to process in each batch.
45
45
 
46
46
  Returns
47
47
  -------
48
- FeaturesDataset
48
+ ~eegdash.features.datasets.FeaturesDataset
49
49
  A new dataset containing the extracted features and associated metadata.
50
50
 
51
51
  """
@@ -93,7 +93,7 @@ def _extract_features_from_windowsdataset(
93
93
 
94
94
  def extract_features(
95
95
  concat_dataset: BaseConcatDataset,
96
- features: FeatureExtractor | Dict[str, Callable] | List[Callable],
96
+ features: extractors.FeatureExtractor | Dict[str, Callable] | List[Callable],
97
97
  *,
98
98
  batch_size: int = 512,
99
99
  n_jobs: int = 1,
@@ -109,8 +109,9 @@ def extract_features(
109
109
  concat_dataset : BaseConcatDataset
110
110
  A concatenated dataset of `WindowsDataset` or `EEGWindowsDataset`
111
111
  instances.
112
- features : FeatureExtractor or dict or list
113
- The feature extractor(s) to apply. Can be a `FeatureExtractor`
112
+ features : ~eegdash.features.extractors.FeatureExtractor or dict or list
113
+ The feature extractor(s) to apply. Can be a
114
+ :class:`~eegdash.features.extractors.FeatureExtractor`
114
115
  instance, a dictionary of named feature functions, or a list of
115
116
  feature functions.
116
117
  batch_size : int, default 512
@@ -121,14 +122,14 @@ def extract_features(
121
122
 
122
123
  Returns
123
124
  -------
124
- FeaturesConcatDataset
125
+ ~eegdash.features.datasets.FeaturesConcatDataset
125
126
  A new concatenated dataset containing the extracted features.
126
127
 
127
128
  """
128
129
  if isinstance(features, list):
129
130
  features = dict(enumerate(features))
130
- if not isinstance(features, FeatureExtractor):
131
- features = FeatureExtractor(features)
131
+ if not isinstance(features, extractors.FeatureExtractor):
132
+ features = extractors.FeatureExtractor(features)
132
133
  feature_ds_list = list(
133
134
  tqdm(
134
135
  Parallel(n_jobs=n_jobs, return_as="generator")(
@@ -146,34 +147,35 @@ def extract_features(
146
147
 
147
148
  def fit_feature_extractors(
148
149
  concat_dataset: BaseConcatDataset,
149
- features: FeatureExtractor | Dict[str, Callable] | List[Callable],
150
+ features: extractors.FeatureExtractor | Dict[str, Callable] | List[Callable],
150
151
  batch_size: int = 8192,
151
- ) -> FeatureExtractor:
152
+ ) -> extractors.FeatureExtractor:
152
153
  """Fit trainable feature extractors on a dataset.
153
154
 
154
155
  If the provided feature extractor (or any of its sub-extractors) is
155
- trainable (i.e., subclasses `TrainableFeature`), this function iterates
156
- through the dataset to fit it.
156
+ trainable (i.e., subclasses
157
+ :class:`~eegdash.features.extractors.TrainableFeature`), this function
158
+ iterates through the dataset to fit it.
157
159
 
158
160
  Parameters
159
161
  ----------
160
162
  concat_dataset : BaseConcatDataset
161
163
  The dataset to use for fitting the feature extractors.
162
- features : FeatureExtractor or dict or list
164
+ features : ~eegdash.features.extractors.FeatureExtractor or dict or list
163
165
  The feature extractor(s) to fit.
164
166
  batch_size : int, default 8192
165
167
  The batch size to use when iterating through the dataset for fitting.
166
168
 
167
169
  Returns
168
170
  -------
169
- FeatureExtractor
171
+ ~eegdash.features.extractors.FeatureExtractor
170
172
  The fitted feature extractor.
171
173
 
172
174
  """
173
175
  if isinstance(features, list):
174
176
  features = dict(enumerate(features))
175
- if not isinstance(features, FeatureExtractor):
176
- features = FeatureExtractor(features)
177
+ if not isinstance(features, extractors.FeatureExtractor):
178
+ features = extractors.FeatureExtractor(features)
177
179
  if not features._is_trainable:
178
180
  return features
179
181
  features.clear()
eegdash/paths.py CHANGED
@@ -22,11 +22,12 @@ def get_default_cache_dir() -> Path:
22
22
 
23
23
  The function determines the cache directory based on the following
24
24
  priority order:
25
- 1. The path specified by the ``EEGDASH_CACHE_DIR`` environment variable.
26
- 2. The path specified by the ``MNE_DATA`` configuration in the MNE-Python
27
- config file.
28
- 3. A hidden directory named ``.eegdash_cache`` in the current working
29
- directory.
25
+
26
+ 1. The path specified by the ``EEGDASH_CACHE_DIR`` environment variable.
27
+ 2. The path specified by the ``MNE_DATA`` configuration in the MNE-Python
28
+ config file.
29
+ 3. A hidden directory named ``.eegdash_cache`` in the current working
30
+ directory.
30
31
 
31
32
  Returns
32
33
  -------
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eegdash
3
- Version: 0.4.1
3
+ Version: 0.4.1.dev185
4
4
  Summary: EEG data for machine learning
5
5
  Author-email: Young Truong <dt.young112@gmail.com>, Arnaud Delorme <adelorme@gmail.com>, Aviv Dotan <avivd220@gmail.com>, Oren Shriki <oren70@gmail.com>, Bruno Aristimunha <b.aristimunha@gmail.com>
6
6
  License-Expression: GPL-3.0-only
@@ -60,6 +60,7 @@ Requires-Dist: lightgbm; extra == "docs"
60
60
  Requires-Dist: plotly; extra == "docs"
61
61
  Requires-Dist: nbformat; extra == "docs"
62
62
  Requires-Dist: graphviz; extra == "docs"
63
+ Requires-Dist: neato; extra == "docs"
63
64
  Provides-Extra: digestion
64
65
  Requires-Dist: pybids; extra == "digestion"
65
66
  Requires-Dist: python-dotenv; extra == "digestion"
@@ -1,24 +1,25 @@
1
- eegdash/__init__.py,sha256=EmkUVFpceFXHYEKj0yDMa8TMCc1KWWSYs02P4ItZrbA,697
2
- eegdash/api.py,sha256=CK1sYV401ZAcJ22YVcvZdv3BnG7GpPvf-C9iJDCLNCY,38467
1
+ eegdash/__init__.py,sha256=GEDA8-xE1JPDzIRGN6fmVpGsBOFd2_uNrnAxp-UuN6w,704
2
+ eegdash/api.py,sha256=saCl7_9tvblPVeTWZphw8fRXW4A2t1t2JBBp-RDvq1M,19632
3
3
  eegdash/bids_eeg_metadata.py,sha256=kEmFUe07tivkuIoC5T-YwfO4QQYJBxuc769ZBV1UCKo,16682
4
4
  eegdash/const.py,sha256=9WMetN7YMQJbkN2PhzItxtVRZ4VBXLP82vFu9pY6xok,9066
5
- eegdash/data_utils.py,sha256=t7m00gwfST3MlOFmGwEr2LNPo-fPbQ1WFwC6y8XW7yw,26119
6
5
  eegdash/downloader.py,sha256=Z-9EEJildqJxIihwdtXc_h9kzCkuF9LWIwQEfyG9Huw,6030
7
6
  eegdash/logging.py,sha256=OQ4jMtwv1h-gzjxmr3PCpcsKi5-3Nhd3r9PJ4UN7oQI,1467
8
7
  eegdash/mongodb.py,sha256=9FJDeEebOD5RzNYfAf1lhr0R-pECAlnug6Sjhd9_oUw,3469
9
- eegdash/paths.py,sha256=dKaDlF87q47KwP-5arAFwx83i5IwGgmEfPfNauEtkds,1499
8
+ eegdash/paths.py,sha256=iXzBUindjIwgkf2k0Phm2InChOfPZNGilQmGwJ8zNO0,1507
10
9
  eegdash/utils.py,sha256=u_fQ8DiA1b7dVLzwzZBhm8H-LUk6dga54WyqbbqYEJ4,1282
11
- eegdash/dataset/__init__.py,sha256=HKDfV2DHBv63BqYLBWDMvU8jbFNRC7DqQbxL7RG1DKQ,863
12
- eegdash/dataset/dataset.py,sha256=DnR6LoirPNV45MECq42MNtIPyhL7DTFuwPWavVWZmmA,8137
10
+ eegdash/dataset/__init__.py,sha256=EXmCtcIWz2_iq7-04AzOPmOxfv1hvUGnrSRgu_Je800,975
11
+ eegdash/dataset/base.py,sha256=dHCiUtoZddflLpUD-q2yIDImMfcIVZmTuvRRJflVS8s,11718
12
+ eegdash/dataset/bids_dataset.py,sha256=577D_kqig4xmW_fYz1VbaUbGWPquL33eT97ge_CbXpQ,14919
13
+ eegdash/dataset/dataset.py,sha256=IDAGg5qDeh1R48nFMiyG6_9CxenS2KK56VeuvM_w5tM,27593
13
14
  eegdash/dataset/dataset_summary.csv,sha256=YJX-BitOyo-5nsHBd3ECIY1u7lFBjMQAFfCUPLYEgpo,25289
14
15
  eegdash/dataset/registry.py,sha256=5TOCWalA0RV7omRoYS0OzdcSaOTvXvqos74_Vj2jv0M,9127
15
16
  eegdash/features/__init__.py,sha256=BXNhjvL4_SSFAY1lcP9nyGpkbJNtoOMH4AHlF6OyABo,4078
16
- eegdash/features/datasets.py,sha256=-Y-CxBypJu3dHyNDLFKFIo-zIi4qEInahZTgJslnrVQ,24636
17
- eegdash/features/decorators.py,sha256=VOCeL6rFa8wqkRJRnecWaTqdBW2B9MO724vGGk1AkGo,3965
17
+ eegdash/features/datasets.py,sha256=79Xey6SouPHMKybF78madVl5i7P0f03jnostBV6Dr7M,24880
18
+ eegdash/features/decorators.py,sha256=Gvk-5VtqatpH7BBVVV3pcz1KJKygd-ZU8mniR_Tpvlw,4052
18
19
  eegdash/features/extractors.py,sha256=R4csU3jj95xndtWI1VuMKoKi26xprzmuOp9wcy9iVzI,11937
19
- eegdash/features/inspect.py,sha256=XYuEDkiwNhEFYS0a0auyn8E96WvMaPrpNn4nMRk2foM,4069
20
- eegdash/features/serialization.py,sha256=Um5fseiyk7SXmXoSLaaVRl2-0a6iAiRLm5rAmqdYfpg,3938
21
- eegdash/features/utils.py,sha256=DiutW7SOVU0pnkRTKvWpdca0RW4UCJD6JvHGDNJPjXk,6161
20
+ eegdash/features/inspect.py,sha256=GpNV4708XPn4LXl5BXy8e0GNr_DSrojxjAT9c7POxqk,4373
21
+ eegdash/features/serialization.py,sha256=f981K8DcfaLZ0q98IBrXeAbMHnPmKBbp7cFiXZnjezw,4194
22
+ eegdash/features/utils.py,sha256=SuvPE6N_ccm-Ar4g-1dgVj1qaW2bV9hNQivtz946hlY,6487
22
23
  eegdash/features/feature_bank/__init__.py,sha256=YsMXLC1FEtHL3IEw9pYw1fc5IY0x_hr2qWQowI5gZj8,2991
23
24
  eegdash/features/feature_bank/complexity.py,sha256=eOLN0X_xaS15ZpLPDQcychuwjL459-FqZKYfOG51z-g,3366
24
25
  eegdash/features/feature_bank/connectivity.py,sha256=bQ6KlxWm5GNpCS9ypLqBUr2L171Yq7wpBQT2tRQKTZ4,2159
@@ -30,8 +31,8 @@ eegdash/features/feature_bank/utils.py,sha256=zCdkfDMLWJhPjBqb5Xz0jLKg8gm3qQDY1G
30
31
  eegdash/hbn/__init__.py,sha256=hsI5pmIuYDzr--aE5UiToO-P9XL5fVRKahZzdsAodro,794
31
32
  eegdash/hbn/preprocessing.py,sha256=xp0HBz8WGhLI5c2Zkk4QiVUzGoIZep8YypnHNZsUJ4o,3800
32
33
  eegdash/hbn/windows.py,sha256=Z_fhG3kaHd5MAPg60FwFnxMJay8EzacXytUaCsOENGc,14408
33
- eegdash-0.4.1.dist-info/licenses/LICENSE,sha256=asisR-xupy_NrQBFXnx6yqXeZcYWLvbAaiETl25iXT0,931
34
- eegdash-0.4.1.dist-info/METADATA,sha256=2bAo2XqxBWJS3qR8b4knurNH6KBgXYMKbSUqHAn5h6o,6835
35
- eegdash-0.4.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
36
- eegdash-0.4.1.dist-info/top_level.txt,sha256=zavO69HQ6MyZM0aQMR2zUS6TAFc7bnN5GEpDpOpFZzU,8
37
- eegdash-0.4.1.dist-info/RECORD,,
34
+ eegdash-0.4.1.dev185.dist-info/licenses/LICENSE,sha256=asisR-xupy_NrQBFXnx6yqXeZcYWLvbAaiETl25iXT0,931
35
+ eegdash-0.4.1.dev185.dist-info/METADATA,sha256=kprps0odUjO5HR9uFhU6L1GCUFf69AqfX91lSh5ojkM,6880
36
+ eegdash-0.4.1.dev185.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
37
+ eegdash-0.4.1.dev185.dist-info/top_level.txt,sha256=zavO69HQ6MyZM0aQMR2zUS6TAFc7bnN5GEpDpOpFZzU,8
38
+ eegdash-0.4.1.dev185.dist-info/RECORD,,