junifer 0.0.6.dev266__py3-none-any.whl → 0.0.6.dev277__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.dev266'
16
- __version_tuple__ = version_tuple = (0, 0, 6, 'dev266')
15
+ __version__ = version = '0.0.6.dev277'
16
+ __version_tuple__ = version_tuple = (0, 0, 6, 'dev277')
junifer/api/decorators.py CHANGED
@@ -13,8 +13,8 @@ from ..typing import DataGrabberLike, MarkerLike, PreprocessorLike, StorageLike
13
13
  __all__ = [
14
14
  "register_datagrabber",
15
15
  "register_datareader",
16
- "register_preprocessor",
17
16
  "register_marker",
17
+ "register_preprocessor",
18
18
  "register_storage",
19
19
  ]
20
20
 
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__ = ["run", "collect", "queue", "reset", "list_elements"]
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
- "list_elements",
41
+ "run",
42
+ "selftest",
40
43
  "setup",
41
- "afni_docker",
42
- "fsl_docker",
43
- "ants_docker",
44
- "freesurfer_docker",
44
+ "wtf",
45
45
  ]
46
46
 
47
47
 
junifer/cli/parser.py CHANGED
@@ -15,7 +15,7 @@ import pandas as pd
15
15
  from ..utils import logger, raise_error, warn_with_log, yaml
16
16
 
17
17
 
18
- __all__ = ["parse_yaml", "parse_elements"]
18
+ __all__ = ["parse_elements", "parse_yaml"]
19
19
 
20
20
 
21
21
  def parse_yaml(filepath: Union[str, Path]) -> dict: # noqa: C901
junifer/data/_dispatch.py CHANGED
@@ -25,11 +25,11 @@ if TYPE_CHECKING:
25
25
 
26
26
 
27
27
  __all__ = [
28
+ "deregister_data",
28
29
  "get_data",
29
30
  "list_data",
30
31
  "load_data",
31
32
  "register_data",
32
- "deregister_data",
33
33
  ]
34
34
 
35
35
 
@@ -35,7 +35,7 @@ if TYPE_CHECKING:
35
35
  from nibabel.nifti1 import Nifti1Image
36
36
 
37
37
 
38
- __all__ = ["compute_brain_mask", "MaskRegistry"]
38
+ __all__ = ["MaskRegistry", "compute_brain_mask"]
39
39
 
40
40
 
41
41
  # Path to the masks
@@ -16,7 +16,7 @@ from ..utils import logger, raise_error
16
16
  from .utils import closest_resolution
17
17
 
18
18
 
19
- __all__ = ["get_xfm", "get_template"]
19
+ __all__ = ["get_template", "get_xfm"]
20
20
 
21
21
 
22
22
  def get_xfm(
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__ = ["get_aggfunc_by_name", "count", "winsorized_mean", "select"]
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
 
@@ -15,8 +15,8 @@ from ..datagrabber.base import BaseDataGrabber
15
15
 
16
16
  __all__ = [
17
17
  "OasisVBMTestingDataGrabber",
18
- "SPMAuditoryTestingDataGrabber",
19
18
  "PartlyCloudyTestingDataGrabber",
19
+ "SPMAuditoryTestingDataGrabber",
20
20
  ]
21
21
 
22
22
 
@@ -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
- "PreprocessorLike",
24
- "MarkerLike",
25
- "StorageLike",
26
- "PipelineComponent",
25
+ "DataGrabberPatterns",
27
26
  "Dependencies",
28
- "ConditionalDependencies",
29
27
  "ExternalDependencies",
30
28
  "MarkerInOutMappings",
31
- "DataGrabberPatterns",
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]
@@ -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
@@ -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
@@ -10,7 +10,7 @@ import sys
10
10
  from .logging import logger, raise_error
11
11
 
12
12
 
13
- __all__ = ["run_ext_cmd", "deep_update"]
13
+ __all__ = ["deep_update", "run_ext_cmd"]
14
14
 
15
15
 
16
16
  def run_ext_cmd(name: str, cmd: list[str]) -> None:
junifer/utils/logging.py CHANGED
@@ -24,9 +24,9 @@ import datalad
24
24
 
25
25
  __all__ = [
26
26
  "WrapStdOut",
27
+ "configure_logging",
27
28
  "get_versions",
28
29
  "log_versions",
29
- "configure_logging",
30
30
  "raise_error",
31
31
  "warn_with_log",
32
32
  ]
@@ -8,7 +8,7 @@ from abc import ABCMeta
8
8
  from typing import Any, ClassVar
9
9
 
10
10
 
11
- __all__ = ["Singleton", "ABCSingleton"]
11
+ __all__ = ["ABCSingleton", "Singleton"]
12
12
 
13
13
 
14
14
  class Singleton(type):
@@ -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.dev266
3
+ Version: 0.0.6.dev277
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=fiEZu3h8Evv4yCwsFll_Ls-APBLYdJ7Qnm3jUM3IXXI,428
3
+ junifer/_version.py,sha256=oxdSo7e4dHuWGJ6fcFCd_o22QGOenmAuWxLqOvENYXw,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=pQCy9u4q3Wp0kMFmS0BVIfU8UCKsRqrNbyprhtlNUOg,6225
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=kEIcJIznNG_HwrvG9i7bnM1AeZOQPbSBmgDQ3yWFmIQ,2854
10
- junifer/api/functions.py,sha256=GB0CODQEAx6WOEFa7g1rSbWx8_4Qw8DQRdfC4JVPkrA,12826
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=kUAlbYIYQ5mKf_Q40Q0f73OMkkAz8B6Xy5eL6I4iY6U,13195
47
- junifer/cli/parser.py,sha256=3zmmdsrYzIci3TS8xGVlWeLUIgtaH2Z12OYnqG1ZKAc,8336
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=FcEZv7ZhWD4aYWzmzd9ZyUETADUJJmqvPqZpSwRsTa4,6158
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=Hcg4k1FL_kVhde6JJUXIQWd_fjqdtTto3nbzx8-t5Rc,6504
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=VsWY4GOrTOV6XsX-Usl8H_6s8AT6LLveBvLBUr6woFE,20729
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
@@ -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=bUtf13ADjlNOq0alYKXMWYPQaOSeSJ5R7tBmFZc6Cgo,7390
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=I5fwaKS3JtFLP1Xyt3Hs6PTVFVTQViYTiTQWL8U3MP8,6571
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=WbwaRGYrmDCnHtHDvxDshnEu_jh1fUjAd5VMOnpa1u4,504
330
- junifer/typing/_typing.py,sha256=cgQQq7CAFPeZTxko-22mWF2cp_S82JVNLTwMg0vsMAw,1507
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=fOijdjcdG5mBo6EdMB8gRZtzuS_zgfxRLBm1bBOQYK4,344
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=OaEvNm5H9PwLSuJcSTXCzSuHnP6obXUFqiNGK_YJ5F0,2033
336
- junifer/utils/logging.py,sha256=9m7jW4XmaAWBvuvPCZqVh5MYXJu29pSuaJWH6Au9FNM,9769
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=pp2jOGXmTdZSf4XDL-5S79YKY1Iag1inyWBjVC0Ic9U,1189
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.dev266.dist-info/AUTHORS.rst,sha256=rmULKpchpSol4ExWFdm-qu4fkpSZPYqIESVJBZtGb6E,163
343
- junifer-0.0.6.dev266.dist-info/LICENSE.md,sha256=MqCnOBu8uXsEOzRZWh9EBVfVz-kE9NkXcLCrtGXo2yU,34354
344
- junifer-0.0.6.dev266.dist-info/METADATA,sha256=9Lw969usLGZMdSIMvJElhhirszkEB21kSjZ8LNdfVNw,8429
345
- junifer-0.0.6.dev266.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
346
- junifer-0.0.6.dev266.dist-info/entry_points.txt,sha256=6O8ru0BP-SP7YMUZiizFNoaZ2HvJpadO2G7nKk4PwjI,48
347
- junifer-0.0.6.dev266.dist-info/top_level.txt,sha256=4bAq1R2QFQ4b3hohjys2JBvxrl0GKk5LNFzYvz9VGcA,8
348
- junifer-0.0.6.dev266.dist-info/RECORD,,
344
+ junifer-0.0.6.dev277.dist-info/AUTHORS.rst,sha256=rmULKpchpSol4ExWFdm-qu4fkpSZPYqIESVJBZtGb6E,163
345
+ junifer-0.0.6.dev277.dist-info/LICENSE.md,sha256=MqCnOBu8uXsEOzRZWh9EBVfVz-kE9NkXcLCrtGXo2yU,34354
346
+ junifer-0.0.6.dev277.dist-info/METADATA,sha256=_f6DUBkVFhbhg_l8PQXSibG-3q9WIM6EP9PBvayajuA,8429
347
+ junifer-0.0.6.dev277.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
348
+ junifer-0.0.6.dev277.dist-info/entry_points.txt,sha256=6O8ru0BP-SP7YMUZiizFNoaZ2HvJpadO2G7nKk4PwjI,48
349
+ junifer-0.0.6.dev277.dist-info/top_level.txt,sha256=4bAq1R2QFQ4b3hohjys2JBvxrl0GKk5LNFzYvz9VGcA,8
350
+ junifer-0.0.6.dev277.dist-info/RECORD,,