junifer 0.0.6.dev266__py3-none-any.whl → 0.0.6.dev285__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.
- junifer/_version.py +2 -2
- junifer/api/decorators.py +1 -1
- junifer/api/functions.py +1 -1
- junifer/cli/cli.py +8 -8
- junifer/cli/parser.py +1 -1
- junifer/data/_dispatch.py +1 -1
- junifer/data/masks/_masks.py +1 -1
- junifer/data/template_spaces.py +1 -1
- junifer/datagrabber/datalad_base.py +46 -17
- junifer/datagrabber/tests/test_datalad_base.py +18 -2
- junifer/stats.py +1 -1
- junifer/storage/utils.py +2 -2
- junifer/testing/datagrabbers.py +1 -1
- junifer/typing/__init__.pyi +2 -0
- junifer/typing/_typing.py +8 -6
- junifer/utils/__init__.pyi +3 -0
- junifer/utils/_config.py +110 -0
- junifer/utils/helpers.py +1 -1
- junifer/utils/logging.py +1 -1
- junifer/utils/singleton.py +1 -1
- junifer/utils/tests/test_config.py +59 -0
- {junifer-0.0.6.dev266.dist-info → junifer-0.0.6.dev285.dist-info}/METADATA +1 -1
- {junifer-0.0.6.dev266.dist-info → junifer-0.0.6.dev285.dist-info}/RECORD +28 -26
- {junifer-0.0.6.dev266.dist-info → junifer-0.0.6.dev285.dist-info}/AUTHORS.rst +0 -0
- {junifer-0.0.6.dev266.dist-info → junifer-0.0.6.dev285.dist-info}/LICENSE.md +0 -0
- {junifer-0.0.6.dev266.dist-info → junifer-0.0.6.dev285.dist-info}/WHEEL +0 -0
- {junifer-0.0.6.dev266.dist-info → junifer-0.0.6.dev285.dist-info}/entry_points.txt +0 -0
- {junifer-0.0.6.dev266.dist-info → junifer-0.0.6.dev285.dist-info}/top_level.txt +0 -0
junifer/_version.py
CHANGED
@@ -12,5 +12,5 @@ __version__: str
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
13
13
|
version_tuple: VERSION_TUPLE
|
14
14
|
|
15
|
-
__version__ = version = '0.0.6.
|
16
|
-
__version_tuple__ = version_tuple = (0, 0, 6, '
|
15
|
+
__version__ = version = '0.0.6.dev285'
|
16
|
+
__version_tuple__ = version_tuple = (0, 0, 6, 'dev285')
|
junifer/api/decorators.py
CHANGED
junifer/api/functions.py
CHANGED
@@ -24,7 +24,7 @@ from ..typing import DataGrabberLike, MarkerLike, PreprocessorLike, StorageLike
|
|
24
24
|
from ..utils import logger, raise_error, yaml
|
25
25
|
|
26
26
|
|
27
|
-
__all__ = ["
|
27
|
+
__all__ = ["collect", "list_elements", "queue", "reset", "run"]
|
28
28
|
|
29
29
|
|
30
30
|
def _get_datagrabber(datagrabber_config: dict) -> DataGrabberLike:
|
junifer/cli/cli.py
CHANGED
@@ -29,19 +29,19 @@ from .utils import (
|
|
29
29
|
|
30
30
|
|
31
31
|
__all__ = [
|
32
|
+
"afni_docker",
|
33
|
+
"ants_docker",
|
32
34
|
"cli",
|
33
|
-
"run",
|
34
35
|
"collect",
|
36
|
+
"freesurfer_docker",
|
37
|
+
"fsl_docker",
|
38
|
+
"list_elements",
|
35
39
|
"queue",
|
36
|
-
"wtf",
|
37
|
-
"selftest",
|
38
40
|
"reset",
|
39
|
-
"
|
41
|
+
"run",
|
42
|
+
"selftest",
|
40
43
|
"setup",
|
41
|
-
"
|
42
|
-
"fsl_docker",
|
43
|
-
"ants_docker",
|
44
|
-
"freesurfer_docker",
|
44
|
+
"wtf",
|
45
45
|
]
|
46
46
|
|
47
47
|
|
junifer/cli/parser.py
CHANGED
junifer/data/_dispatch.py
CHANGED
junifer/data/masks/_masks.py
CHANGED
junifer/data/template_spaces.py
CHANGED
@@ -17,7 +17,7 @@ from datalad.support.exceptions import IncompleteResultsError
|
|
17
17
|
from datalad.support.gitrepo import GitRepo
|
18
18
|
|
19
19
|
from ..pipeline import WorkDirManager
|
20
|
-
from ..utils import logger, raise_error, warn_with_log
|
20
|
+
from ..utils import config, logger, raise_error, warn_with_log
|
21
21
|
from .base import BaseDataGrabber
|
22
22
|
|
23
23
|
|
@@ -143,27 +143,49 @@ class DataladDataGrabber(BaseDataGrabber):
|
|
143
143
|
"""
|
144
144
|
return super().datadir / self._rootdir
|
145
145
|
|
146
|
-
def _get_dataset_id_remote(self) -> str:
|
146
|
+
def _get_dataset_id_remote(self) -> tuple[str, bool]:
|
147
147
|
"""Get the dataset ID from the remote.
|
148
148
|
|
149
149
|
Returns
|
150
150
|
-------
|
151
151
|
str
|
152
152
|
The dataset ID.
|
153
|
+
bool
|
154
|
+
Whether the dataset is dirty.
|
155
|
+
|
156
|
+
Raises
|
157
|
+
------
|
158
|
+
ValueError
|
159
|
+
If the dataset ID cannot be obtained from the remote.
|
153
160
|
|
154
161
|
"""
|
155
162
|
remote_id = None
|
163
|
+
is_dirty = False
|
156
164
|
with tempfile.TemporaryDirectory() as tmpdir:
|
157
|
-
|
158
|
-
|
159
|
-
|
165
|
+
if not config.get("datagrabber.skipidcheck", False):
|
166
|
+
logger.debug(f"Querying {self.uri} for dataset ID")
|
167
|
+
repo = GitRepo.clone(
|
168
|
+
self.uri, path=tmpdir, clone_options=["-n", "--depth=1"]
|
169
|
+
)
|
170
|
+
repo.checkout(name=".datalad/config", options=["HEAD"])
|
171
|
+
remote_id = repo.config.get("datalad.dataset.id", None)
|
172
|
+
logger.debug(f"Got remote dataset ID = {remote_id}")
|
173
|
+
|
174
|
+
if not config.get("datagrabber.skipdirtycheck", False):
|
175
|
+
is_dirty = repo.dirty
|
176
|
+
else:
|
177
|
+
logger.debug("Skipping dirty check")
|
178
|
+
is_dirty = False
|
179
|
+
else:
|
180
|
+
logger.debug("Skipping dataset ID check")
|
181
|
+
remote_id = self._dataset.id
|
182
|
+
is_dirty = False
|
183
|
+
logger.debug(
|
184
|
+
f"Remote dataset is {'' if is_dirty else 'not'} dirty"
|
160
185
|
)
|
161
|
-
repo.checkout(name=".datalad/config", options=["HEAD"])
|
162
|
-
remote_id = repo.config.get("datalad.dataset.id", None)
|
163
|
-
logger.debug(f"Got remote dataset ID = {remote_id}")
|
164
186
|
if remote_id is None:
|
165
187
|
raise_error("Could not get dataset ID from remote")
|
166
|
-
return remote_id
|
188
|
+
return remote_id, is_dirty
|
167
189
|
|
168
190
|
def _dataset_get(self, out: dict) -> dict:
|
169
191
|
"""Get the dataset found from the path in ``out``.
|
@@ -178,6 +200,11 @@ class DataladDataGrabber(BaseDataGrabber):
|
|
178
200
|
dict
|
179
201
|
The unmodified input dictionary.
|
180
202
|
|
203
|
+
Raises
|
204
|
+
------
|
205
|
+
datalad.support.exceptions.IncompleteResultsError
|
206
|
+
If there is a datalad-related problem while fetching data.
|
207
|
+
|
181
208
|
"""
|
182
209
|
to_get = []
|
183
210
|
for type_val in out.values():
|
@@ -230,6 +257,8 @@ class DataladDataGrabber(BaseDataGrabber):
|
|
230
257
|
------
|
231
258
|
ValueError
|
232
259
|
If the dataset is already installed but with a different ID.
|
260
|
+
datalad.support.exceptions.IncompleteResultsError
|
261
|
+
If there is a datalad-related problem while cloning dataset.
|
233
262
|
|
234
263
|
"""
|
235
264
|
isinstalled = dl.Dataset(self._datadir).is_installed()
|
@@ -238,23 +267,23 @@ class DataladDataGrabber(BaseDataGrabber):
|
|
238
267
|
self._got_files = []
|
239
268
|
self._dataset: dl.Dataset = dl.Dataset(self._datadir)
|
240
269
|
|
241
|
-
|
270
|
+
# Check if dataset is already installed with a different ID
|
271
|
+
remote_id, is_dirty = self._get_dataset_id_remote()
|
242
272
|
if remote_id != self._dataset.id:
|
243
273
|
raise_error(
|
244
274
|
"Dataset already installed but with a different "
|
245
275
|
f"ID: {self._dataset.id} (local) != {remote_id} (remote)"
|
246
276
|
)
|
247
277
|
|
248
|
-
#
|
249
|
-
|
250
|
-
if
|
251
|
-
self.datalad_dirty = True
|
278
|
+
# Conditional reporting on dataset dirtiness
|
279
|
+
self.datalad_dirty = is_dirty
|
280
|
+
if self.datalad_dirty:
|
252
281
|
warn_with_log(
|
253
|
-
"At least one file is not clean,
|
254
|
-
"
|
282
|
+
"At least one file is not clean, "
|
283
|
+
f"marking dataset (id: {self._dataset.id}) as dirty."
|
255
284
|
)
|
256
285
|
else:
|
257
|
-
logger.debug("Dataset is clean")
|
286
|
+
logger.debug(f"Dataset (id: {self._dataset.id}) is clean")
|
258
287
|
|
259
288
|
else:
|
260
289
|
logger.debug(f"Installing dataset {self.uri} to {self._datadir}")
|
@@ -3,12 +3,14 @@
|
|
3
3
|
# Authors: Synchon Mandal <s.mandal@fz-juelich.de>
|
4
4
|
# License: AGPL
|
5
5
|
|
6
|
+
import warnings
|
6
7
|
from pathlib import Path
|
7
8
|
|
8
9
|
import datalad.api as dl
|
9
10
|
import pytest
|
10
11
|
|
11
12
|
from junifer.datagrabber import DataladDataGrabber
|
13
|
+
from junifer.utils import config
|
12
14
|
|
13
15
|
|
14
16
|
_testing_dataset = {
|
@@ -94,6 +96,12 @@ def test_DataladDataGrabber_install_errors(
|
|
94
96
|
with pytest.raises(ValueError, match=r"different ID"):
|
95
97
|
with dg:
|
96
98
|
pass
|
99
|
+
# Set config to skip id check and test
|
100
|
+
config.set(key="datagrabber.skipidcheck", val=True)
|
101
|
+
with dg:
|
102
|
+
pass
|
103
|
+
# Reset config
|
104
|
+
config.delete("datagrabber.skipidcheck")
|
97
105
|
|
98
106
|
elem1_t1w = datadir / "example_bids/sub-01/anat/sub-01_T1w.nii.gz"
|
99
107
|
elem1_t1w.unlink()
|
@@ -104,6 +112,14 @@ def test_DataladDataGrabber_install_errors(
|
|
104
112
|
with pytest.warns(RuntimeWarning, match=r"one file is not clean"):
|
105
113
|
with dg:
|
106
114
|
pass
|
115
|
+
# Set config to skip dirty check and test
|
116
|
+
with warnings.catch_warnings():
|
117
|
+
warnings.simplefilter("error")
|
118
|
+
config.set(key="datagrabber.skipdirtycheck", val=True)
|
119
|
+
with dg:
|
120
|
+
pass
|
121
|
+
# Reset config
|
122
|
+
config.delete("datagrabber.skipdirtycheck")
|
107
123
|
|
108
124
|
|
109
125
|
def test_DataladDataGrabber_clone_cleanup(
|
@@ -246,7 +262,7 @@ def test_DataladDataGrabber_previously_cloned(
|
|
246
262
|
meta = elem1["BOLD"]["meta"]
|
247
263
|
assert "datagrabber" in meta
|
248
264
|
assert "datalad_dirty" in meta["datagrabber"]
|
249
|
-
assert meta["datagrabber"]["datalad_dirty"] is
|
265
|
+
assert meta["datagrabber"]["datalad_dirty"] is True
|
250
266
|
assert "datalad_commit_id" in meta["datagrabber"]
|
251
267
|
assert meta["datagrabber"]["datalad_commit_id"] == commit
|
252
268
|
assert "datalad_id" in meta["datagrabber"]
|
@@ -326,7 +342,7 @@ def test_DataladDataGrabber_previously_cloned_and_get(
|
|
326
342
|
meta = elem1["BOLD"]["meta"]
|
327
343
|
assert "datagrabber" in meta
|
328
344
|
assert "datalad_dirty" in meta["datagrabber"]
|
329
|
-
assert meta["datagrabber"]["datalad_dirty"] is
|
345
|
+
assert meta["datagrabber"]["datalad_dirty"] is True
|
330
346
|
assert "datalad_commit_id" in meta["datagrabber"]
|
331
347
|
assert meta["datagrabber"]["datalad_commit_id"] == commit
|
332
348
|
assert "datalad_id" in meta["datagrabber"]
|
junifer/stats.py
CHANGED
@@ -13,7 +13,7 @@ from scipy.stats.mstats import winsorize
|
|
13
13
|
from .utils import logger, raise_error
|
14
14
|
|
15
15
|
|
16
|
-
__all__ = ["
|
16
|
+
__all__ = ["count", "get_aggfunc_by_name", "select", "winsorized_mean"]
|
17
17
|
|
18
18
|
|
19
19
|
def get_aggfunc_by_name(
|
junifer/storage/utils.py
CHANGED
@@ -15,11 +15,11 @@ from ..utils.logging import logger, raise_error
|
|
15
15
|
|
16
16
|
|
17
17
|
__all__ = [
|
18
|
+
"element_to_prefix",
|
18
19
|
"get_dependency_version",
|
20
|
+
"matrix_to_vector",
|
19
21
|
"process_meta",
|
20
|
-
"element_to_prefix",
|
21
22
|
"store_matrix_checks",
|
22
|
-
"matrix_to_vector",
|
23
23
|
]
|
24
24
|
|
25
25
|
|
junifer/testing/datagrabbers.py
CHANGED
junifer/typing/__init__.pyi
CHANGED
@@ -9,6 +9,7 @@ __all__ = [
|
|
9
9
|
"ExternalDependencies",
|
10
10
|
"MarkerInOutMappings",
|
11
11
|
"DataGrabberPatterns",
|
12
|
+
"ConfigVal",
|
12
13
|
]
|
13
14
|
|
14
15
|
from ._typing import (
|
@@ -22,4 +23,5 @@ from ._typing import (
|
|
22
23
|
ExternalDependencies,
|
23
24
|
MarkerInOutMappings,
|
24
25
|
DataGrabberPatterns,
|
26
|
+
ConfigVal,
|
25
27
|
)
|
junifer/typing/_typing.py
CHANGED
@@ -19,16 +19,17 @@ if TYPE_CHECKING:
|
|
19
19
|
|
20
20
|
|
21
21
|
__all__ = [
|
22
|
+
"ConditionalDependencies",
|
23
|
+
"ConfigVal",
|
22
24
|
"DataGrabberLike",
|
23
|
-
"
|
24
|
-
"MarkerLike",
|
25
|
-
"StorageLike",
|
26
|
-
"PipelineComponent",
|
25
|
+
"DataGrabberPatterns",
|
27
26
|
"Dependencies",
|
28
|
-
"ConditionalDependencies",
|
29
27
|
"ExternalDependencies",
|
30
28
|
"MarkerInOutMappings",
|
31
|
-
"
|
29
|
+
"MarkerLike",
|
30
|
+
"PipelineComponent",
|
31
|
+
"PreprocessorLike",
|
32
|
+
"StorageLike",
|
32
33
|
]
|
33
34
|
|
34
35
|
|
@@ -60,3 +61,4 @@ MarkerInOutMappings = MutableMapping[str, MutableMapping[str, str]]
|
|
60
61
|
DataGrabberPatterns = dict[
|
61
62
|
str, Union[dict[str, str], Sequence[dict[str, str]]]
|
62
63
|
]
|
64
|
+
ConfigVal = Union[bool, int, float]
|
junifer/utils/__init__.pyi
CHANGED
@@ -1,15 +1,18 @@
|
|
1
1
|
__all__ = [
|
2
2
|
"make_executable",
|
3
3
|
"configure_logging",
|
4
|
+
"config",
|
4
5
|
"logger",
|
5
6
|
"raise_error",
|
6
7
|
"warn_with_log",
|
7
8
|
"run_ext_cmd",
|
8
9
|
"deep_update",
|
9
10
|
"yaml",
|
11
|
+
"ConfigManager",
|
10
12
|
]
|
11
13
|
|
12
14
|
from .fs import make_executable
|
13
15
|
from .logging import configure_logging, logger, raise_error, warn_with_log
|
16
|
+
from ._config import config, ConfigManager
|
14
17
|
from .helpers import run_ext_cmd, deep_update
|
15
18
|
from ._yaml import yaml
|
junifer/utils/_config.py
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
"""Provide junifer global configuration."""
|
2
|
+
|
3
|
+
# Authors: Federico Raimondo <f.raimondo@fz-juelich.de>
|
4
|
+
# Synchon Mandal <s.mandal@fz-juelich.de>
|
5
|
+
# License: AGPL
|
6
|
+
|
7
|
+
import os
|
8
|
+
from typing import Optional
|
9
|
+
|
10
|
+
from ..typing import ConfigVal
|
11
|
+
from .logging import logger
|
12
|
+
from .singleton import Singleton
|
13
|
+
|
14
|
+
|
15
|
+
__all__ = ["ConfigManager", "config"]
|
16
|
+
|
17
|
+
|
18
|
+
class ConfigManager(metaclass=Singleton):
|
19
|
+
"""Manage configuration parameters.
|
20
|
+
|
21
|
+
Attributes
|
22
|
+
----------
|
23
|
+
_config : dict
|
24
|
+
Configuration parameters.
|
25
|
+
|
26
|
+
"""
|
27
|
+
|
28
|
+
def __init__(self) -> None:
|
29
|
+
"""Initialize the class."""
|
30
|
+
self._config = {}
|
31
|
+
# Initial setup from process env
|
32
|
+
self._reload()
|
33
|
+
|
34
|
+
def _reload(self) -> None:
|
35
|
+
"""Reload env vars."""
|
36
|
+
for t_var in os.environ:
|
37
|
+
if t_var.startswith("JUNIFER_"):
|
38
|
+
# Set correct type
|
39
|
+
var_value = os.environ[t_var]
|
40
|
+
# bool
|
41
|
+
if var_value.lower() == "true":
|
42
|
+
var_value = True
|
43
|
+
elif var_value.lower() == "false":
|
44
|
+
var_value = False
|
45
|
+
# numeric
|
46
|
+
else:
|
47
|
+
try:
|
48
|
+
var_value = int(var_value)
|
49
|
+
except ValueError:
|
50
|
+
try:
|
51
|
+
var_value = float(var_value)
|
52
|
+
except ValueError:
|
53
|
+
pass
|
54
|
+
# Set value
|
55
|
+
var_name = (
|
56
|
+
t_var.replace("JUNIFER_", "").lower().replace("_", ".")
|
57
|
+
)
|
58
|
+
logger.debug(
|
59
|
+
f"Setting `{var_name}` from environment to "
|
60
|
+
f"`{var_value}` (type: {type(var_value)})"
|
61
|
+
)
|
62
|
+
self._config[var_name] = var_value
|
63
|
+
|
64
|
+
def get(self, key: str, default: Optional[ConfigVal] = None) -> ConfigVal:
|
65
|
+
"""Get configuration parameter.
|
66
|
+
|
67
|
+
Parameters
|
68
|
+
----------
|
69
|
+
key : str
|
70
|
+
The configuration key to get.
|
71
|
+
default : bool or int or float or None, optional
|
72
|
+
The default value to return if the key is not found (default None).
|
73
|
+
|
74
|
+
Returns
|
75
|
+
-------
|
76
|
+
bool or int or float
|
77
|
+
The configuration value.
|
78
|
+
|
79
|
+
"""
|
80
|
+
return self._config.get(key, default)
|
81
|
+
|
82
|
+
def set(self, key: str, val: ConfigVal) -> None:
|
83
|
+
"""Set configuration parameter.
|
84
|
+
|
85
|
+
Parameters
|
86
|
+
----------
|
87
|
+
key : str
|
88
|
+
The configuration key to set.
|
89
|
+
val : bool or int or float
|
90
|
+
The value to set ``key`` to.
|
91
|
+
|
92
|
+
"""
|
93
|
+
logger.debug(f"Setting `{key}` to `{val}` (type: {type(val)})")
|
94
|
+
self._config[key] = val
|
95
|
+
|
96
|
+
def delete(self, key: str) -> None:
|
97
|
+
"""Delete configuration parameter.
|
98
|
+
|
99
|
+
Parameters
|
100
|
+
----------
|
101
|
+
key : str
|
102
|
+
The configuration key to delete.
|
103
|
+
|
104
|
+
"""
|
105
|
+
logger.debug(f"Deleting `{key}` from config")
|
106
|
+
_ = self._config.pop(key)
|
107
|
+
|
108
|
+
|
109
|
+
# Initialize here to access from anywhere
|
110
|
+
config = ConfigManager()
|
junifer/utils/helpers.py
CHANGED
junifer/utils/logging.py
CHANGED
junifer/utils/singleton.py
CHANGED
@@ -0,0 +1,59 @@
|
|
1
|
+
"""Provide tests for ConfigManager."""
|
2
|
+
|
3
|
+
# Authors: Federico Raimondo <f.raimondo@fz-juelich.de>
|
4
|
+
# Synchon Mandal <s.mandal@fz-juelich.de>
|
5
|
+
# License: AGPL
|
6
|
+
|
7
|
+
import os
|
8
|
+
|
9
|
+
import pytest
|
10
|
+
|
11
|
+
from junifer.typing import ConfigVal
|
12
|
+
from junifer.utils import config
|
13
|
+
from junifer.utils._config import ConfigManager
|
14
|
+
|
15
|
+
|
16
|
+
def test_config_manager_singleton() -> None:
|
17
|
+
"""Test that ConfigManager is a singleton."""
|
18
|
+
config_mgr_1 = ConfigManager()
|
19
|
+
config_mgr_2 = ConfigManager()
|
20
|
+
assert id(config_mgr_1) == id(config_mgr_2)
|
21
|
+
|
22
|
+
|
23
|
+
def test_config_manager() -> None:
|
24
|
+
"""Test config operations for ConfigManager."""
|
25
|
+
# Get non-existing with default
|
26
|
+
assert config.get(key="scooby") is None
|
27
|
+
# Set
|
28
|
+
config.set(key="scooby", val=True)
|
29
|
+
# Get existing
|
30
|
+
assert config.get("scooby")
|
31
|
+
# Delete
|
32
|
+
config.delete("scooby")
|
33
|
+
# Get non-existing with default
|
34
|
+
assert config.get(key="scooby") is None
|
35
|
+
|
36
|
+
|
37
|
+
@pytest.mark.parametrize(
|
38
|
+
"val, expected_val",
|
39
|
+
[("TRUE", True), ("FALSE", False), ("1", 1), ("0.0", 0.0)],
|
40
|
+
)
|
41
|
+
def test_config_manager_env_reload(val: str, expected_val: ConfigVal) -> None:
|
42
|
+
"""Test config parsing from env reload.
|
43
|
+
|
44
|
+
Parameters
|
45
|
+
----------
|
46
|
+
val : str
|
47
|
+
The parametrized values.
|
48
|
+
expected_val : bool or int or float
|
49
|
+
The parametrized expected value.
|
50
|
+
|
51
|
+
"""
|
52
|
+
# Set env var
|
53
|
+
os.environ["JUNIFER_TESTME"] = val
|
54
|
+
# Check
|
55
|
+
config._reload()
|
56
|
+
assert config.get("testme") == expected_val
|
57
|
+
# Cleanup
|
58
|
+
del os.environ["JUNIFER_TESTME"]
|
59
|
+
config.delete("testme")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: junifer
|
3
|
-
Version: 0.0.6.
|
3
|
+
Version: 0.0.6.dev285
|
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>
|
@@ -1,13 +1,13 @@
|
|
1
1
|
junifer/__init__.py,sha256=2McgH1yNue6Z1V26-uN_mfMjbTcx4CLhym-DMBl5xA4,266
|
2
2
|
junifer/__init__.pyi,sha256=SsTvgq2Dod6UqJN96GH1lCphH6hJQQurEJHGNhHjGUI,508
|
3
|
-
junifer/_version.py,sha256=
|
3
|
+
junifer/_version.py,sha256=VOqNBo1Uj5NzgtOfO88V2py3fLW1gPgO44Cm-fu8TeY,428
|
4
4
|
junifer/conftest.py,sha256=PWYkkRDU8ly2lYwv7VBKMHje4et6HX7Yey3Md_I2KbA,613
|
5
5
|
junifer/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
6
|
-
junifer/stats.py,sha256=
|
6
|
+
junifer/stats.py,sha256=e9aaagMGtgpRfW3Wdpz9ocpnYld1IWylCDcjFUgX9Mk,6225
|
7
7
|
junifer/api/__init__.py,sha256=aAXW_KAEGQ8aAP5Eni2G1R4MWBF7UgjKOgM6akLuJco,252
|
8
8
|
junifer/api/__init__.pyi,sha256=UJu55ApMFd43N0xlQyNKrYpCdzqhAxA3Jjaj0ETwCXU,169
|
9
|
-
junifer/api/decorators.py,sha256=
|
10
|
-
junifer/api/functions.py,sha256=
|
9
|
+
junifer/api/decorators.py,sha256=xphy55NJHnMZnJ-aNA70UzHUJ3SIgh5Xc8ekcozvj3U,2854
|
10
|
+
junifer/api/functions.py,sha256=ebKz9WVdDcVWX32p2MHiYEEN-FEcsGcRWEN6u4pFnro,12826
|
11
11
|
junifer/api/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
12
12
|
junifer/api/queue_context/__init__.py,sha256=glr8x4aMm4EvVrHywDIlugdNlwD1RzqV2FTDNPqYQZ4,204
|
13
13
|
junifer/api/queue_context/__init__.pyi,sha256=LoDQFGZ9wCDmgx5a1_nhKo4zOSvqViXZ8V882DksF7U,246
|
@@ -43,8 +43,8 @@ junifer/api/res/fsl/std2imgcoord,sha256=-X5wRH6XMl0yqnTACJX6MFhO8DFOEWg42MHRxGvi
|
|
43
43
|
junifer/api/tests/test_functions.py,sha256=aBAZ2EveiBHbAM5w6j2QxMHBze-XiVD3Td1kAE946ps,17786
|
44
44
|
junifer/cli/__init__.py,sha256=DS3kZKHeVDxt6d1MLBerZ2fcAwrEBHee5JOBhOLajUI,197
|
45
45
|
junifer/cli/__init__.pyi,sha256=PiV4znUnzSeuSSJGz-RT8N21PiMqoSMwYcypi7nt2Js,40
|
46
|
-
junifer/cli/cli.py,sha256=
|
47
|
-
junifer/cli/parser.py,sha256=
|
46
|
+
junifer/cli/cli.py,sha256=kzSM-5nZWgQ4iaGbcjDkU2JgdYcUF-zsYskuq9_ewM0,13195
|
47
|
+
junifer/cli/parser.py,sha256=Ok_ADyoDfjlAxl9NP36dtzFHp9QTL87V_cRxCa44UKs,8336
|
48
48
|
junifer/cli/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
49
49
|
junifer/cli/utils.py,sha256=AbPQC0Kl-tHMNKiPxp_01gLAGD3IGoLbsq3rXyPMM-c,3116
|
50
50
|
junifer/cli/tests/test_cli.py,sha256=AYL4my12GmFRCbI3JV7-rju32heYxAqbXNwnV8PwqVY,10982
|
@@ -72,10 +72,10 @@ junifer/configs/juseless/datagrabbers/tests/test_ucla.py,sha256=l-1y_m6NJo7JExhy
|
|
72
72
|
junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py,sha256=b9hjc1mgO--PSRC3id2EzzfE2yWNsuZ2UI47a6sfGZU,1025
|
73
73
|
junifer/data/__init__.py,sha256=xJDI2QKtdjcNzpd1oVFM3guh1SFHM6jKstl7pFmzOuk,267
|
74
74
|
junifer/data/__init__.pyi,sha256=qYszjUYcbFi_2zO23MnbA2HhTW-Ad2oh1pqPQYd6yt0,542
|
75
|
-
junifer/data/_dispatch.py,sha256=
|
75
|
+
junifer/data/_dispatch.py,sha256=O524U1R4MtbGhGJsL0HSh9EqisapBFJWK7uupXrJuMg,6158
|
76
76
|
junifer/data/pipeline_data_registry_base.py,sha256=G8bE3WTj4D_rKC4ZKZe6E48Sd96CGea1PS3SxmTgGK4,2010
|
77
77
|
junifer/data/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
78
|
-
junifer/data/template_spaces.py,sha256=
|
78
|
+
junifer/data/template_spaces.py,sha256=AVNuXuCqY0w7dSrVOZURjCPFIkg0wzQsAV2ggtQFpJU,6504
|
79
79
|
junifer/data/utils.py,sha256=5r-0QGQCNZvDM1tVcl9xyrIdgAO85mww0plpM1RUaGA,3247
|
80
80
|
junifer/data/coordinates/__init__.py,sha256=ffM8rwcHLgHAWixJbKrATrbUKzX940V1UF6RAxZdUMg,186
|
81
81
|
junifer/data/coordinates/__init__.pyi,sha256=Z-Ti5XD3HigkZ8uYN6oYsLqw40-F1GvTVQ5QAy08Wng,88
|
@@ -106,7 +106,7 @@ junifer/data/masks/__init__.py,sha256=eEEhHglyVEx1LrqwXjq3cOmjf4sTsgBstRx5-k7zIQ
|
|
106
106
|
junifer/data/masks/__init__.pyi,sha256=lcgr8gmWDPibC4RxnWBXb8DDpIkO73Aax09u6VXiJJI,114
|
107
107
|
junifer/data/masks/_ants_mask_warper.py,sha256=yGjC-b6Ui-MpPG3FpRnI8pEAxjMUfSSuUGVIeazjN7I,5078
|
108
108
|
junifer/data/masks/_fsl_mask_warper.py,sha256=_7UkX3-wFXQs4KwxopO-QjMyB6aeq1GAkiGSGpG-OzM,2412
|
109
|
-
junifer/data/masks/_masks.py,sha256=
|
109
|
+
junifer/data/masks/_masks.py,sha256=96NKsSSosD6r03Jb2N1xQoyOc2Vl5miokcQdSeuM6SY,20729
|
110
110
|
junifer/data/masks/tests/test_masks.py,sha256=1Zm09ZSdUlR278DTCZeVuxuQntryefsnYYPP02MttVE,16120
|
111
111
|
junifer/data/masks/ukb/UKB_15K_GM_template.nii.gz,sha256=jcX1pDOrDsoph8cPMNFVKH5gZYio5G4rJNpOFXm9wJI,946636
|
112
112
|
junifer/data/masks/vickery-patil/CAT12_IXI555_MNI152_TMP_GS_GMprob0.2_clean.nii.gz,sha256=j6EY8EtRnUuRxeKgD65Q6B0GPEPIALKDJEIje1TfnAU,88270
|
@@ -123,7 +123,7 @@ junifer/data/tests/test_template_spaces.py,sha256=PJulN7xHpAcSOTY-UzTG_WPywZEBSl
|
|
123
123
|
junifer/datagrabber/__init__.py,sha256=EHIK-lbjuvkt0V8ypFvLSt85OAAXSkaxBmVlCbNNz8M,323
|
124
124
|
junifer/datagrabber/__init__.pyi,sha256=zOQE4TaCKXBTHnNqgmECtsszWIOHYiQ1CUEeXXFU9F4,832
|
125
125
|
junifer/datagrabber/base.py,sha256=a3_fUZIN5Bqhq2f4ldpwk_eWeSVRDpDmx2QGIKzCtkg,6761
|
126
|
-
junifer/datagrabber/datalad_base.py,sha256=
|
126
|
+
junifer/datagrabber/datalad_base.py,sha256=v_qGP66zk1-a-nU_u4qoSRNWYuh8YBdjhKkvzISgJWM,12586
|
127
127
|
junifer/datagrabber/dmcc13_benchmark.py,sha256=VMyiwvkr4qSvzBICSksPPKOI2w_WVo06H89Url-hrNs,12819
|
128
128
|
junifer/datagrabber/multiple.py,sha256=4tCOzojs3hoG7daHJJ7HUsx15atWR5nTmyP0S0__aig,6666
|
129
129
|
junifer/datagrabber/pattern.py,sha256=UwJQ0MObBIS6eHH9FfoM_sBYuNM9n5NAX7DA0HdtL1A,18709
|
@@ -146,7 +146,7 @@ junifer/datagrabber/hcp1200/hcp1200.py,sha256=L_JTY0RYQ_Wst2La5EaGVDbya7IfSkTVkK
|
|
146
146
|
junifer/datagrabber/hcp1200/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
147
147
|
junifer/datagrabber/hcp1200/tests/test_hcp1200.py,sha256=HeXlD6wjvDq0EyqlB_nPqfXSIhAzALYAYjSCAjNOGGg,10972
|
148
148
|
junifer/datagrabber/tests/test_base.py,sha256=fZdVhNhvfht9lpTHrAUf5E6mAfNNUP7OTQ5KLaBQ1gI,3506
|
149
|
-
junifer/datagrabber/tests/test_datalad_base.py,sha256=
|
149
|
+
junifer/datagrabber/tests/test_datalad_base.py,sha256=nPF_N2Q09tgPmd5TD0dI9KU8G8HHLmydFa3agamijI8,16790
|
150
150
|
junifer/datagrabber/tests/test_dmcc13_benchmark.py,sha256=QSdYAAwAj1DoE1oLhoraIc4lAgUgIaJyrtcOs_witzM,9914
|
151
151
|
junifer/datagrabber/tests/test_multiple.py,sha256=tZBQhlEiSE1PeQ5E3TtuVgsHENquna9t39p54AJ-O5w,9963
|
152
152
|
junifer/datagrabber/tests/test_pattern.py,sha256=H55jYRPfT3rMsoIQOAnWJgw3nGrkU7m2xFa3-ed6NQE,9527
|
@@ -306,7 +306,7 @@ junifer/storage/hdf5.py,sha256=1nK4su0S1ND-cMMP0jhf66yf0I0JwHp1gicDjZhXw9s,38001
|
|
306
306
|
junifer/storage/pandas_base.py,sha256=v3iRuoXJzBChZYkjR4OHJp99NM0BPTpYkw1TAX52Nto,7529
|
307
307
|
junifer/storage/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
308
308
|
junifer/storage/sqlite.py,sha256=QzkKB1pD4qNjrMe0bB7ATHnPgNjteTrP3ULCE_XuwD0,21269
|
309
|
-
junifer/storage/utils.py,sha256=
|
309
|
+
junifer/storage/utils.py,sha256=3wpiHeyGJ74neICgKmSrlpSZcyl5Hm1y3_49-Sj9tWg,7390
|
310
310
|
junifer/storage/tests/test_hdf5.py,sha256=vHMludIWJJ-4_i1kMYqLfdCrHJkYe7Dd9ZXLTjt-MOQ,31481
|
311
311
|
junifer/storage/tests/test_pandas_base.py,sha256=y_TfUGpuXkj_39yVon3rMDxMeBrZXs58ZW6OSty5LNw,4058
|
312
312
|
junifer/storage/tests/test_sqlite.py,sha256=0TQIcqHPgk67ALsR-98CA73ulDPsR2t9wGXYaem983w,28312
|
@@ -314,7 +314,7 @@ junifer/storage/tests/test_storage_base.py,sha256=YzgfspuggzXejyPIoRCPST3ZzH9Pi7
|
|
314
314
|
junifer/storage/tests/test_utils.py,sha256=k2HxD9cC-NczasEWjPZUiIy6mpbelR8KIUXWtkp_uws,11862
|
315
315
|
junifer/testing/__init__.py,sha256=gqfrX2c7I31VYBmH9hCUERO-61NwubT1cvy1bKM0NqU,249
|
316
316
|
junifer/testing/__init__.pyi,sha256=OFqGc5GCjoD4hPVOYNWvnvvP_RVF-oO-UQR8n9HDVtM,133
|
317
|
-
junifer/testing/datagrabbers.py,sha256=
|
317
|
+
junifer/testing/datagrabbers.py,sha256=ui2VwArMjx4KUD2Cf8PRJOExvDHfPntuuuhEEwWwTZ4,6571
|
318
318
|
junifer/testing/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
319
319
|
junifer/testing/registry.py,sha256=MVO-xlzSH3pAv9ySTqO1R3sNqdnfD1Qh7oA775ZxlXs,688
|
320
320
|
junifer/testing/utils.py,sha256=TEIwdV7etWglXOFQX1O5ZR18GzfYZ0LcRqXuK-JPo8U,591
|
@@ -326,23 +326,25 @@ junifer/testing/tests/test_testing_registry.py,sha256=MK4a_q4MHieCvYhnhuPm_dH76l
|
|
326
326
|
junifer/tests/test_main.py,sha256=GMff7jlisGM9_FsiUwWDte43j-KQJGFRYZpwRRqTkd8,373
|
327
327
|
junifer/tests/test_stats.py,sha256=NljoGFu2JOPADbi9W0WeUHwpf8nZSdOkcCgCv-Z1fY4,4149
|
328
328
|
junifer/typing/__init__.py,sha256=e0UbuxozXUIxz8h8pLokMOxZV629Q1lnA7vvgm95WF0,215
|
329
|
-
junifer/typing/__init__.pyi,sha256=
|
330
|
-
junifer/typing/_typing.py,sha256=
|
329
|
+
junifer/typing/__init__.pyi,sha256=0SBTyWv6jYV2x7UiZO2vJirFeJePTMyVq9lZcHZus44,536
|
330
|
+
junifer/typing/_typing.py,sha256=TQrKnVqECgLDP1EiI0z-5pkeT9zHPmoha1gG8a2tqs0,1560
|
331
331
|
junifer/utils/__init__.py,sha256=I3tYaePAD_ZEU-36-TJ_OYeqW_aMmi5MZ3jmqie6RfU,260
|
332
|
-
junifer/utils/__init__.pyi,sha256=
|
332
|
+
junifer/utils/__init__.pyi,sha256=CMb4rq1VcQ00IRuiBFfAWu07Vb-vA4qtVLAoY0ll-bA,422
|
333
|
+
junifer/utils/_config.py,sha256=cfxyv1bfklID2atQseu6y3J7mZrCXPwnGEfBSImG9CM,3054
|
333
334
|
junifer/utils/_yaml.py,sha256=jpTroTI2rajECj0RXGCXaOwLpad858WzI7Jg-eXJ_jU,336
|
334
335
|
junifer/utils/fs.py,sha256=M3CKBLh4gPS6s9giyopgb1hHMXzLb6k3cung2wHVBjs,492
|
335
|
-
junifer/utils/helpers.py,sha256=
|
336
|
-
junifer/utils/logging.py,sha256=
|
336
|
+
junifer/utils/helpers.py,sha256=QcfdHPhrYKTf6o5eSOIvDxqmIAxlp9SqmCEdR10jbIY,2033
|
337
|
+
junifer/utils/logging.py,sha256=DRWcKwez56Mfh5PyLQSaKgL0Cc_Om8qfO8zGHTHB5Vo,9769
|
337
338
|
junifer/utils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
338
|
-
junifer/utils/singleton.py,sha256=
|
339
|
+
junifer/utils/singleton.py,sha256=iATJMdzsSVE9akTI4DDycubhAl98t0EdO17gwgOjAYA,1189
|
340
|
+
junifer/utils/tests/test_config.py,sha256=7ltIXuwb_W4Mv_1dxQWyiyM10XgUAfsWKV6D_iE-XU0,1540
|
339
341
|
junifer/utils/tests/test_fs.py,sha256=WQS7cKlKEZ742CIuiOYYpueeAhY9PqlastfDVpVVtvE,923
|
340
342
|
junifer/utils/tests/test_helpers.py,sha256=k5qqfxK8dFyuewTJyR1Qn6-nFaYNuVr0ysc18bfPjyU,929
|
341
343
|
junifer/utils/tests/test_logging.py,sha256=duO4ou365hxwa_kwihFtKPLaL6LC5XHiyhOijrrngbA,8009
|
342
|
-
junifer-0.0.6.
|
343
|
-
junifer-0.0.6.
|
344
|
-
junifer-0.0.6.
|
345
|
-
junifer-0.0.6.
|
346
|
-
junifer-0.0.6.
|
347
|
-
junifer-0.0.6.
|
348
|
-
junifer-0.0.6.
|
344
|
+
junifer-0.0.6.dev285.dist-info/AUTHORS.rst,sha256=rmULKpchpSol4ExWFdm-qu4fkpSZPYqIESVJBZtGb6E,163
|
345
|
+
junifer-0.0.6.dev285.dist-info/LICENSE.md,sha256=MqCnOBu8uXsEOzRZWh9EBVfVz-kE9NkXcLCrtGXo2yU,34354
|
346
|
+
junifer-0.0.6.dev285.dist-info/METADATA,sha256=fplMcovyUZPFi6ONcaA66A1mhJkxK4a3948mXRfW328,8429
|
347
|
+
junifer-0.0.6.dev285.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
348
|
+
junifer-0.0.6.dev285.dist-info/entry_points.txt,sha256=6O8ru0BP-SP7YMUZiizFNoaZ2HvJpadO2G7nKk4PwjI,48
|
349
|
+
junifer-0.0.6.dev285.dist-info/top_level.txt,sha256=4bAq1R2QFQ4b3hohjys2JBvxrl0GKk5LNFzYvz9VGcA,8
|
350
|
+
junifer-0.0.6.dev285.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|