eegdash 0.3.3.dev61__tar.gz → 0.3.3.dev65__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.

Potentially problematic release.


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

Files changed (41) hide show
  1. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/PKG-INFO +1 -1
  2. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/__init__.py +3 -1
  3. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/dataset.py +13 -0
  4. eegdash-0.3.3.dev65/eegdash/registry.py +72 -0
  5. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash.egg-info/PKG-INFO +1 -1
  6. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash.egg-info/SOURCES.txt +2 -0
  7. eegdash-0.3.3.dev65/tests/test_dataset_registration.py +33 -0
  8. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/LICENSE +0 -0
  9. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/README.md +0 -0
  10. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/api.py +0 -0
  11. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/data_config.py +0 -0
  12. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/data_utils.py +0 -0
  13. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/features/__init__.py +0 -0
  14. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/features/datasets.py +0 -0
  15. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/features/decorators.py +0 -0
  16. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/features/extractors.py +0 -0
  17. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/features/feature_bank/__init__.py +0 -0
  18. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/features/feature_bank/complexity.py +0 -0
  19. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/features/feature_bank/connectivity.py +0 -0
  20. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/features/feature_bank/csp.py +0 -0
  21. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/features/feature_bank/dimensionality.py +0 -0
  22. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/features/feature_bank/signal.py +0 -0
  23. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/features/feature_bank/spectral.py +0 -0
  24. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/features/feature_bank/utils.py +0 -0
  25. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/features/inspect.py +0 -0
  26. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/features/serialization.py +0 -0
  27. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/features/utils.py +0 -0
  28. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/mongodb.py +0 -0
  29. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/preprocessing.py +0 -0
  30. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash/utils.py +0 -0
  31. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash.egg-info/dependency_links.txt +0 -0
  32. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash.egg-info/requires.txt +0 -0
  33. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/eegdash.egg-info/top_level.txt +0 -0
  34. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/pyproject.toml +0 -0
  35. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/setup.cfg +0 -0
  36. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/tests/test_correctness.py +0 -0
  37. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/tests/test_dataset.py +0 -0
  38. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/tests/test_eegdash.py +0 -0
  39. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/tests/test_functional.py +0 -0
  40. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/tests/test_init.py +0 -0
  41. {eegdash-0.3.3.dev61 → eegdash-0.3.3.dev65}/tests/test_mongo_connection.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eegdash
3
- Version: 0.3.3.dev61
3
+ Version: 0.3.3.dev65
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: GNU General Public License
@@ -4,5 +4,7 @@ from .utils import __init__mongo_client
4
4
 
5
5
  __init__mongo_client()
6
6
 
7
+
7
8
  __all__ = ["EEGDash", "EEGDashDataset", "EEGChallengeDataset"]
8
- __version__ = "0.3.3.dev61"
9
+
10
+ __version__ = "0.3.3.dev65"
@@ -1,4 +1,7 @@
1
+ from pathlib import Path
2
+
1
3
  from .api import EEGDashDataset
4
+ from .registry import register_openneuro_datasets
2
5
 
3
6
  RELEASE_TO_OPENNEURO_DATASET_MAP = {
4
7
  "R11": "ds005516",
@@ -67,3 +70,13 @@ class EEGChallengeDataset(EEGDashDataset):
67
70
  s3_bucket=f"{s3_bucket}/{release}_L100",
68
71
  **kwargs,
69
72
  )
73
+
74
+
75
+ registered_classes = register_openneuro_datasets(
76
+ summary_file=Path(__file__).with_name("dataset_summary.csv"),
77
+ base_class=EEGDashDataset,
78
+ namespace=globals(),
79
+ )
80
+
81
+
82
+ __all__ = ["EEGChallengeDataset"] + list(registered_classes.keys())
@@ -0,0 +1,72 @@
1
+ from __future__ import annotations
2
+
3
+ import csv
4
+ from pathlib import Path
5
+ from typing import Any, Dict
6
+
7
+
8
+ def register_openneuro_datasets(
9
+ summary_file: str | Path,
10
+ *,
11
+ base_class=None,
12
+ namespace: Dict[str, Any] | None = None,
13
+ ) -> Dict[str, type]:
14
+ """Dynamically create dataset classes from a summary file.
15
+
16
+ Parameters
17
+ ----------
18
+ summary_file : str | Path
19
+ Path to a CSV file where each line starts with the dataset identifier.
20
+ base_class : type | None
21
+ Base class for the generated datasets. If ``None``, defaults to
22
+ :class:`eegdash.api.EEGDashDataset`.
23
+ namespace : dict | None
24
+ Mapping where the new classes will be registered. Defaults to the
25
+ module's global namespace.
26
+
27
+ Returns
28
+ -------
29
+ dict
30
+ Mapping from class names to the generated classes.
31
+
32
+ """
33
+ if base_class is None:
34
+ from .api import EEGDashDataset as base_class # lazy import
35
+
36
+ summary_path = Path(summary_file)
37
+ namespace = namespace if namespace is not None else globals()
38
+ registered: Dict[str, type] = {}
39
+
40
+ with summary_path.open() as f:
41
+ reader = csv.reader(f)
42
+ for row in reader:
43
+ if not row:
44
+ continue
45
+ dataset_id = row[0].strip()
46
+ if not dataset_id or dataset_id.startswith("#"):
47
+ continue
48
+ class_name = dataset_id.upper()
49
+
50
+ def __init__(
51
+ self,
52
+ cache_dir: str,
53
+ query: dict | None = None,
54
+ s3_bucket: str | None = None,
55
+ **kwargs,
56
+ ):
57
+ q = {"dataset": self._dataset}
58
+ if query:
59
+ q.update(query)
60
+ super().__init__(
61
+ query=q, cache_dir=cache_dir, s3_bucket=s3_bucket, **kwargs
62
+ )
63
+
64
+ cls = type(
65
+ class_name,
66
+ (base_class,),
67
+ {"_dataset": dataset_id, "__init__": __init__},
68
+ )
69
+ namespace[class_name] = cls
70
+ registered[class_name] = cls
71
+
72
+ return registered
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eegdash
3
- Version: 0.3.3.dev61
3
+ Version: 0.3.3.dev65
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: GNU General Public License
@@ -8,6 +8,7 @@ eegdash/data_utils.py
8
8
  eegdash/dataset.py
9
9
  eegdash/mongodb.py
10
10
  eegdash/preprocessing.py
11
+ eegdash/registry.py
11
12
  eegdash/utils.py
12
13
  eegdash.egg-info/PKG-INFO
13
14
  eegdash.egg-info/SOURCES.txt
@@ -31,6 +32,7 @@ eegdash/features/feature_bank/spectral.py
31
32
  eegdash/features/feature_bank/utils.py
32
33
  tests/test_correctness.py
33
34
  tests/test_dataset.py
35
+ tests/test_dataset_registration.py
34
36
  tests/test_eegdash.py
35
37
  tests/test_functional.py
36
38
  tests/test_init.py
@@ -0,0 +1,33 @@
1
+ import importlib.util
2
+ from pathlib import Path
3
+
4
+
5
+ class DummyBase:
6
+ pass
7
+
8
+
9
+ def test_register_openneuro_datasets(tmp_path: Path):
10
+ module_path = Path(__file__).resolve().parents[1] / "eegdash" / "registry.py"
11
+ spec = importlib.util.spec_from_file_location("registry", module_path)
12
+ registry = importlib.util.module_from_spec(spec)
13
+ spec.loader.exec_module(registry)
14
+
15
+ summary = tmp_path / "dataset_summary.csv"
16
+ summary.write_text(
17
+ "\n".join(
18
+ [
19
+ "ds002718,18,18,1,74,250,14.844",
20
+ "ds000001,1,1,1,1,1,1",
21
+ ]
22
+ )
23
+ )
24
+ namespace = {}
25
+ registered = registry.register_openneuro_datasets(
26
+ summary, namespace=namespace, base_class=DummyBase
27
+ )
28
+
29
+ assert set(registered) == {"DS002718", "DS000001"}
30
+ ds_class = registered["DS002718"]
31
+ assert ds_class is namespace["DS002718"]
32
+ assert issubclass(ds_class, DummyBase)
33
+ assert ds_class._dataset == "ds002718"
File without changes
File without changes
File without changes