junifer 0.0.6.dev205__py3-none-any.whl → 0.0.6.dev219__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 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.dev205'
16
- __version_tuple__ = version_tuple = (0, 0, 6, 'dev205')
15
+ __version__ = version = '0.0.6.dev219'
16
+ __version_tuple__ = version_tuple = (0, 0, 6, 'dev219')
junifer/conftest.py ADDED
@@ -0,0 +1,25 @@
1
+ """Provide conftest for pytest."""
2
+
3
+ # Authors: Federico Raimondo <f.raimondo@fz-juelich.de>
4
+ # License: AGPL
5
+
6
+ import pytest
7
+
8
+ from junifer.utils.singleton import Singleton
9
+
10
+
11
+ @pytest.fixture(autouse=True)
12
+ def reset_singletons() -> None:
13
+ """Reset all singletons."""
14
+ to_clean = ["WorkDirManager"]
15
+ to_remove = [
16
+ v for k, v in Singleton.instances.items() if k.__name__ in to_clean
17
+ ]
18
+ Singleton.instances = {
19
+ k: v
20
+ for k, v in Singleton.instances.items()
21
+ if k.__name__ not in to_clean
22
+ }
23
+ # Force deleting the singletons
24
+ for elem in to_remove:
25
+ del elem
@@ -11,8 +11,8 @@ import numpy as np
11
11
  import pandas as pd
12
12
  from numpy.typing import ArrayLike
13
13
 
14
- from ...pipeline.singleton import singleton
15
14
  from ...utils import logger, raise_error
15
+ from ...utils.singleton import Singleton
16
16
  from ..pipeline_data_registry_base import BasePipelineDataRegistry
17
17
  from ._ants_coordinates_warper import ANTsCoordinatesWarper
18
18
  from ._fsl_coordinates_warper import FSLCoordinatesWarper
@@ -21,8 +21,7 @@ from ._fsl_coordinates_warper import FSLCoordinatesWarper
21
21
  __all__ = ["CoordinatesRegistry"]
22
22
 
23
23
 
24
- @singleton
25
- class CoordinatesRegistry(BasePipelineDataRegistry):
24
+ class CoordinatesRegistry(BasePipelineDataRegistry, metaclass=Singleton):
26
25
  """Class for coordinates data registry.
27
26
 
28
27
  This class is a singleton and is used for managing available coordinates
@@ -25,8 +25,8 @@ from nilearn.masking import (
25
25
  intersect_masks,
26
26
  )
27
27
 
28
- from ...pipeline.singleton import singleton
29
28
  from ...utils import logger, raise_error
29
+ from ...utils.singleton import Singleton
30
30
  from ..pipeline_data_registry_base import BasePipelineDataRegistry
31
31
  from ..template_spaces import get_template
32
32
  from ..utils import closest_resolution
@@ -126,8 +126,7 @@ def compute_brain_mask(
126
126
  return new_img_like(target_img, mask) # type: ignore
127
127
 
128
128
 
129
- @singleton
130
- class MaskRegistry(BasePipelineDataRegistry):
129
+ class MaskRegistry(BasePipelineDataRegistry, metaclass=Singleton):
131
130
  """Class for mask data registry.
132
131
 
133
132
  This class is a singleton and is used for managing available mask
@@ -20,8 +20,8 @@ import numpy as np
20
20
  import pandas as pd
21
21
  from nilearn import datasets, image
22
22
 
23
- from ...pipeline.singleton import singleton
24
23
  from ...utils import logger, raise_error, warn_with_log
24
+ from ...utils.singleton import Singleton
25
25
  from ..pipeline_data_registry_base import BasePipelineDataRegistry
26
26
  from ..utils import closest_resolution
27
27
  from ._ants_parcellation_warper import ANTsParcellationWarper
@@ -38,8 +38,7 @@ __all__ = [
38
38
  ]
39
39
 
40
40
 
41
- @singleton
42
- class ParcellationRegistry(BasePipelineDataRegistry):
41
+ class ParcellationRegistry(BasePipelineDataRegistry, metaclass=Singleton):
43
42
  """Class for parcellation data registry.
44
43
 
45
44
  This class is a singleton and is used for managing available parcellation
@@ -7,12 +7,13 @@ from abc import ABC, abstractmethod
7
7
  from typing import Any, List, Mapping
8
8
 
9
9
  from ..utils import raise_error
10
+ from ..utils.singleton import ABCSingleton
10
11
 
11
12
 
12
13
  __all__ = ["BasePipelineDataRegistry"]
13
14
 
14
15
 
15
- class BasePipelineDataRegistry(ABC):
16
+ class BasePipelineDataRegistry(ABC, metaclass=ABCSingleton):
16
17
  """Abstract base class for pipeline data registry.
17
18
 
18
19
  For every interface that is required, one needs to provide a concrete
@@ -3,6 +3,9 @@
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
4
  # License: AGPL
5
5
 
6
+ import shutil
7
+ import tempfile
8
+ from pathlib import Path
6
9
  from typing import Iterable, Optional
7
10
 
8
11
  import pytest
@@ -17,7 +20,8 @@ URI = "https://gin.g-node.org/juaml/datalad-example-hcp1200"
17
20
  @pytest.fixture(scope="module")
18
21
  def hcpdg() -> Iterable[DataladHCP1200]:
19
22
  """Return a HCP1200 DataGrabber."""
20
- dg = DataladHCP1200()
23
+ tmpdir = Path(tempfile.gettempdir())
24
+ dg = DataladHCP1200(datadir=tmpdir / "datadir")
21
25
  # Set URI to Gin
22
26
  dg.uri = URI
23
27
  # Set correct root directory
@@ -26,6 +30,7 @@ def hcpdg() -> Iterable[DataladHCP1200]:
26
30
  for t_elem in dg.get_elements():
27
31
  dg[t_elem]
28
32
  yield dg
33
+ shutil.rmtree(tmpdir / "datadir", ignore_errors=True)
29
34
 
30
35
 
31
36
  @pytest.mark.parametrize(
@@ -18,8 +18,8 @@ from typing import (
18
18
  import nibabel as nib
19
19
 
20
20
  from ...pipeline import WorkDirManager
21
- from ...pipeline.singleton import singleton
22
21
  from ...utils import logger, run_ext_cmd
22
+ from ...utils.singleton import Singleton
23
23
 
24
24
 
25
25
  if TYPE_CHECKING:
@@ -29,8 +29,7 @@ if TYPE_CHECKING:
29
29
  __all__ = ["AFNIALFF"]
30
30
 
31
31
 
32
- @singleton
33
- class AFNIALFF:
32
+ class AFNIALFF(metaclass=Singleton):
34
33
  """Class for computing ALFF using AFNI.
35
34
 
36
35
  This class uses AFNI's 3dRSFC to compute ALFF. It's designed as a singleton
@@ -19,8 +19,8 @@ import scipy as sp
19
19
  from nilearn import image as nimg
20
20
 
21
21
  from ...pipeline import WorkDirManager
22
- from ...pipeline.singleton import singleton
23
22
  from ...utils import logger
23
+ from ...utils.singleton import Singleton
24
24
 
25
25
 
26
26
  if TYPE_CHECKING:
@@ -30,8 +30,7 @@ if TYPE_CHECKING:
30
30
  __all__ = ["JuniferALFF"]
31
31
 
32
32
 
33
- @singleton
34
- class JuniferALFF:
33
+ class JuniferALFF(metaclass=Singleton):
35
34
  """Class for computing ALFF using junifer.
36
35
 
37
36
  It's designed as a singleton with caching for efficient computation.
@@ -18,8 +18,8 @@ from typing import (
18
18
  import nibabel as nib
19
19
 
20
20
  from ...pipeline import WorkDirManager
21
- from ...pipeline.singleton import singleton
22
21
  from ...utils import logger, run_ext_cmd
22
+ from ...utils.singleton import Singleton
23
23
 
24
24
 
25
25
  if TYPE_CHECKING:
@@ -29,8 +29,7 @@ if TYPE_CHECKING:
29
29
  __all__ = ["AFNIReHo"]
30
30
 
31
31
 
32
- @singleton
33
- class AFNIReHo:
32
+ class AFNIReHo(metaclass=Singleton):
34
33
  """Class for computing ReHo using AFNI.
35
34
 
36
35
  This class uses AFNI's 3dReHo to compute ReHo. It's designed as a singleton
@@ -20,8 +20,8 @@ from nilearn import image as nimg
20
20
  from nilearn import masking as nmask
21
21
 
22
22
  from ...pipeline import WorkDirManager
23
- from ...pipeline.singleton import singleton
24
23
  from ...utils import logger, raise_error
24
+ from ...utils.singleton import Singleton
25
25
 
26
26
 
27
27
  if TYPE_CHECKING:
@@ -31,8 +31,7 @@ if TYPE_CHECKING:
31
31
  __all__ = ["JuniferReHo"]
32
32
 
33
33
 
34
- @singleton
35
- class JuniferReHo:
34
+ class JuniferReHo(metaclass=Singleton):
36
35
  """Class for computing ReHo using junifer.
37
36
 
38
37
  It's designed as a singleton with caching for efficient computation.
@@ -9,7 +9,7 @@ import importlib
9
9
  from typing import TYPE_CHECKING, Dict, List, Mapping, Optional, Union
10
10
 
11
11
  from ..utils import logger, raise_error
12
- from .singleton import singleton
12
+ from ..utils.singleton import Singleton
13
13
 
14
14
 
15
15
  if TYPE_CHECKING:
@@ -21,8 +21,7 @@ if TYPE_CHECKING:
21
21
  __all__ = ["PipelineComponentRegistry"]
22
22
 
23
23
 
24
- @singleton
25
- class PipelineComponentRegistry:
24
+ class PipelineComponentRegistry(metaclass=Singleton):
26
25
  """Class for pipeline component registry.
27
26
 
28
27
  This class is a singleton and is used for managing pipeline components.
@@ -102,3 +102,45 @@ def test_workdir_manager_get_and_delete_tempdir(tmp_path: Path) -> None:
102
102
  workdir_mgr._cleanup()
103
103
  # Should remove temporary directory
104
104
  assert workdir_mgr.root_tempdir is None
105
+
106
+ def test_workdir_manager_no_cleanup(tmp_path: Path) -> None:
107
+ """Test WorkDirManager correctly bypasses cleanup.
108
+
109
+ Parameters
110
+ ----------
111
+ tmp_path : pathlib.Path
112
+ The path to the test directory.
113
+
114
+ """
115
+ workdir_mgr = WorkDirManager(cleanup=False)
116
+ workdir_mgr.workdir = tmp_path
117
+ # Check no root temporary directory
118
+ assert workdir_mgr.root_tempdir is None
119
+
120
+ tempdir = workdir_mgr.get_tempdir()
121
+ assert tempdir.exists()
122
+ # Should create a temporary directory
123
+ assert workdir_mgr.root_tempdir is not None
124
+
125
+ workdir_mgr.delete_tempdir(tempdir)
126
+ workdir_mgr._cleanup()
127
+
128
+ # Should remove temporary directory
129
+ assert workdir_mgr.root_tempdir is None
130
+ # But the temporary directory should still exist
131
+ assert tempdir.exists()
132
+
133
+ # Now the same but for the element directory
134
+
135
+ # Check no element directory
136
+ assert workdir_mgr.elementdir is None
137
+
138
+ tempdir = workdir_mgr.get_element_tempdir()
139
+ # Should create a temporary directory
140
+ assert workdir_mgr.elementdir is not None
141
+
142
+ workdir_mgr.cleanup_elementdir()
143
+ # Should remove temporary directory
144
+ assert workdir_mgr.elementdir is None
145
+ # But the temporary directory should still exist
146
+ assert tempdir.exists()
@@ -10,14 +10,13 @@ from pathlib import Path
10
10
  from typing import Optional, Union
11
11
 
12
12
  from ..utils import logger
13
- from .singleton import singleton
13
+ from ..utils.singleton import Singleton
14
14
 
15
15
 
16
16
  __all__ = ["WorkDirManager"]
17
17
 
18
18
 
19
- @singleton
20
- class WorkDirManager:
19
+ class WorkDirManager(metaclass=Singleton):
21
20
  """Class for working directory manager.
22
21
 
23
22
  This class is a singleton and is used for managing temporary and working
@@ -40,15 +39,20 @@ class WorkDirManager:
40
39
  The path to the element directory.
41
40
  root_tempdir : pathlib.Path or None
42
41
  The path to the root temporary directory.
42
+ cleanup : bool, optional
43
+ If False, the directories are not cleaned up after the object is
44
+ destroyed. This is useful for debugging purposes (default True).
43
45
 
44
46
  """
45
47
 
46
- def __init__(self, workdir: Optional[Union[str, Path]] = None) -> None:
48
+ def __init__(
49
+ self, workdir: Optional[Union[str, Path]] = None, cleanup=True
50
+ ) -> None:
47
51
  """Initialize the class."""
48
52
  self._workdir = Path(workdir) if isinstance(workdir, str) else workdir
49
53
  self._elementdir = None
50
54
  self._root_tempdir = None
51
-
55
+ self._cleanup_dirs = cleanup
52
56
  self._set_default_workdir()
53
57
 
54
58
  def _set_default_workdir(self) -> None:
@@ -73,6 +77,9 @@ class WorkDirManager:
73
77
 
74
78
  def _cleanup(self) -> None:
75
79
  """Clean up the element and temporary directories."""
80
+ if self._cleanup_dirs is False:
81
+ self._root_tempdir = None
82
+ return
76
83
  # Remove element directory
77
84
  self.cleanup_elementdir()
78
85
  # Remove root temporary directory
@@ -172,6 +179,8 @@ class WorkDirManager:
172
179
  The temporary directory path to be deleted.
173
180
 
174
181
  """
182
+ if self._cleanup_dirs is False:
183
+ return
175
184
  logger.debug(f"Deleting element temporary directory at {tempdir}")
176
185
  shutil.rmtree(tempdir, ignore_errors=True)
177
186
 
@@ -183,6 +192,9 @@ class WorkDirManager:
183
192
  can lead to required intermediate files not being found.
184
193
 
185
194
  """
195
+ if self._cleanup_dirs is False:
196
+ self._elementdir = None
197
+ return
186
198
  if self._elementdir is not None:
187
199
  logger.debug(
188
200
  "Deleting element directory at "
@@ -245,5 +257,7 @@ class WorkDirManager:
245
257
  The temporary directory path to be deleted.
246
258
 
247
259
  """
260
+ if self._cleanup_dirs is False:
261
+ return
248
262
  logger.debug(f"Deleting temporary directory at {tempdir}")
249
263
  shutil.rmtree(tempdir, ignore_errors=True)
@@ -1,15 +1,17 @@
1
1
  """Provide a singleton class to be used by pipeline components."""
2
2
 
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
+ # Federico Raimondo <f.raimondo@fz-juelich.de>
4
5
  # License: AGPL
5
6
 
6
- from typing import Any, Dict, Type
7
+ from abc import ABCMeta
8
+ from typing import Any, ClassVar, Dict, Type
7
9
 
8
10
 
9
- __all__ = ["singleton"]
11
+ __all__ = ["Singleton", "ABCSingleton"]
10
12
 
11
13
 
12
- def singleton(cls: Type) -> Type:
14
+ class Singleton(type):
13
15
  """Make a class singleton.
14
16
 
15
17
  Parameters
@@ -17,15 +19,11 @@ def singleton(cls: Type) -> Type:
17
19
  cls : class
18
20
  The class to designate as singleton.
19
21
 
20
- Returns
21
- -------
22
- class
23
- The only instance of the class.
24
-
25
22
  """
26
- instances: Dict = {}
27
23
 
28
- def get_instance(*args: Any, **kwargs: Any) -> Type:
24
+ instances: ClassVar[Dict] = {}
25
+
26
+ def __call__(cls, *args: Any, **kwargs: Any) -> Type:
29
27
  """Get the only instance for a class.
30
28
 
31
29
  Parameters
@@ -41,8 +39,15 @@ def singleton(cls: Type) -> Type:
41
39
  The only instance of the class.
42
40
 
43
41
  """
44
- if cls not in instances:
45
- instances[cls] = cls(*args, **kwargs)
46
- return instances[cls]
42
+ if cls not in cls.instances:
43
+ cls.instances[cls] = super(Singleton, cls).__call__( # noqa: UP008
44
+ *args, **kwargs
45
+ )
46
+
47
+ return cls.instances[cls]
48
+
49
+
50
+ class ABCSingleton(ABCMeta, Singleton):
51
+ """Make an abstract class a singleton."""
47
52
 
48
- return get_instance
53
+ pass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: junifer
3
- Version: 0.0.6.dev205
3
+ Version: 0.0.6.dev219
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,6 +1,7 @@
1
1
  junifer/__init__.py,sha256=2McgH1yNue6Z1V26-uN_mfMjbTcx4CLhym-DMBl5xA4,266
2
2
  junifer/__init__.pyi,sha256=uPLuY27S7AY4kFzJX0ncCpzHnWJdztveMJpY3Di-wwQ,482
3
- junifer/_version.py,sha256=0MivfJdRjt5GJZQYgXSlKz-yBFynSLqLuXF6vUbCBnQ,428
3
+ junifer/_version.py,sha256=CjqUG_Y4LDEZ8B4jqZpARBHOYed_438kYzl-7CnGiQU,428
4
+ junifer/conftest.py,sha256=PWYkkRDU8ly2lYwv7VBKMHje4et6HX7Yey3Md_I2KbA,613
4
5
  junifer/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
6
  junifer/stats.py,sha256=BjQb2lfTGDP9l4UuQYmJFcJJNRfbJDGlNvC06SJaDDE,6237
6
7
  junifer/api/__init__.py,sha256=aAXW_KAEGQ8aAP5Eni2G1R4MWBF7UgjKOgM6akLuJco,252
@@ -72,14 +73,14 @@ junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py,sha256=b9hjc1mgO--PS
72
73
  junifer/data/__init__.py,sha256=xJDI2QKtdjcNzpd1oVFM3guh1SFHM6jKstl7pFmzOuk,267
73
74
  junifer/data/__init__.pyi,sha256=qYszjUYcbFi_2zO23MnbA2HhTW-Ad2oh1pqPQYd6yt0,542
74
75
  junifer/data/_dispatch.py,sha256=_hmlIXuuuLJBbY5VH6lohJzhbMB7KEhFkVFwRDEdR_E,6189
75
- junifer/data/pipeline_data_registry_base.py,sha256=_3NheI2Wu5RuKI87WwR1bRzcNyZv_0UcL9q07jmPdh8,1922
76
+ junifer/data/pipeline_data_registry_base.py,sha256=8UyrkXHVr7JdeVfD2xgIRQlrlH3lR2RLHUfnqbw0EyI,1989
76
77
  junifer/data/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
78
  junifer/data/template_spaces.py,sha256=9uZuFztBGNZk3mhUI2h0oQMajjx6Wv31Fx11pGlDI20,6510
78
79
  junifer/data/utils.py,sha256=R-AMuerRiJLU4aMK9_WWXFJn2yOuXtZ-YKrdHvFjZf4,1454
79
80
  junifer/data/coordinates/__init__.py,sha256=ffM8rwcHLgHAWixJbKrATrbUKzX940V1UF6RAxZdUMg,186
80
81
  junifer/data/coordinates/__init__.pyi,sha256=Z-Ti5XD3HigkZ8uYN6oYsLqw40-F1GvTVQ5QAy08Wng,88
81
82
  junifer/data/coordinates/_ants_coordinates_warper.py,sha256=Q08zC0MBQPwj94V8G6ZGdRoYA7V3ACNCDlcFlLXc0j8,2809
82
- junifer/data/coordinates/_coordinates.py,sha256=SVBhFdESAafQ1Vi4LfPaQxwx4s_PxBCjpq3OyQ1akbc,11953
83
+ junifer/data/coordinates/_coordinates.py,sha256=0zem18y7vT9d_lBAUwF6EqxoUG29qD_nblI0RDx8oH4,11960
83
84
  junifer/data/coordinates/_fsl_coordinates_warper.py,sha256=9R0JiyYWXogMr1i6DLepXkjb1aeTZ3CUoxvAPuxNGls,2568
84
85
  junifer/data/coordinates/VOIs/meta/AutobiographicalMemory_VOIs.txt,sha256=9af38naeL18Tlt_gy_ep6vyTAxOB336JYjbo5FvP8PQ,686
85
86
  junifer/data/coordinates/VOIs/meta/CogAC_VOIs.txt,sha256=Sr5_E712OLdeQRyUcDNM0wLBvZIyO6gc9Q7KkyJHX1A,398
@@ -105,7 +106,7 @@ junifer/data/masks/__init__.py,sha256=eEEhHglyVEx1LrqwXjq3cOmjf4sTsgBstRx5-k7zIQ
105
106
  junifer/data/masks/__init__.pyi,sha256=lcgr8gmWDPibC4RxnWBXb8DDpIkO73Aax09u6VXiJJI,114
106
107
  junifer/data/masks/_ants_mask_warper.py,sha256=6bBqFO9HNoYG5eYw4IVNZEv2sL58Koz-YXCdpM7U6NQ,4937
107
108
  junifer/data/masks/_fsl_mask_warper.py,sha256=mxxJy4WYbbMHEZSpNaBL1RDT4H0RmhA4u8fp7oOW_k4,2567
108
- junifer/data/masks/_masks.py,sha256=ku9DX2FFo1Ndjzvh-SZzcSK_--eF46H1zcS-1SMsfvg,20953
109
+ junifer/data/masks/_masks.py,sha256=2RMG9UL2GU11GgLaEoKPvrWVLtOVVf5etrTbEUefJm8,20960
109
110
  junifer/data/masks/tests/test_masks.py,sha256=RDYe8Z46M_hHdZn3hOvdqQXqiMlxJ6454gD3d1ee3zM,16132
110
111
  junifer/data/masks/ukb/UKB_15K_GM_template.nii.gz,sha256=jcX1pDOrDsoph8cPMNFVKH5gZYio5G4rJNpOFXm9wJI,946636
111
112
  junifer/data/masks/vickery-patil/CAT12_IXI555_MNI152_TMP_GS_GMprob0.2_clean.nii.gz,sha256=j6EY8EtRnUuRxeKgD65Q6B0GPEPIALKDJEIje1TfnAU,88270
@@ -115,7 +116,7 @@ junifer/data/parcellations/__init__.py,sha256=6-Ysil3NyZ69V6rWx4RO15_d-iDKizfbHu
115
116
  junifer/data/parcellations/__init__.pyi,sha256=lhBHTbMDizzqUqVHrx2eyfPFodrTBgMFeTgxfESSkQ8,140
116
117
  junifer/data/parcellations/_ants_parcellation_warper.py,sha256=1oOY_O0Ft0NOkGjk4Cx8lyChy7QYJRZbOtdQfDpo4jI,5399
117
118
  junifer/data/parcellations/_fsl_parcellation_warper.py,sha256=PwGXT1fEchjIIyQJVr53Ksssf6hHJTtJwgJj8t65LTA,2839
118
- junifer/data/parcellations/_parcellations.py,sha256=6aU7CaOixDB-jhe1AW-l6STpOtniNduL-bFUH6m3Lgs,65773
119
+ junifer/data/parcellations/_parcellations.py,sha256=qgAZ1A17PMHEzKtZoEvdfL0VScMy1RIaOJ_C03x-Za0,65780
119
120
  junifer/data/parcellations/tests/test_parcellations.py,sha256=43h7lR7nEvo9vTK-AeUDMk0XdGTqyzQI8isYl8dWw6s,38339
120
121
  junifer/data/tests/test_data_utils.py,sha256=_DaiC8K79gs9HFHxr-udNeE2YTM6JA0-1i-K2cqK9qA,1087
121
122
  junifer/data/tests/test_template_spaces.py,sha256=PJulN7xHpAcSOTY-UzTG_WPywZEBSlAZGiNG4gzk1_8,3144
@@ -143,7 +144,7 @@ junifer/datagrabber/hcp1200/__init__.pyi,sha256=2ttZanYSzCsB195_xfXUyztPsVIF02AR
143
144
  junifer/datagrabber/hcp1200/datalad_hcp1200.py,sha256=hngQYLv4b8tC9Ep2X5A5R_L2sFM3ZJ8dmWTr_OlRLAA,2463
144
145
  junifer/datagrabber/hcp1200/hcp1200.py,sha256=AfVPd44CdyMcrUTOfps2PSpTQrXde68QeZaLGkXUTn4,6116
145
146
  junifer/datagrabber/hcp1200/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
146
- junifer/datagrabber/hcp1200/tests/test_hcp1200.py,sha256=KJ-Jq01l0a6TaboG898qjBdPTHG1E3PZtHCjJ7n-1X0,10765
147
+ junifer/datagrabber/hcp1200/tests/test_hcp1200.py,sha256=17LK9fRAKmRQipo8UAgLOx9rA8G-91cTR_V_uAfKffk,10945
147
148
  junifer/datagrabber/tests/test_base.py,sha256=fZdVhNhvfht9lpTHrAUf5E6mAfNNUP7OTQ5KLaBQ1gI,3506
148
149
  junifer/datagrabber/tests/test_datalad_base.py,sha256=71erxpAECuy8iLtkmq_SRqfP4sKQf4uEb3O8CThBHT0,16285
149
150
  junifer/datagrabber/tests/test_dmcc13_benchmark.py,sha256=DcqkDXXBoabHFVbxekGR2NZyGeugGlxpOwXIwy38Ofg,9109
@@ -207,8 +208,8 @@ junifer/markers/complexity/tests/test_sample_entropy.py,sha256=rfbiguVq7CUwYIvYB
207
208
  junifer/markers/complexity/tests/test_weighted_perm_entropy.py,sha256=yDWKEaUbxrnrG6J2NlktLfwSBre5OuXd63kEof7t8PM,2373
208
209
  junifer/markers/falff/__init__.py,sha256=qxdx_3FsVrn7h3gtbocK0ZmvqZwPQZGKuVkPm31ejNM,217
209
210
  junifer/markers/falff/__init__.pyi,sha256=X-q2zBjUX0imQ37yN2Cg5gKfDvq8sh_9y2hRH4g5ufY,120
210
- junifer/markers/falff/_afni_falff.py,sha256=QNi_4MU4_sfnfXedrYHT-kn17KCDE6a7ELfSGmRZPmA,4521
211
- junifer/markers/falff/_junifer_falff.py,sha256=Datf23VxbiD6ZiC-3tANN9MMVHuZKzQx04nX1GXA25c,4417
211
+ junifer/markers/falff/_afni_falff.py,sha256=6kHNWU9k-U6_wlCnysDK90svCqcRggVGOD4SjHnoI9I,4528
212
+ junifer/markers/falff/_junifer_falff.py,sha256=UPu3myI6cNoDU1FB0t4Y71KOubPG1xBntdgZysOHiro,4424
212
213
  junifer/markers/falff/falff_base.py,sha256=1VjEZMd7BpXDc2subm0VzZNxFp6uxMb9QjBmMC6tDVg,4903
213
214
  junifer/markers/falff/falff_parcels.py,sha256=RuACr7qjxJ6fDo8KrbO2fUwpLtzLQXPr9WX4n--XUb0,6029
214
215
  junifer/markers/falff/falff_spheres.py,sha256=ZjcPLg29LBfsCLD8iZk0pW0nItH5uLmsn4nlLoUNB78,6668
@@ -232,8 +233,8 @@ junifer/markers/functional_connectivity/tests/test_functional_connectivity_parce
232
233
  junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py,sha256=OU2FWAH0Gb4gEOF0m1PAoo5xLKVPetNkwV-ssQTZ1Yw,4157
233
234
  junifer/markers/reho/__init__.py,sha256=WZf4A0XaRThjl8SlFOhvTLUfhTHp5koLxZgowsgTSAE,211
234
235
  junifer/markers/reho/__init__.pyi,sha256=_aFb-Ry_EP2OMU6xRL4GlfuDpSl_egHllL-fz7vXjcE,118
235
- junifer/markers/reho/_afni_reho.py,sha256=iaZFPJbyB9-QQAZ5-kKxwN0APB5MH85pOAChq-JFLNI,6469
236
- junifer/markers/reho/_junifer_reho.py,sha256=7-jD28YQQWb3dfT6SxyYfGugFSq8wi7_2hUA-ryiGAo,9307
236
+ junifer/markers/reho/_afni_reho.py,sha256=eMHTaj2-zEHVgkz96Xx30Wn5sAGhXO-JmgItQAI9eNo,6476
237
+ junifer/markers/reho/_junifer_reho.py,sha256=GFaKoEPUiLk9YRLXTfWplEhQmYipXWkPQj-7YvMXKO0,9314
237
238
  junifer/markers/reho/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
238
239
  junifer/markers/reho/reho_base.py,sha256=Tdnl5SJ66p461UJ-UilEGKrMdEPwGMemN_QIQgmc8o8,4065
239
240
  junifer/markers/reho/reho_parcels.py,sha256=tfGasSaAI-ioxVBTD2L_4gJQthoAq5Fp9e5iRS3mXhI,6404
@@ -262,18 +263,17 @@ junifer/onthefly/tests/test_read_transform.py,sha256=D2C3IpXQHdsJSF07v8rEwGntLGX
262
263
  junifer/pipeline/__init__.py,sha256=rxKQGRwc6_sts1KhVIcVVpuXeiFABf11mQQ2h5jgA3U,194
263
264
  junifer/pipeline/__init__.pyi,sha256=hhcvNcABhtLaUQiZdTjo5sMWC3rtDkwVshL0sxD5JAE,399
264
265
  junifer/pipeline/marker_collection.py,sha256=1xcJqeOZ_IerB7PAMN1itWBv8UR6lUW9xXRoIu4qLXU,5557
265
- junifer/pipeline/pipeline_component_registry.py,sha256=TVtAFf0QjeES7TFovc6_nUlkczNeQnDpq85aqNr5Gjg,9484
266
+ junifer/pipeline/pipeline_component_registry.py,sha256=XE4lSSd6STp2VBhsaG21-tfe8kRt97N-1zwE26fF7Yc,9501
266
267
  junifer/pipeline/pipeline_step_mixin.py,sha256=wakimkG8GC0PWkFHMHIfgzM2yak41xLrzbVRH0oe8D4,7613
267
268
  junifer/pipeline/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
268
- junifer/pipeline/singleton.py,sha256=c5U8Xn10MQqaXjlLzxLbw3AmSYW6aTw_iSL0rDkbuMU,1011
269
269
  junifer/pipeline/update_meta_mixin.py,sha256=A_gYCPqdPlM0Xpum9TjJowb41O7ntxQg6y4YOgYeyy4,1564
270
270
  junifer/pipeline/utils.py,sha256=CAp0P7rZST7bsJ9lSlkvZgIJebHW2cIm8VXTuu1A6tE,10291
271
- junifer/pipeline/workdir_manager.py,sha256=8vBKdb7FtQaGV66Ngu_ucJJPrh2xoxf_1jMeNpJKT2Y,8050
271
+ junifer/pipeline/workdir_manager.py,sha256=T7-sZY_Gj0SM7p9N1ATjUFK2T-6CYIMQeYwHpBz96Gs,8616
272
272
  junifer/pipeline/tests/test_marker_collection.py,sha256=edBHfmwMTXG_q0ZagApbAbkFNoegi3hVEQiNcBtZOKc,6959
273
273
  junifer/pipeline/tests/test_pipeline_component_registry.py,sha256=ww_akEhtvE1_fsWbX5Yd5w_G2Ki6w_5MInfihwwRYFk,5800
274
274
  junifer/pipeline/tests/test_pipeline_step_mixin.py,sha256=_ykZzyNzREXy-r_yv1gY_jquLZzVBl8qwYrVORCKY_k,7807
275
275
  junifer/pipeline/tests/test_update_meta_mixin.py,sha256=UeWwpUi-Q5WVd36Fgfn_utXplSVXMSjLcdO2mR2xLTk,1355
276
- junifer/pipeline/tests/test_workdir_manager.py,sha256=E1WY4C-GDsx2c49sePqr1WR_Y3nZ1kiRn4Veu506uTs,2801
276
+ junifer/pipeline/tests/test_workdir_manager.py,sha256=N7_5cTnmv0eSQCT9UWOmFFVT-BIrNWq8GFmaqa-BtRI,4050
277
277
  junifer/preprocess/__init__.py,sha256=91D43p254il88g-7sSN64M7HsCvwytYoiTS_GLEr37Y,342
278
278
  junifer/preprocess/__init__.pyi,sha256=EApXtuEZohQZnIeP6k882Y2H5IRiGmhJbVGdN7VCWFc,254
279
279
  junifer/preprocess/base.py,sha256=v6azVA3RwDe3HriYlcaISOX1A6gYgFUKNzQeIDLx92Q,6681
@@ -332,13 +332,14 @@ junifer/utils/fs.py,sha256=M3CKBLh4gPS6s9giyopgb1hHMXzLb6k3cung2wHVBjs,492
332
332
  junifer/utils/helpers.py,sha256=_IqnaPaOcFy1yrEyNmmg7XqQWb1wHOtxfOBnlaRYbiI,2063
333
333
  junifer/utils/logging.py,sha256=ardaiJkDfZMYvak5UIL5Etxg5Ii7inmVQSBdFLdgtb8,9781
334
334
  junifer/utils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
335
+ junifer/utils/singleton.py,sha256=3mEZT4GJ7lMkH8H7ZPgy0DBe6CNTqg9CRVJFDAy3h60,1201
335
336
  junifer/utils/tests/test_fs.py,sha256=WQS7cKlKEZ742CIuiOYYpueeAhY9PqlastfDVpVVtvE,923
336
337
  junifer/utils/tests/test_helpers.py,sha256=k5qqfxK8dFyuewTJyR1Qn6-nFaYNuVr0ysc18bfPjyU,929
337
338
  junifer/utils/tests/test_logging.py,sha256=duO4ou365hxwa_kwihFtKPLaL6LC5XHiyhOijrrngbA,8009
338
- junifer-0.0.6.dev205.dist-info/AUTHORS.rst,sha256=rmULKpchpSol4ExWFdm-qu4fkpSZPYqIESVJBZtGb6E,163
339
- junifer-0.0.6.dev205.dist-info/LICENSE.md,sha256=MqCnOBu8uXsEOzRZWh9EBVfVz-kE9NkXcLCrtGXo2yU,34354
340
- junifer-0.0.6.dev205.dist-info/METADATA,sha256=NZlUfhUouB1p0jvcp6C94uiNFLUs6CFE07DyG6DNW-8,8448
341
- junifer-0.0.6.dev205.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
342
- junifer-0.0.6.dev205.dist-info/entry_points.txt,sha256=6O8ru0BP-SP7YMUZiizFNoaZ2HvJpadO2G7nKk4PwjI,48
343
- junifer-0.0.6.dev205.dist-info/top_level.txt,sha256=4bAq1R2QFQ4b3hohjys2JBvxrl0GKk5LNFzYvz9VGcA,8
344
- junifer-0.0.6.dev205.dist-info/RECORD,,
339
+ junifer-0.0.6.dev219.dist-info/AUTHORS.rst,sha256=rmULKpchpSol4ExWFdm-qu4fkpSZPYqIESVJBZtGb6E,163
340
+ junifer-0.0.6.dev219.dist-info/LICENSE.md,sha256=MqCnOBu8uXsEOzRZWh9EBVfVz-kE9NkXcLCrtGXo2yU,34354
341
+ junifer-0.0.6.dev219.dist-info/METADATA,sha256=NmVabUMfIEWcEJ8nOtLA7HTzwuZYBhoIZPA1Z44ycdw,8448
342
+ junifer-0.0.6.dev219.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
343
+ junifer-0.0.6.dev219.dist-info/entry_points.txt,sha256=6O8ru0BP-SP7YMUZiizFNoaZ2HvJpadO2G7nKk4PwjI,48
344
+ junifer-0.0.6.dev219.dist-info/top_level.txt,sha256=4bAq1R2QFQ4b3hohjys2JBvxrl0GKk5LNFzYvz9VGcA,8
345
+ junifer-0.0.6.dev219.dist-info/RECORD,,