junifer 0.0.4.dev493__py3-none-any.whl → 0.0.4.dev530__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.
@@ -3,12 +3,16 @@
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
4
  # License: AGPL
5
5
 
6
+ import socket
7
+ from pathlib import Path
6
8
  from typing import List
7
9
 
10
+ import nibabel as nib
8
11
  import pytest
9
12
 
10
- # from junifer.datareader import DefaultDataReader
11
- # from junifer.pipeline.utils import _check_fsl
13
+ from junifer.datagrabber import DataladHCP1200
14
+ from junifer.datareader import DefaultDataReader
15
+ from junifer.pipeline.utils import _check_fsl
12
16
  from junifer.preprocess.fsl.apply_warper import _ApplyWarper
13
17
 
14
18
 
@@ -47,27 +51,54 @@ def test_ApplyWarper_get_output_type(input_: List[str]) -> None:
47
51
  assert apply_warper.get_output_type(input_) == input_
48
52
 
49
53
 
50
- @pytest.mark.skip(reason="requires testing dataset")
51
- # @pytest.mark.skipif(
52
- # _check_fsl() is False, reason="requires fsl to be in PATH"
53
- # )
54
+ @pytest.mark.skipif(_check_fsl() is False, reason="requires FSL to be in PATH")
55
+ @pytest.mark.skipif(
56
+ socket.gethostname() != "juseless",
57
+ reason="only for juseless",
58
+ )
54
59
  def test_ApplyWarper__run_applywarp() -> None:
55
60
  """Test ApplyWarper _run_applywarp."""
56
- # Initialize datareader
57
- # reader = DefaultDataReader()
58
- # Initialize preprocessor
59
- # bold_warper = _ApplyWarper(reference="T1w", on="BOLD")
60
- # TODO(synchon): setup datagrabber and run pipeline
61
-
62
-
63
- @pytest.mark.skip(reason="requires testing dataset")
64
- # @pytest.mark.skipif(
65
- # _check_fsl() is False, reason="requires fsl to be in PATH"
66
- # )
61
+ with DataladHCP1200(
62
+ tasks=["REST1"],
63
+ phase_encodings=["LR"],
64
+ ica_fix=True,
65
+ ) as dg:
66
+ # Read data
67
+ element_data = DefaultDataReader().fit_transform(
68
+ dg[("100206", "REST1", "LR")]
69
+ )
70
+ # Preprocess data
71
+ warped_data, resampled_ref_path = _ApplyWarper(
72
+ reference="T1w", on="BOLD"
73
+ )._run_applywarp(
74
+ input_data=element_data["BOLD"],
75
+ ref_path=element_data["T1w"]["path"],
76
+ warp_path=element_data["Warp"]["path"],
77
+ )
78
+ assert isinstance(warped_data, nib.Nifti1Image)
79
+ assert isinstance(resampled_ref_path, Path)
80
+
81
+
82
+ @pytest.mark.skipif(_check_fsl() is False, reason="requires FSL to be in PATH")
83
+ @pytest.mark.skipif(
84
+ socket.gethostname() != "juseless",
85
+ reason="only for juseless",
86
+ )
67
87
  def test_ApplyWarper_preprocess() -> None:
68
88
  """Test ApplyWarper preprocess."""
69
- # Initialize datareader
70
- # reader = DefaultDataReader()
71
- # Initialize preprocessor
72
- # bold_warper = _ApplyWarper(reference="T1w", on="BOLD")
73
- # TODO(synchon): setup datagrabber and run pipeline
89
+ with DataladHCP1200(
90
+ tasks=["REST1"],
91
+ phase_encodings=["LR"],
92
+ ica_fix=True,
93
+ ) as dg:
94
+ # Read data
95
+ element_data = DefaultDataReader().fit_transform(
96
+ dg[("100206", "REST1", "LR")]
97
+ )
98
+ # Preprocess data
99
+ data_type, data = _ApplyWarper(reference="T1w", on="BOLD").preprocess(
100
+ input=element_data["BOLD"],
101
+ extra_input=element_data,
102
+ )
103
+ assert isinstance(data_type, str)
104
+ assert isinstance(data, dict)
@@ -3,15 +3,21 @@
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
4
  # License: AGPL
5
5
 
6
- from typing import List
6
+ import socket
7
+ from typing import TYPE_CHECKING, List, Tuple
7
8
 
8
9
  import pytest
9
10
 
10
- # from junifer.datareader import DefaultDataReader
11
- # from junifer.pipeline.utils import _check_fsl
11
+ from junifer.datagrabber import DataladHCP1200, DMCC13Benchmark
12
+ from junifer.datareader import DefaultDataReader
13
+ from junifer.pipeline.utils import _check_ants, _check_fsl
12
14
  from junifer.preprocess import BOLDWarper
13
15
 
14
16
 
17
+ if TYPE_CHECKING:
18
+ from junifer.datagrabber import BaseDataGrabber
19
+
20
+
15
21
  def test_BOLDWarper_init() -> None:
16
22
  """Test BOLDWarper init."""
17
23
  bold_warper = BOLDWarper(reference="T1w")
@@ -45,14 +51,58 @@ def test_BOLDWarper_get_output_type(input_: List[str]) -> None:
45
51
  assert bold_warper.get_output_type(input_) == input_
46
52
 
47
53
 
48
- @pytest.mark.skip(reason="requires testing dataset")
49
- # @pytest.mark.skipif(
50
- # _check_fsl() is False, reason="requires fsl to be in PATH"
51
- # )
52
- def test_BOLDWarper_preprocess() -> None:
53
- """Test BOLDWarper preprocess."""
54
- # Initialize datareader
55
- # reader = DefaultDataReader()
56
- # Initialize preprocessor
57
- # bold_warper = BOLDWarper(reference="T1w")
58
- # TODO(synchon): setup datagrabber and run pipeline
54
+ @pytest.mark.parametrize(
55
+ "datagrabber, element",
56
+ [
57
+ [
58
+ DMCC13Benchmark(
59
+ types=["BOLD", "T1w", "Warp"],
60
+ sessions=["wave1bas"],
61
+ tasks=["Rest"],
62
+ phase_encodings=["AP"],
63
+ runs=["1"],
64
+ native_t1w=True,
65
+ ),
66
+ ("f9057kp", "wave1bas", "Rest", "AP", "1"),
67
+ ],
68
+ [
69
+ DataladHCP1200(
70
+ tasks=["REST1"],
71
+ phase_encodings=["LR"],
72
+ ica_fix=True,
73
+ ),
74
+ ("100206", "REST1", "LR"),
75
+ ],
76
+ ],
77
+ )
78
+ @pytest.mark.skipif(_check_fsl() is False, reason="requires FSL to be in PATH")
79
+ @pytest.mark.skipif(
80
+ _check_ants() is False, reason="requires ANTs to be in PATH"
81
+ )
82
+ @pytest.mark.skipif(
83
+ socket.gethostname() != "juseless",
84
+ reason="only for juseless",
85
+ )
86
+ def test_BOLDWarper_preprocess(
87
+ datagrabber: "BaseDataGrabber", element: Tuple[str, ...]
88
+ ) -> None:
89
+ """Test BOLDWarper preprocess.
90
+
91
+ Parameters
92
+ ----------
93
+ datagrabber : DataGrabber-like object
94
+ The parametrized DataGrabber objects.
95
+ element : tuple of str
96
+ The parametrized elements.
97
+
98
+ """
99
+ with datagrabber as dg:
100
+ # Read data
101
+ element_data = DefaultDataReader().fit_transform(dg[element])
102
+ # Preprocess data
103
+ data_type, data = BOLDWarper(reference="T1w").preprocess(
104
+ input=element_data["BOLD"],
105
+ extra_input=element_data,
106
+ )
107
+ assert data_type == "BOLD"
108
+ assert isinstance(data, dict)
junifer/utils/__init__.py CHANGED
@@ -6,3 +6,4 @@
6
6
 
7
7
  from .fs import make_executable
8
8
  from .logging import configure_logging, logger, raise_error, warn_with_log
9
+ from .helpers import run_ext_cmd
@@ -0,0 +1,53 @@
1
+ """Provide helper functions for the package."""
2
+
3
+ # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
+ # License: AGPL
5
+
6
+ import subprocess
7
+ from typing import List
8
+
9
+ from .logging import logger, raise_error
10
+
11
+
12
+ def run_ext_cmd(name: str, cmd: List[str]) -> None:
13
+ """Run external command via subprocess.
14
+
15
+ Parameters
16
+ ----------
17
+ name : str
18
+ The name of the command.
19
+ cmd : list of str
20
+ The command to run as list of string.
21
+
22
+ Raises
23
+ ------
24
+ RuntimeError
25
+ If command fails.
26
+
27
+ """
28
+ # Convert list to str
29
+ cmd_str = " ".join(cmd)
30
+ logger.info(f"{name} command to be executed:\n{cmd_str}")
31
+ # Run command via subprocess
32
+ process = subprocess.run(
33
+ cmd_str, # string needed with shell=True
34
+ stdin=subprocess.DEVNULL,
35
+ stdout=subprocess.PIPE,
36
+ stderr=subprocess.STDOUT,
37
+ shell=True, # needed for respecting $PATH
38
+ check=False,
39
+ )
40
+ # Check for success or failure
41
+ if process.returncode == 0:
42
+ logger.info(
43
+ f"{name} command succeeded with the following output:\n"
44
+ f"{process.stdout}"
45
+ )
46
+ else:
47
+ raise_error(
48
+ msg=(
49
+ f"{name} command failed with the following error:\n"
50
+ f"{process.stdout}"
51
+ ),
52
+ klass=RuntimeError,
53
+ )
@@ -0,0 +1,35 @@
1
+ """Provide tests for helper functions."""
2
+
3
+ # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
+ # License: AGPL
5
+
6
+ import logging
7
+
8
+ import pytest
9
+
10
+ from junifer.utils.helpers import run_ext_cmd
11
+
12
+
13
+ def test_run_ext_cmd_success(caplog: pytest.LogCaptureFixture) -> None:
14
+ """Test external command run success.
15
+
16
+ Parameters
17
+ ----------
18
+ caplog : pytest.LogCaptureFixture
19
+ The pytest.LogCaptureFixture object.
20
+
21
+ """
22
+ # Set log capturing at INFO
23
+ with caplog.at_level(logging.INFO):
24
+ # Run external command
25
+ run_ext_cmd(name="pwd", cmd=["pwd"])
26
+ # Check logging message
27
+ assert "executed" in caplog.text
28
+ assert "succeeded" in caplog.text
29
+
30
+
31
+ def test_run_ext_cmd_failure() -> None:
32
+ """Test external command run failure."""
33
+ with pytest.raises(RuntimeError, match="failed"):
34
+ # Run external command
35
+ run_ext_cmd(name="flymetothemoon", cmd=["flymetothemoon"])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: junifer
3
- Version: 0.0.4.dev493
3
+ Version: 0.0.4.dev530
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,5 +1,5 @@
1
1
  junifer/__init__.py,sha256=x1UR2jUcrUdm2HNl-3Qvyi4UUrU6ms5qm2qcmNY7zZk,391
2
- junifer/_version.py,sha256=s3b4obIT6-Dm0gw7Hf_6VelPhsN39hihLhhrnI_A6sU,428
2
+ junifer/_version.py,sha256=UAZSywn04AiXQwVQkUu_X6dPMnW5TVCTZAN98gzqfqU,428
3
3
  junifer/stats.py,sha256=sU5IZ2qFZWbzgSutQS_z42miIVItpSGmQYBn6KkD5fA,6162
4
4
  junifer/api/__init__.py,sha256=YILu9M7SC0Ri4CVd90fELH2OnK_gvCYAXCoqBNCFE8E,257
5
5
  junifer/api/cli.py,sha256=xScav2mF-Jr8JjVFt8kaHuLpX5l_jVTaQGPgQL3VNvA,12881
@@ -13,6 +13,7 @@ junifer/api/res/afni/3dRSFC,sha256=MkPtS_nKEoJOHDAT3ZP9IA-SvMdhyzZDiyxObV_XI3g,4
13
13
  junifer/api/res/afni/3dReHo,sha256=Jb5B97iPPPQ14zAz7tK5BVG4jPZyOe9c6kgM6ixKaY8,44
14
14
  junifer/api/res/afni/afni,sha256=idLvNWHwd6P4jWXfk6hMXQckdpcTJYbvnLC3uNP6sBg,42
15
15
  junifer/api/res/afni/run_afni_docker.sh,sha256=_MHr4oEfnjvFEegx8VWl3S0Js0KioySvtJfdxyea0JE,1130
16
+ junifer/api/res/ants/ResampleImage,sha256=oJKZ31rBAW20ETozB8Ub5SbXMuhmZfrerpJTnRu-hOY,51
16
17
  junifer/api/res/ants/antsApplyTransforms,sha256=SqlQEJ2RMMw_qGyDaNTXKzQqO7Bvrm6y5SEPmyqHiYc,57
17
18
  junifer/api/res/ants/antsApplyTransformsToPoints,sha256=lqyvQGo8oI-RNpNlRqz-BvLHh7Th5HQgsDZjHF6nEeI,65
18
19
  junifer/api/res/ants/run_ants_docker.sh,sha256=d6lZ9CCPP3nsCALhW4T4tI67gyUSiM4AuXj5JPKTLtA,1119
@@ -41,9 +42,9 @@ junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py,sha256=8jxpNZelXwpJG
41
42
  junifer/configs/juseless/datagrabbers/tests/test_ucla.py,sha256=e-jdvcZ9B0mka6_573JJU_cGwSaUV54U8X_n0UadtJY,3351
42
43
  junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py,sha256=b9hjc1mgO--PSRC3id2EzzfE2yWNsuZ2UI47a6sfGZU,1025
43
44
  junifer/data/__init__.py,sha256=oUjOs8_M6fitNb44izxpXf3su1e4pG_vCdjwVYkjZjQ,550
44
- junifer/data/coordinates.py,sha256=rwjPb6hYlCpxqM73UNatl7bLtXEF9o8nIEwXz1iwERE,11317
45
- junifer/data/masks.py,sha256=gsA8_1l011uq2E0hRZvQvfk3_ER8HFsmWd3h6o5qPxE,17311
46
- junifer/data/parcellations.py,sha256=wL8lkAYYvg7NDt160EA8N_xFjK8ZtDwoXYJQHNHwbDU,55805
45
+ junifer/data/coordinates.py,sha256=GcL95_wzW5t4iNNmRbgD6IwwH-ERMChJK3kWfZ3ORDc,12701
46
+ junifer/data/masks.py,sha256=81v3GhAf9lc_CobV9f6n_vMK1jWZCbeANmopa02XZOQ,17744
47
+ junifer/data/parcellations.py,sha256=72Gv7Rn5Ppyi2z7m9t9cuwS62yocXEL_bG2uoFUyWww,56211
47
48
  junifer/data/utils.py,sha256=K9quLIoWRmm2QFM8Rdy_5bYsWb_XhL0l5Uq_1Sie0kA,1274
48
49
  junifer/data/VOIs/meta/CogAC_VOIs.txt,sha256=Sr5_E712OLdeQRyUcDNM0wLBvZIyO6gc9Q7KkyJHX1A,398
49
50
  junifer/data/VOIs/meta/CogAR_VOIs.txt,sha256=t3NLwEVUZTPP34p15SaB3UInLrQyK-7Qc4iLBuQlZu8,189
@@ -134,7 +135,7 @@ junifer/markers/complexity/tests/test_sample_entropy.py,sha256=3IeDnDgSeFNmUoPxQ
134
135
  junifer/markers/complexity/tests/test_weighted_perm_entropy.py,sha256=M7Qt_SFZSmptMi0cBGh5Merd1_3hPieIddl_pz7MWbs,2088
135
136
  junifer/markers/falff/__init__.py,sha256=QAUIVtaOFWDL7B8xFrDgsmRum7Q0DCENyDYD1cPMJmM,197
136
137
  junifer/markers/falff/falff_base.py,sha256=isHD643TvDFg7YJxpopHSrpJlgUwx2fW0tzJeSio6c8,6323
137
- junifer/markers/falff/falff_estimator.py,sha256=ayXdQWHUyYyeR7NulOPZpYXkjQ2V8HlbHhy-jDKtZI0,12869
138
+ junifer/markers/falff/falff_estimator.py,sha256=U56sp9wfo5T-MOQN79XSiwj3113x-z8wFIMIwrP5KME,11905
138
139
  junifer/markers/falff/falff_parcels.py,sha256=UTADrIl96eO_xZ90LtOIt7tuN2eLDPnfIJghr9HAO88,4550
139
140
  junifer/markers/falff/falff_spheres.py,sha256=XR2pcBRxjyTZ-J7j_HOjL20_2IHgYO0dI9x4LlQFoVE,5086
140
141
  junifer/markers/falff/tests/test_falff_estimator.py,sha256=aVnkFvPqA5mTb9dXegwAJPku8Tf-1jWtDkfXhdcjDj8,8259
@@ -155,7 +156,7 @@ junifer/markers/functional_connectivity/tests/test_functional_connectivity_parce
155
156
  junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py,sha256=KOaMkLf7CEd1H8A92WpZAy6X6VNf6TADzYqsqXqvV4Q,4278
156
157
  junifer/markers/reho/__init__.py,sha256=9IfeAxKEVgMWbhud-8T54Le07I4pR6A29sMKeFtvEPg,189
157
158
  junifer/markers/reho/reho_base.py,sha256=d6oxynZ41EGd7f3zorRww6vMtFYF0PjD6RdAVlLq9BA,3932
158
- junifer/markers/reho/reho_estimator.py,sha256=88Ki-Ysq7MfmODynA_wk-7tvYdggmB_Z5HDa3gaZeoM,19692
159
+ junifer/markers/reho/reho_estimator.py,sha256=vLGQDBs9QMT7E7Oc9e8Jz70CScQ9JmlrDdxbEMAz8WA,17996
159
160
  junifer/markers/reho/reho_parcels.py,sha256=Q-gkB9aO0ncxgEQ68XEQKekpLLu_kXiYC6Xqkv8cdvY,6048
160
161
  junifer/markers/reho/reho_spheres.py,sha256=ng5JzYorEnYmFVlxRMOMwkLNFsq2FlMN4o95B_BBVo0,6565
161
162
  junifer/markers/reho/tests/test_reho_estimator.py,sha256=V_584X3I5a-XXAIs8YtR4TMuSqhMvGd5E1vcoDj8gQA,10168
@@ -190,14 +191,17 @@ junifer/pipeline/tests/test_update_meta_mixin.py,sha256=KiMqiTthXP24NMSyHJKKRhRG
190
191
  junifer/pipeline/tests/test_workdir_manager.py,sha256=E1WY4C-GDsx2c49sePqr1WR_Y3nZ1kiRn4Veu506uTs,2801
191
192
  junifer/preprocess/__init__.py,sha256=-3exohZnw-gJ-MjVM63WcXzBW1mbSetEVozcDfs5etc,342
192
193
  junifer/preprocess/base.py,sha256=syiNqI8pUjoGyShZSjs_RTsd5VHhwoqzIfPfFstr4f4,6230
193
- junifer/preprocess/bold_warper.py,sha256=Sia8mCdluYNrFkYsRx0vP-z_RNF7x-dwHcEDkmpvnHo,3277
194
+ junifer/preprocess/bold_warper.py,sha256=KOYCPCTJE92yI1juXK-3yl7VUxUhbzqqQxJrCYgk-0E,4572
195
+ junifer/preprocess/ants/__init__.py,sha256=Uobmbhh6_gOowkF2hQNSQOh3AYeaXzarBXEcLJzhERE,112
196
+ junifer/preprocess/ants/ants_apply_transforms_warper.py,sha256=V3y9EIGdIeJhJpnEVi123fHTK3R0sv_-OmWY7R_DC1M,6627
197
+ junifer/preprocess/ants/tests/test_ants_apply_transforms_warper.py,sha256=ibLLISss0o0wg3lqpLhL1oO7MfU_bZF5PBqY3OOd9sg,3737
194
198
  junifer/preprocess/confounds/__init__.py,sha256=EDlcD9jy8O9xluJr6XOnFXtjGCDVqwg6sDIRDMbM8ZU,235
195
199
  junifer/preprocess/confounds/fmriprep_confound_remover.py,sha256=23UJ6miqX0iE3dUMsZ1hzWoJDnMLl6WMlT-k9GFmAAU,21904
196
200
  junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py,sha256=OKACXAHytNrOAFZ5I2UcyfcYz5s2qeu31MZ9K71rWGc,22167
197
201
  junifer/preprocess/fsl/__init__.py,sha256=DerGFQ-dIuX5PT9a_BH6QkIXkJZVymjYy-woXF7tYGc,111
198
- junifer/preprocess/fsl/apply_warper.py,sha256=QTls4z2oF0qVqZ_S1yc-uYNUE9MeJZR4Lesv98SnJrc,7915
199
- junifer/preprocess/fsl/tests/test_apply_warper.py,sha256=qDDGeWGkxuthDB7y5f1MBMMMOKco2oz4GIcF6sJli44,2101
200
- junifer/preprocess/tests/test_bold_warper.py,sha256=PQ0Sg4pwciJFDus4Y-Kt6kGu1w1ETPiqVIa7IlYbd0A,1494
202
+ junifer/preprocess/fsl/apply_warper.py,sha256=_HU1-63A32cSQw9eNdgpKN52BFivn6cZaDa0_at-4UY,6215
203
+ junifer/preprocess/fsl/tests/test_apply_warper.py,sha256=b--MMPlaJw284gJWw-QV8rz6Rb2zmcBjYaY-cb6-uNU,3024
204
+ junifer/preprocess/tests/test_bold_warper.py,sha256=X4rs-IBu_Oe9wF81Xlh6ih9BCu8SUyDm64lXKk-l9Q8,2831
201
205
  junifer/preprocess/tests/test_preprocess_base.py,sha256=UHuH_YOK7AU3AfApWqgB6YLG-J669BgztuxNSWCtmtI,2560
202
206
  junifer/storage/__init__.py,sha256=QlzBw9UrRhmg_f7zQVas9h313u3sfZIBicA3_0Skm4M,337
203
207
  junifer/storage/base.py,sha256=ocFuP2M6ot8EticAc2wZZvp16mKXIYxHFYicSn1d-zE,9653
@@ -221,15 +225,17 @@ junifer/testing/tests/test_spmauditory_datagrabber.py,sha256=1G1emk-Ze59HiNLaYsy
221
225
  junifer/testing/tests/test_testing_registry.py,sha256=oerticBaPRaRZm3yANzInLac0Mqph3Y0aZPQFayu7xA,827
222
226
  junifer/tests/test_main.py,sha256=GMff7jlisGM9_FsiUwWDte43j-KQJGFRYZpwRRqTkd8,373
223
227
  junifer/tests/test_stats.py,sha256=3vPMgYYpWxk8ECDFOMm3-dFBlh4XxjL83SwRBSBAHok,4155
224
- junifer/utils/__init__.py,sha256=ZDPU9ezSKawAJhb-3T67jDf-16QEyF6e7ONyu-lnBtQ,277
228
+ junifer/utils/__init__.py,sha256=sFpsDKbPPtoU3Db3OSO9Vo45u4yE7UfocNaBtD-qvdk,310
225
229
  junifer/utils/fs.py,sha256=Jd9AoV2fIF7pT7KhXsn8T1O1fJ1_SFZgaFuOBAM7DG8,460
230
+ junifer/utils/helpers.py,sha256=Hp3yGZa9x659BCqFTd4keEU1gbHXNAbJ1_lHG1M6lwI,1338
226
231
  junifer/utils/logging.py,sha256=4kH8j9X_J2bMdnBJMldVF95C5sURa5UAsLmSgRaD9Ig,9117
227
232
  junifer/utils/tests/test_fs.py,sha256=WQS7cKlKEZ742CIuiOYYpueeAhY9PqlastfDVpVVtvE,923
233
+ junifer/utils/tests/test_helpers.py,sha256=k5qqfxK8dFyuewTJyR1Qn6-nFaYNuVr0ysc18bfPjyU,929
228
234
  junifer/utils/tests/test_logging.py,sha256=l8oo-AiBV7H6_IzlsNcj__cLeZBUvgIGoaMszD9VaJg,7754
229
- junifer-0.0.4.dev493.dist-info/AUTHORS.rst,sha256=rmULKpchpSol4ExWFdm-qu4fkpSZPYqIESVJBZtGb6E,163
230
- junifer-0.0.4.dev493.dist-info/LICENSE.md,sha256=MqCnOBu8uXsEOzRZWh9EBVfVz-kE9NkXcLCrtGXo2yU,34354
231
- junifer-0.0.4.dev493.dist-info/METADATA,sha256=_3K04VVuQxUyuIslgoc7stjFrg9UP2yAychS_LN6gtY,7745
232
- junifer-0.0.4.dev493.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
233
- junifer-0.0.4.dev493.dist-info/entry_points.txt,sha256=DxFvKq0pOqRunAK0FxwJcoDfV1-dZvsFDpD5HRqSDhw,48
234
- junifer-0.0.4.dev493.dist-info/top_level.txt,sha256=4bAq1R2QFQ4b3hohjys2JBvxrl0GKk5LNFzYvz9VGcA,8
235
- junifer-0.0.4.dev493.dist-info/RECORD,,
235
+ junifer-0.0.4.dev530.dist-info/AUTHORS.rst,sha256=rmULKpchpSol4ExWFdm-qu4fkpSZPYqIESVJBZtGb6E,163
236
+ junifer-0.0.4.dev530.dist-info/LICENSE.md,sha256=MqCnOBu8uXsEOzRZWh9EBVfVz-kE9NkXcLCrtGXo2yU,34354
237
+ junifer-0.0.4.dev530.dist-info/METADATA,sha256=7NtLR9A6bZqYUGw4dYhUS1oA3Bj-r1dEKbz85m560Y4,7745
238
+ junifer-0.0.4.dev530.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
239
+ junifer-0.0.4.dev530.dist-info/entry_points.txt,sha256=DxFvKq0pOqRunAK0FxwJcoDfV1-dZvsFDpD5HRqSDhw,48
240
+ junifer-0.0.4.dev530.dist-info/top_level.txt,sha256=4bAq1R2QFQ4b3hohjys2JBvxrl0GKk5LNFzYvz9VGcA,8
241
+ junifer-0.0.4.dev530.dist-info/RECORD,,