junifer 0.0.6.dev51__py3-none-any.whl → 0.0.6.dev88__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.
Files changed (92) hide show
  1. junifer/__init__.py +2 -33
  2. junifer/__init__.pyi +33 -0
  3. junifer/_version.py +2 -2
  4. junifer/api/__init__.py +2 -3
  5. junifer/api/__init__.pyi +4 -0
  6. junifer/api/functions.py +1 -2
  7. junifer/api/py.typed +0 -0
  8. junifer/api/queue_context/__init__.py +2 -4
  9. junifer/api/queue_context/__init__.pyi +5 -0
  10. junifer/api/queue_context/py.typed +0 -0
  11. junifer/cli/__init__.py +4 -3
  12. junifer/cli/__init__.pyi +3 -0
  13. junifer/cli/cli.py +17 -0
  14. junifer/cli/py.typed +0 -0
  15. junifer/cli/tests/test_cli_utils.py +2 -0
  16. junifer/configs/juseless/__init__.py +2 -2
  17. junifer/configs/juseless/__init__.pyi +3 -0
  18. junifer/configs/juseless/datagrabbers/__init__.py +2 -12
  19. junifer/configs/juseless/datagrabbers/__init__.pyi +13 -0
  20. junifer/configs/juseless/datagrabbers/py.typed +0 -0
  21. junifer/configs/juseless/py.typed +0 -0
  22. junifer/data/__init__.py +2 -42
  23. junifer/data/__init__.pyi +43 -0
  24. junifer/data/py.typed +0 -0
  25. junifer/datagrabber/__init__.py +2 -26
  26. junifer/datagrabber/__init__.pyi +27 -0
  27. junifer/datagrabber/aomic/__init__.py +2 -4
  28. junifer/datagrabber/aomic/__init__.pyi +5 -0
  29. junifer/datagrabber/aomic/py.typed +0 -0
  30. junifer/datagrabber/hcp1200/__init__.py +2 -3
  31. junifer/datagrabber/hcp1200/__init__.pyi +4 -0
  32. junifer/datagrabber/hcp1200/py.typed +0 -0
  33. junifer/datagrabber/py.typed +0 -0
  34. junifer/datareader/__init__.py +2 -2
  35. junifer/datareader/__init__.pyi +3 -0
  36. junifer/datareader/py.typed +0 -0
  37. junifer/external/nilearn/__init__.py +2 -3
  38. junifer/external/nilearn/__init__.pyi +4 -0
  39. junifer/external/nilearn/py.typed +0 -0
  40. junifer/markers/__init__.py +2 -38
  41. junifer/markers/__init__.pyi +37 -0
  42. junifer/markers/complexity/__init__.py +2 -18
  43. junifer/markers/complexity/__init__.pyi +17 -0
  44. junifer/markers/complexity/py.typed +0 -0
  45. junifer/markers/falff/__init__.py +2 -3
  46. junifer/markers/falff/__init__.pyi +4 -0
  47. junifer/markers/falff/py.typed +0 -0
  48. junifer/markers/functional_connectivity/__init__.py +2 -12
  49. junifer/markers/functional_connectivity/__init__.pyi +13 -0
  50. junifer/markers/functional_connectivity/py.typed +0 -0
  51. junifer/markers/py.typed +0 -0
  52. junifer/markers/reho/__init__.py +2 -3
  53. junifer/markers/reho/__init__.pyi +4 -0
  54. junifer/markers/reho/py.typed +0 -0
  55. junifer/markers/temporal_snr/__init__.py +2 -3
  56. junifer/markers/temporal_snr/__init__.pyi +4 -0
  57. junifer/markers/temporal_snr/py.typed +0 -0
  58. junifer/pipeline/__init__.py +2 -10
  59. junifer/pipeline/__init__.pyi +13 -0
  60. junifer/{markers/collection.py → pipeline/marker_collection.py} +7 -7
  61. junifer/pipeline/py.typed +0 -0
  62. junifer/pipeline/registry.py +70 -2
  63. junifer/{markers/tests/test_collection.py → pipeline/tests/test_marker_collection.py} +2 -3
  64. junifer/preprocess/__init__.py +2 -10
  65. junifer/preprocess/__init__.pyi +11 -0
  66. junifer/preprocess/confounds/__init__.py +2 -2
  67. junifer/preprocess/confounds/__init__.pyi +3 -0
  68. junifer/preprocess/confounds/py.typed +0 -0
  69. junifer/preprocess/py.typed +0 -0
  70. junifer/preprocess/smoothing/__init__.py +2 -2
  71. junifer/preprocess/smoothing/__init__.pyi +3 -0
  72. junifer/preprocess/smoothing/py.typed +0 -0
  73. junifer/preprocess/warping/__init__.py +2 -2
  74. junifer/preprocess/warping/__init__.pyi +3 -0
  75. junifer/preprocess/warping/py.typed +0 -0
  76. junifer/py.typed +0 -0
  77. junifer/storage/__init__.py +2 -10
  78. junifer/storage/__init__.pyi +11 -0
  79. junifer/storage/py.typed +0 -0
  80. junifer/testing/__init__.py +2 -3
  81. junifer/testing/__init__.pyi +4 -0
  82. junifer/testing/py.typed +0 -0
  83. junifer/utils/__init__.py +2 -14
  84. junifer/utils/__init__.pyi +15 -0
  85. junifer/utils/py.typed +0 -0
  86. {junifer-0.0.6.dev51.dist-info → junifer-0.0.6.dev88.dist-info}/METADATA +2 -1
  87. {junifer-0.0.6.dev51.dist-info → junifer-0.0.6.dev88.dist-info}/RECORD +92 -40
  88. {junifer-0.0.6.dev51.dist-info → junifer-0.0.6.dev88.dist-info}/AUTHORS.rst +0 -0
  89. {junifer-0.0.6.dev51.dist-info → junifer-0.0.6.dev88.dist-info}/LICENSE.md +0 -0
  90. {junifer-0.0.6.dev51.dist-info → junifer-0.0.6.dev88.dist-info}/WHEEL +0 -0
  91. {junifer-0.0.6.dev51.dist-info → junifer-0.0.6.dev88.dist-info}/entry_points.txt +0 -0
  92. {junifer-0.0.6.dev51.dist-info → junifer-0.0.6.dev88.dist-info}/top_level.txt +0 -0
@@ -3,17 +3,7 @@
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
4
  # License: AGPL
5
5
 
6
- from .functional_connectivity_parcels import FunctionalConnectivityParcels
7
- from .functional_connectivity_spheres import FunctionalConnectivitySpheres
8
- from .crossparcellation_functional_connectivity import CrossParcellationFC
9
- from .edge_functional_connectivity_parcels import EdgeCentricFCParcels
10
- from .edge_functional_connectivity_spheres import EdgeCentricFCSpheres
6
+ import lazy_loader as lazy
11
7
 
12
8
 
13
- __all__ = [
14
- "FunctionalConnectivityParcels",
15
- "FunctionalConnectivitySpheres",
16
- "CrossParcellationFC",
17
- "EdgeCentricFCParcels",
18
- "EdgeCentricFCSpheres",
19
- ]
9
+ __getattr__, __dir__, __all__ = lazy.attach_stub(__name__, __file__)
@@ -0,0 +1,13 @@
1
+ __all__ = [
2
+ "FunctionalConnectivityParcels",
3
+ "FunctionalConnectivitySpheres",
4
+ "CrossParcellationFC",
5
+ "EdgeCentricFCParcels",
6
+ "EdgeCentricFCSpheres",
7
+ ]
8
+
9
+ from .functional_connectivity_parcels import FunctionalConnectivityParcels
10
+ from .functional_connectivity_spheres import FunctionalConnectivitySpheres
11
+ from .crossparcellation_functional_connectivity import CrossParcellationFC
12
+ from .edge_functional_connectivity_parcels import EdgeCentricFCParcels
13
+ from .edge_functional_connectivity_spheres import EdgeCentricFCSpheres
File without changes
File without changes
@@ -3,8 +3,7 @@
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
4
  # License: AGPL
5
5
 
6
- from .reho_parcels import ReHoParcels
7
- from .reho_spheres import ReHoSpheres
6
+ import lazy_loader as lazy
8
7
 
9
8
 
10
- __all__ = ["ReHoParcels", "ReHoSpheres"]
9
+ __getattr__, __dir__, __all__ = lazy.attach_stub(__name__, __file__)
@@ -0,0 +1,4 @@
1
+ __all__ = ["ReHoParcels", "ReHoSpheres"]
2
+
3
+ from .reho_parcels import ReHoParcels
4
+ from .reho_spheres import ReHoSpheres
File without changes
@@ -3,8 +3,7 @@
3
3
  # Authors: Leonard Sasse <l.sasse@fz-juelich.de>
4
4
  # License: AGPL
5
5
 
6
- from .temporal_snr_parcels import TemporalSNRParcels
7
- from .temporal_snr_spheres import TemporalSNRSpheres
6
+ import lazy_loader as lazy
8
7
 
9
8
 
10
- __all__ = ["TemporalSNRParcels", "TemporalSNRSpheres"]
9
+ __getattr__, __dir__, __all__ = lazy.attach_stub(__name__, __file__)
@@ -0,0 +1,4 @@
1
+ __all__ = ["TemporalSNRParcels", "TemporalSNRSpheres"]
2
+
3
+ from .temporal_snr_parcels import TemporalSNRParcels
4
+ from .temporal_snr_spheres import TemporalSNRSpheres
File without changes
@@ -3,15 +3,7 @@
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
4
  # License: AGPL
5
5
 
6
- from . import registry
7
- from .pipeline_step_mixin import PipelineStepMixin
8
- from .update_meta_mixin import UpdateMetaMixin
9
- from .workdir_manager import WorkDirManager
6
+ import lazy_loader as lazy
10
7
 
11
8
 
12
- __all__ = [
13
- "registry",
14
- "PipelineStepMixin",
15
- "UpdateMetaMixin",
16
- "WorkDirManager",
17
- ]
9
+ __getattr__, __dir__, __all__ = lazy.attach_stub(__name__, __file__)
@@ -0,0 +1,13 @@
1
+ __all__ = [
2
+ "registry",
3
+ "PipelineStepMixin",
4
+ "UpdateMetaMixin",
5
+ "WorkDirManager",
6
+ "MarkerCollection",
7
+ ]
8
+
9
+ from . import registry
10
+ from .pipeline_step_mixin import PipelineStepMixin
11
+ from .update_meta_mixin import UpdateMetaMixin
12
+ from .workdir_manager import WorkDirManager
13
+ from .marker_collection import MarkerCollection
@@ -7,16 +7,16 @@
7
7
  from collections import Counter
8
8
  from typing import TYPE_CHECKING, Dict, List, Optional
9
9
 
10
- from ..datareader.default import DefaultDataReader
11
- from ..markers.base import BaseMarker
10
+ from ..datareader import DefaultDataReader
12
11
  from ..pipeline import PipelineStepMixin, WorkDirManager
13
- from ..preprocess.base import BasePreprocessor
14
- from ..storage.base import BaseFeatureStorage
15
12
  from ..utils import logger, raise_error
16
13
 
17
14
 
18
15
  if TYPE_CHECKING:
19
16
  from junifer.datagrabber import BaseDataGrabber
17
+ from junifer.markers import BaseMarker
18
+ from junifer.preprocess import BasePreprocessor
19
+ from junifer.storage import BaseFeatureStorage
20
20
 
21
21
 
22
22
  __all__ = ["MarkerCollection"]
@@ -45,10 +45,10 @@ class MarkerCollection:
45
45
 
46
46
  def __init__(
47
47
  self,
48
- markers: List[BaseMarker],
48
+ markers: List["BaseMarker"],
49
49
  datareader: Optional[PipelineStepMixin] = None,
50
- preprocessors: Optional[List[BasePreprocessor]] = None,
51
- storage: Optional[BaseFeatureStorage] = None,
50
+ preprocessors: Optional[List["BasePreprocessor"]] = None,
51
+ storage: Optional["BaseFeatureStorage"] = None,
52
52
  ):
53
53
  # Check that the markers have different names
54
54
  marker_names = [m.name for m in markers]
File without changes
@@ -5,6 +5,7 @@
5
5
  # Synchon Mandal <s.mandal@fz-juelich.de>
6
6
  # License: AGPL
7
7
 
8
+ import importlib
8
9
  from typing import TYPE_CHECKING, Dict, List, Optional, Union
9
10
 
10
11
  from ..utils.logging import logger, raise_error
@@ -28,8 +29,64 @@ _VALID_STEPS: List[str] = [
28
29
  "storage",
29
30
  ]
30
31
 
32
+ # Step to sub-package mapping
33
+ _STEP_TO_SUBPKG_MAPPINGS = {
34
+ "datagrabber": "datagrabber",
35
+ "datareader": "datareader",
36
+ "preprocessing": "preprocess",
37
+ "marker": "markers",
38
+ "storage": "storage",
39
+ }
40
+
31
41
  # Define registry for valid steps
32
- _REGISTRY: Dict[str, Dict[str, type]] = {x: {} for x in _VALID_STEPS}
42
+ _REGISTRY: Dict[str, Dict[str, Union[str, type]]] = {
43
+ "datagrabber": {
44
+ "HCP1200": "HCP1200",
45
+ "BaseDataGrabber": "BaseDataGrabber",
46
+ "DataladAOMICID1000": "DataladAOMICID1000",
47
+ "DataladAOMICPIOP1": "DataladAOMICPIOP1",
48
+ "DataladAOMICPIOP2": "DataladAOMICPIOP2",
49
+ "DataladDataGrabber": "DataladDataGrabber",
50
+ "DataladHCP1200": "DataladHCP1200",
51
+ "DMCC13Benchmark": "DMCC13Benchmark",
52
+ "MultipleDataGrabber": "MultipleDataGrabber",
53
+ "PatternDataGrabber": "PatternDataGrabber",
54
+ "PatternDataladDataGrabber": "PatternDataladDataGrabber",
55
+ },
56
+ "datareader": {
57
+ "DefaultDataReader": "DefaultDataReader",
58
+ },
59
+ "preprocessing": {
60
+ "BasePreprocessor": "BasePreprocessor",
61
+ "Smoothing": "Smoothing",
62
+ "SpaceWarper": "SpaceWarper",
63
+ "fMRIPrepConfoundRemove": "fMRIPrepConfoundRemove",
64
+ },
65
+ "marker": {
66
+ "ALFFParcels": "ALFFParcels",
67
+ "ALFFSpheres": "ALFFSpheres",
68
+ "BaseMarker": "BaseMarker",
69
+ "BrainPrint": "BrainPrint",
70
+ "CrossParcellationFC": "CrossParcellationFC",
71
+ "EdgeCentricFCParcels": "EdgeCentricFCParcels",
72
+ "EdgeCentricFCSpheres": "EdgeCentricFCSpheres",
73
+ "FunctionalConnectivityParcels": "FunctionalConnectivityParcels",
74
+ "FunctionalConnectivitySpheres": "FunctionalConnectivitySpheres",
75
+ "ParcelAggregation": "ParcelAggregation",
76
+ "ReHoParcels": "ReHoParcels",
77
+ "ReHoSpheres": "ReHoSpheres",
78
+ "RSSETSMarker": "RSSETSMarker",
79
+ "SphereAggregation": "SphereAggregation",
80
+ "TemporalSNRParcels": "TemporalSNRParcels",
81
+ "TemporalSNRSpheres": "TemporalSNRSpheres",
82
+ },
83
+ "storage": {
84
+ "BaseFeatureStorage": "BaseFeatureStorage",
85
+ "HDF5FeatureStorage": "HDF5FeatureStorage",
86
+ "PandasBaseFeatureStorage": "PandasBaseFeatureStorage",
87
+ "SQLiteFeatureStorage": "SQLiteFeatureStorage",
88
+ },
89
+ }
33
90
 
34
91
 
35
92
  def register(step: str, name: str, klass: type) -> None:
@@ -112,7 +169,18 @@ def get_class(step: str, name: str) -> type:
112
169
  if name not in _REGISTRY[step]:
113
170
  raise_error(msg=f"Invalid name: {name}", klass=ValueError)
114
171
 
115
- return _REGISTRY[step][name]
172
+ # Check if first-time import, then import it
173
+ if isinstance(_REGISTRY[step][name], str):
174
+ klass = getattr(
175
+ importlib.import_module(
176
+ f"junifer.{_STEP_TO_SUBPKG_MAPPINGS[step]}"
177
+ ),
178
+ name,
179
+ )
180
+ else:
181
+ klass = _REGISTRY[step][name]
182
+
183
+ return klass
116
184
 
117
185
 
118
186
  def build(
@@ -1,4 +1,4 @@
1
- """Provide tests for marker collection."""
1
+ """Provide tests for MarkerCollection."""
2
2
 
3
3
  # Authors: Federico Raimondo <f.raimondo@fz-juelich.de>
4
4
  # Synchon Mandal <s.mandal@fz-juelich.de>
@@ -12,10 +12,9 @@ from numpy.testing import assert_array_equal
12
12
  from junifer.datareader.default import DefaultDataReader
13
13
  from junifer.markers import (
14
14
  FunctionalConnectivityParcels,
15
- MarkerCollection,
16
15
  ParcelAggregation,
17
16
  )
18
- from junifer.pipeline import PipelineStepMixin
17
+ from junifer.pipeline import MarkerCollection, PipelineStepMixin
19
18
  from junifer.preprocess import fMRIPrepConfoundRemover
20
19
  from junifer.storage import SQLiteFeatureStorage
21
20
  from junifer.testing.datagrabbers import (
@@ -5,15 +5,7 @@
5
5
  # Synchon Mandal <s.mandal@fz-juelich.de>
6
6
  # License: AGPL
7
7
 
8
- from .base import BasePreprocessor
9
- from .confounds import fMRIPrepConfoundRemover
10
- from .warping import SpaceWarper
11
- from .smoothing import Smoothing
8
+ import lazy_loader as lazy
12
9
 
13
10
 
14
- __all__ = [
15
- "BasePreprocessor",
16
- "fMRIPrepConfoundRemover",
17
- "SpaceWarper",
18
- "Smoothing",
19
- ]
11
+ __getattr__, __dir__, __all__ = lazy.attach_stub(__name__, __file__)
@@ -0,0 +1,11 @@
1
+ __all__ = [
2
+ "BasePreprocessor",
3
+ "fMRIPrepConfoundRemover",
4
+ "SpaceWarper",
5
+ "Smoothing",
6
+ ]
7
+
8
+ from .base import BasePreprocessor
9
+ from .confounds import fMRIPrepConfoundRemover
10
+ from .warping import SpaceWarper
11
+ from .smoothing import Smoothing
@@ -4,7 +4,7 @@
4
4
  # Leonard Sasse <l.sasse@fz-juelich.de>
5
5
  # License: AGPL
6
6
 
7
- from .fmriprep_confound_remover import fMRIPrepConfoundRemover
7
+ import lazy_loader as lazy
8
8
 
9
9
 
10
- __all__ = ["fMRIPrepConfoundRemover"]
10
+ __getattr__, __dir__, __all__ = lazy.attach_stub(__name__, __file__)
@@ -0,0 +1,3 @@
1
+ __all__ = ["fMRIPrepConfoundRemover"]
2
+
3
+ from .fmriprep_confound_remover import fMRIPrepConfoundRemover
File without changes
File without changes
@@ -3,7 +3,7 @@
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
4
  # License: AGPL
5
5
 
6
- from .smoothing import Smoothing
6
+ import lazy_loader as lazy
7
7
 
8
8
 
9
- __all__ = ["Smoothing"]
9
+ __getattr__, __dir__, __all__ = lazy.attach_stub(__name__, __file__)
@@ -0,0 +1,3 @@
1
+ __all__ = ["Smoothing"]
2
+
3
+ from .smoothing import Smoothing
File without changes
@@ -3,7 +3,7 @@
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
4
  # License: AGPL
5
5
 
6
- from .space_warper import SpaceWarper
6
+ import lazy_loader as lazy
7
7
 
8
8
 
9
- __all__ = ["SpaceWarper"]
9
+ __getattr__, __dir__, __all__ = lazy.attach_stub(__name__, __file__)
@@ -0,0 +1,3 @@
1
+ __all__ = ["SpaceWarper"]
2
+
3
+ from .space_warper import SpaceWarper
File without changes
junifer/py.typed ADDED
File without changes
@@ -4,15 +4,7 @@
4
4
  # Synchon Mandal <s.mandal@fz-juelich.de>
5
5
  # License: AGPL
6
6
 
7
- from .base import BaseFeatureStorage
8
- from .pandas_base import PandasBaseFeatureStorage
9
- from .sqlite import SQLiteFeatureStorage
10
- from .hdf5 import HDF5FeatureStorage
7
+ import lazy_loader as lazy
11
8
 
12
9
 
13
- __all__ = [
14
- "BaseFeatureStorage",
15
- "PandasBaseFeatureStorage",
16
- "SQLiteFeatureStorage",
17
- "HDF5FeatureStorage",
18
- ]
10
+ __getattr__, __dir__, __all__ = lazy.attach_stub(__name__, __file__)
@@ -0,0 +1,11 @@
1
+ __all__ = [
2
+ "BaseFeatureStorage",
3
+ "PandasBaseFeatureStorage",
4
+ "SQLiteFeatureStorage",
5
+ "HDF5FeatureStorage",
6
+ ]
7
+
8
+ from .base import BaseFeatureStorage
9
+ from .pandas_base import PandasBaseFeatureStorage
10
+ from .sqlite import SQLiteFeatureStorage
11
+ from .hdf5 import HDF5FeatureStorage
File without changes
@@ -4,8 +4,7 @@
4
4
  # Synchon Mandal <s.mandal@fz-juelich.de>
5
5
  # License: AGPL
6
6
 
7
- from . import datagrabbers
8
- from .utils import get_testing_data
7
+ import lazy_loader as lazy
9
8
 
10
9
 
11
- __all__ = ["datagrabbers", "get_testing_data"]
10
+ __getattr__, __dir__, __all__ = lazy.attach_stub(__name__, __file__)
@@ -0,0 +1,4 @@
1
+ __all__ = ["datagrabbers", "get_testing_data"]
2
+
3
+ from . import datagrabbers
4
+ from .utils import get_testing_data
File without changes
junifer/utils/__init__.py CHANGED
@@ -4,19 +4,7 @@
4
4
  # Synchon Mandal <s.mandal@fz-juelich.de>
5
5
  # License: AGPL
6
6
 
7
- from .fs import make_executable
8
- from .logging import configure_logging, logger, raise_error, warn_with_log
9
- from .helpers import run_ext_cmd, deep_update
10
- from ._yaml import yaml
7
+ import lazy_loader as lazy
11
8
 
12
9
 
13
- __all__ = [
14
- "make_executable",
15
- "configure_logging",
16
- "logger",
17
- "raise_error",
18
- "warn_with_log",
19
- "run_ext_cmd",
20
- "deep_update",
21
- "yaml",
22
- ]
10
+ __getattr__, __dir__, __all__ = lazy.attach_stub(__name__, __file__)
@@ -0,0 +1,15 @@
1
+ __all__ = [
2
+ "make_executable",
3
+ "configure_logging",
4
+ "logger",
5
+ "raise_error",
6
+ "warn_with_log",
7
+ "run_ext_cmd",
8
+ "deep_update",
9
+ "yaml",
10
+ ]
11
+
12
+ from .fs import make_executable
13
+ from .logging import configure_logging, logger, raise_error, warn_with_log
14
+ from .helpers import run_ext_cmd, deep_update
15
+ from ._yaml import yaml
junifer/utils/py.typed ADDED
File without changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: junifer
3
- Version: 0.0.6.dev51
3
+ Version: 0.0.6.dev88
4
4
  Summary: JUelich NeuroImaging FEature extractoR
5
5
  Author-email: Fede Raimondo <f.raimondo@fz-juelich.de>, Synchon Mandal <s.mandal@fz-juelich.de>
6
6
  Maintainer-email: Fede Raimondo <f.raimondo@fz-juelich.de>, Synchon Mandal <s.mandal@fz-juelich.de>
@@ -42,6 +42,7 @@ Requires-Dist: httpx[http2] ==0.26.0
42
42
  Requires-Dist: tqdm ==4.66.1
43
43
  Requires-Dist: templateflow >=23.0.0
44
44
  Requires-Dist: lapy <2.0.0,>=1.0.0
45
+ Requires-Dist: lazy-loader ==0.4
45
46
  Requires-Dist: importlib-metadata ; python_version < "3.9"
46
47
  Requires-Dist: looseversion ==1.3.0 ; python_version >= "3.12"
47
48
  Provides-Extra: all