junifer 0.0.2.dev138__py3-none-any.whl → 0.0.2.dev140__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. junifer/_version.py +2 -2
  2. junifer/data/masks.py +102 -30
  3. junifer/data/tests/test_masks.py +166 -8
  4. junifer/datagrabber/aomic/id1000.py +33 -1
  5. junifer/datagrabber/aomic/piop1.py +14 -0
  6. junifer/datagrabber/aomic/piop2.py +35 -1
  7. junifer/datagrabber/aomic/tests/test_id1000.py +6 -0
  8. junifer/datagrabber/aomic/tests/test_piop1.py +6 -0
  9. junifer/datagrabber/aomic/tests/test_piop2.py +6 -1
  10. junifer/markers/ets_rss.py +8 -8
  11. junifer/markers/falff/falff_parcels.py +7 -7
  12. junifer/markers/falff/falff_spheres.py +8 -8
  13. junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +8 -8
  14. junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +7 -7
  15. junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +8 -8
  16. junifer/markers/functional_connectivity/functional_connectivity_base.py +7 -7
  17. junifer/markers/functional_connectivity/functional_connectivity_parcels.py +7 -7
  18. junifer/markers/functional_connectivity/functional_connectivity_spheres.py +8 -8
  19. junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +4 -2
  20. junifer/markers/parcel_aggregation.py +11 -9
  21. junifer/markers/reho/reho_parcels.py +8 -8
  22. junifer/markers/reho/reho_spheres.py +8 -8
  23. junifer/markers/sphere_aggregation.py +11 -9
  24. junifer/markers/tests/test_collection.py +8 -6
  25. junifer/markers/tests/test_marker_utils.py +2 -1
  26. junifer/markers/tests/test_parcel_aggregation.py +2 -2
  27. junifer/markers/tests/test_sphere_aggregation.py +1 -1
  28. junifer/markers/utils.py +10 -10
  29. junifer/preprocess/base.py +11 -1
  30. junifer/preprocess/confounds/fmriprep_confound_remover.py +31 -24
  31. junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +59 -3
  32. {junifer-0.0.2.dev138.dist-info → junifer-0.0.2.dev140.dist-info}/METADATA +1 -1
  33. {junifer-0.0.2.dev138.dist-info → junifer-0.0.2.dev140.dist-info}/RECORD +38 -38
  34. {junifer-0.0.2.dev138.dist-info → junifer-0.0.2.dev140.dist-info}/AUTHORS.rst +0 -0
  35. {junifer-0.0.2.dev138.dist-info → junifer-0.0.2.dev140.dist-info}/LICENSE.md +0 -0
  36. {junifer-0.0.2.dev138.dist-info → junifer-0.0.2.dev140.dist-info}/WHEEL +0 -0
  37. {junifer-0.0.2.dev138.dist-info → junifer-0.0.2.dev140.dist-info}/entry_points.txt +0 -0
  38. {junifer-0.0.2.dev138.dist-info → junifer-0.0.2.dev140.dist-info}/top_level.txt +0 -0
@@ -39,7 +39,7 @@ def test_marker_collection_incorrect_markers() -> None:
39
39
  ),
40
40
  ]
41
41
  with pytest.raises(ValueError, match=r"must have different names"):
42
- MarkerCollection(wrong_markers)
42
+ MarkerCollection(wrong_markers) # type: ignore
43
43
 
44
44
 
45
45
  def test_marker_collection() -> None:
@@ -62,7 +62,7 @@ def test_marker_collection() -> None:
62
62
  name="gmd_schaefer100x7_trim_mean90",
63
63
  ),
64
64
  ]
65
- mc = MarkerCollection(markers=markers)
65
+ mc = MarkerCollection(markers=markers) # type: ignore
66
66
  assert mc._markers == markers
67
67
  assert mc._preprocessing is None
68
68
  assert mc._storage is None
@@ -96,7 +96,7 @@ def test_marker_collection() -> None:
96
96
  return input
97
97
 
98
98
  mc2 = MarkerCollection(
99
- markers=markers,
99
+ markers=markers, # type: ignore
100
100
  preprocessing=BypassPreprocessing(),
101
101
  datareader=DefaultDataReader(),
102
102
  )
@@ -127,7 +127,7 @@ def test_marker_collection_with_preprocessing() -> None:
127
127
  ),
128
128
  ]
129
129
  mc = MarkerCollection(
130
- markers=markers,
130
+ markers=markers, # type: ignore
131
131
  preprocessing=fMRIPrepConfoundRemover(),
132
132
  )
133
133
  assert mc._markers == markers
@@ -173,7 +173,7 @@ def test_marker_collection_storage(tmp_path: Path) -> None:
173
173
  uri = tmp_path / "test_marker_collection_storage.sqlite"
174
174
  storage = SQLiteFeatureStorage(uri=uri)
175
175
  mc = MarkerCollection(
176
- markers=markers,
176
+ markers=markers, # type: ignore
177
177
  storage=storage,
178
178
  datareader=DefaultDataReader(),
179
179
  )
@@ -185,7 +185,9 @@ def test_marker_collection_storage(tmp_path: Path) -> None:
185
185
  out = mc.fit(input)
186
186
  assert out is None
187
187
 
188
- mc2 = MarkerCollection(markers=markers, datareader=DefaultDataReader())
188
+ mc2 = MarkerCollection(
189
+ markers=markers, datareader=DefaultDataReader() # type: ignore
190
+ )
189
191
  mc2.validate(dg)
190
192
  assert mc2._storage is None
191
193
 
@@ -27,13 +27,14 @@ def test_ets() -> None:
27
27
  n_edges = int(n_rois * (n_rois - 1) / 2)
28
28
 
29
29
  # test without labels
30
- edge_ts = _ets(bold_ts)
30
+ edge_ts, _ = _ets(bold_ts)
31
31
  assert edge_ts.shape == (n_time, n_edges)
32
32
 
33
33
  # test with labels
34
34
  roi_labels = [f"Label_{x}" for x in range(n_rois)]
35
35
  edge_ts, edge_labels = _ets(bold_ts, roi_labels)
36
36
  assert edge_ts.shape == (n_time, n_edges)
37
+ assert edge_labels is not None
37
38
  assert len(edge_labels) == n_edges
38
39
 
39
40
 
@@ -229,7 +229,7 @@ def test_ParcelAggregation_3D_mask() -> None:
229
229
  marker = ParcelAggregation(
230
230
  parcellation="Schaefer100x7",
231
231
  method="mean",
232
- mask="GM_prob0.2",
232
+ masks="GM_prob0.2",
233
233
  name="gmd_schaefer100x7_mean",
234
234
  on="VBM_GM",
235
235
  ) # Test passing "on" as a keyword argument
@@ -274,7 +274,7 @@ def test_ParcelAggregation_3D_mask_computed() -> None:
274
274
  marker = ParcelAggregation(
275
275
  parcellation="Schaefer100x7",
276
276
  method="mean",
277
- mask={"compute_brain_mask": {"threshold": 0.2}},
277
+ masks={"compute_brain_mask": {"threshold": 0.2}},
278
278
  name="gmd_schaefer100x7_mean",
279
279
  on="VBM_GM",
280
280
  ) # Test passing "on" as a keyword argument
@@ -159,7 +159,7 @@ def test_SphereAggregation_3D_mask() -> None:
159
159
  method="mean",
160
160
  radius=RADIUS,
161
161
  on="VBM_GM",
162
- mask="GM_prob0.2",
162
+ masks="GM_prob0.2",
163
163
  )
164
164
  input = {"VBM_GM": {"data": img, "meta": {}}}
165
165
  jun_values4d = marker.fit_transform(input)["VBM_GM"]["data"]
junifer/markers/utils.py CHANGED
@@ -7,7 +7,7 @@
7
7
  # Federico Raimondo <f.raimondo@fz-juelich.de>
8
8
  # License: AGPL
9
9
 
10
- from typing import Any, Callable, Dict, List, Type, Union
10
+ from typing import Any, Callable, Dict, List, Optional, Tuple, Type, Union
11
11
 
12
12
  import numpy as np
13
13
  import pandas as pd
@@ -56,8 +56,9 @@ def singleton(cls: Type) -> Type:
56
56
 
57
57
 
58
58
  def _ets(
59
- bold_ts: np.ndarray, roi_names: Union[None, List[str]] = None
60
- ) -> np.ndarray:
59
+ bold_ts: np.ndarray,
60
+ roi_names: Union[None, List[str]] = None,
61
+ ) -> Tuple[np.ndarray, Optional[List[str]]]:
61
62
  """Compute the edge-wise time series based on BOLD time series.
62
63
 
63
64
  Take a timeseries of brain areas, and calculate timeseries for each
@@ -80,9 +81,8 @@ def _ets(
80
81
  edge-wise time series, i.e. estimate of functional connectivity at each
81
82
  time point.
82
83
  edge_names : List[str]
83
- List of edge names corresponding to columns in the
84
- edge-wise time series. This is only returned if the roi_names
85
- are specified.
84
+ List of edge names corresponding to columns in the edge-wise time
85
+ series. If roi_names are not specified, this is None.
86
86
 
87
87
  References
88
88
  ----------
@@ -102,18 +102,18 @@ def _ets(
102
102
  ets = timeseries[:, u] * timeseries[:, v]
103
103
  # Obtain the corresponding edge labels if specified else return
104
104
  if roi_names is None:
105
- return ets
105
+ return ets, None
106
106
  else:
107
107
  if len(roi_names) != n_roi:
108
108
  raise_error(
109
109
  "List of roi names does not correspond "
110
110
  "to the number of ROIs in the timeseries!"
111
111
  )
112
- roi_names = np.array(roi_names)
112
+ _roi_names = np.array(roi_names)
113
113
  edge_names = [
114
- "~".join([x, y]) for x, y in zip(roi_names[u], roi_names[v])
114
+ "~".join([x, y]) for x, y in zip(_roi_names[u], _roi_names[v])
115
115
  ]
116
- return ets, list(edge_names)
116
+ return ets, edge_names
117
117
 
118
118
 
119
119
  def _correlate_dataframes(
@@ -115,12 +115,22 @@ class BasePreprocessor(ABC, PipelineStepMixin, UpdateMetaMixin):
115
115
  if type_ in input.keys():
116
116
  logger.info(f"Computing {type_}")
117
117
  t_input = input[type_]
118
- extra_input = input.copy()
118
+
119
+ # Pass the other data types as extra input, removing
120
+ # the current type
121
+ extra_input = input
119
122
  extra_input.pop(type_)
120
123
  key, t_out = self.preprocess(
121
124
  input=t_input, extra_input=extra_input
122
125
  )
126
+
127
+ # Add the output to the Junifer Data object
123
128
  out[key] = t_out
129
+
130
+ # In case we are creating a new type, re-add the original input
131
+ if key != type_:
132
+ out[type_] = t_input
133
+
124
134
  self.update_meta(out[key], "preprocess")
125
135
  return out
126
136
 
@@ -11,9 +11,9 @@ import numpy as np
11
11
  import pandas as pd
12
12
  from nilearn._utils.niimg_conversions import check_niimg_4d
13
13
  from nilearn.image import clean_img
14
- from nilearn.masking import compute_brain_mask
15
14
 
16
15
  from ...api.decorators import register_preprocessor
16
+ from ...data import get_mask
17
17
  from ...utils import logger, raise_error
18
18
  from ..base import BasePreprocessor
19
19
 
@@ -134,11 +134,10 @@ class fMRIPrepConfoundRemover(BasePreprocessor):
134
134
  t_r : float, optional
135
135
  Repetition time, in second (sampling period).
136
136
  If None, it will use t_r from nifti header (default None).
137
- mask_img: Niimg-like object, optional
138
- If provided, signal is only cleaned from voxels inside the mask.
139
- If mask is provided, it should have same shape and affine as imgs.
140
- If not provided, a mask is computed using
141
- :func:`nilearn.masking.compute_brain_mask` (default None).
137
+ masks : str, dict or list of dict or str, optional
138
+ The specification of the masks to apply to regions before extracting
139
+ signals. Check :ref:`Using Masks <using_masks>` for more details.
140
+ If None, will not apply any mask (default None).
142
141
 
143
142
  """
144
143
 
@@ -153,7 +152,7 @@ class fMRIPrepConfoundRemover(BasePreprocessor):
153
152
  low_pass: Optional[float] = None,
154
153
  high_pass: Optional[float] = None,
155
154
  t_r: Optional[float] = None,
156
- mask_img: Optional["Nifti1Image"] = None,
155
+ masks: Union[str, Dict, List[Union[Dict, str]], None] = None,
157
156
  ) -> None:
158
157
  """Initialise the class."""
159
158
  if strategy is None:
@@ -169,7 +168,7 @@ class fMRIPrepConfoundRemover(BasePreprocessor):
169
168
  self.low_pass = low_pass
170
169
  self.high_pass = high_pass
171
170
  self.t_r = t_r
172
- self.mask_img = mask_img
171
+ self.masks = masks
173
172
 
174
173
  self._valid_components = ["motion", "wm_csf", "global_signal"]
175
174
  self._valid_confounds = ["basic", "power2", "derivatives", "full"]
@@ -521,19 +520,20 @@ class fMRIPrepConfoundRemover(BasePreprocessor):
521
520
  raise ValueError(f"Invalid confounds format {t_format}")
522
521
 
523
522
  def _remove_confounds(
524
- self, bold_img: "Nifti1Image", confounds_df: pd.DataFrame
523
+ self,
524
+ input: Dict[str, Any],
525
+ extra_input: Optional[Dict[str, Any]] = None,
525
526
  ) -> Union["Nifti1Image", "Nifti2Image", "MGHImage", List]:
526
527
  """Remove confounds from the BOLD image.
527
528
 
528
529
  Parameters
529
530
  ----------
530
- bold_img : Niimg-like object
531
- 4D image. The signals in the last dimension are filtered
532
- (see http://nilearn.github.io/manipulating_images/input_output.html
533
- for a detailed description of the valid input types).
534
- confounds_df : pd.DataFrame
535
- Dataframe containing confounds to remove. Number of rows should
536
- correspond to number of volumes in the BOLD image.
531
+ input : dict
532
+ Dictionary containing the ``BOLD`` value from the
533
+ Junifer Data object.
534
+ extra_input : dict, optional
535
+ Dictionary containing the rest of the Junifer Data object. Must
536
+ include the ``BOLD_confounds`` key.
537
537
 
538
538
  Returns
539
539
  --------
@@ -541,8 +541,11 @@ class fMRIPrepConfoundRemover(BasePreprocessor):
541
541
  Input image with confounds removed.
542
542
 
543
543
  """
544
+ assert extra_input is not None # Not the case, data is validated
545
+ confounds_df = self._pick_confounds(extra_input["BOLD_confounds"])
544
546
  confounds_array = confounds_df.values
545
547
 
548
+ bold_img = input["data"]
546
549
  t_r = self.t_r
547
550
  if t_r is None:
548
551
  logger.info("No `t_r` specified, using t_r from nifti header")
@@ -552,10 +555,17 @@ class fMRIPrepConfoundRemover(BasePreprocessor):
552
555
  f"Read t_r from nifti header: {t_r}",
553
556
  )
554
557
 
555
- mask_img = self.mask_img
556
- if mask_img is None:
557
- logger.info("Computing brain mask from image")
558
- mask_img = compute_brain_mask(bold_img)
558
+ mask_img = None
559
+ if self.masks is not None:
560
+ logger.debug(f"Masking with {self.masks}")
561
+ mask_img = get_mask(
562
+ masks=self.masks, target_data=input, extra_input=extra_input
563
+ )
564
+ # Save the mask in the extra input and link it to the bold data
565
+ # this allows to use "inherit" down the pipeline
566
+ if extra_input is not None:
567
+ extra_input["BOLD_mask"] = {"data": mask_img}
568
+ input["mask_item"] = "BOLD_mask"
559
569
 
560
570
  logger.info("Cleaning image")
561
571
  logger.debug(f"\tdetrend: {self.detrend}")
@@ -600,8 +610,5 @@ class fMRIPrepConfoundRemover(BasePreprocessor):
600
610
 
601
611
  """
602
612
  self._validate_data(input, extra_input)
603
- assert extra_input is not None
604
- bold_img = input["data"]
605
- confounds_df = self._pick_confounds(extra_input["BOLD_confounds"])
606
- input["data"] = self._remove_confounds(bold_img, confounds_df)
613
+ input["data"] = self._remove_confounds(input, extra_input=extra_input)
607
614
  return "BOLD", input
@@ -452,10 +452,10 @@ def test_fMRIPrepConfoundRemover__remove_confounds() -> None:
452
452
  with PartlyCloudyTestingDataGrabber(reduce_confounds=False) as dg:
453
453
  input = dg["sub-01"]
454
454
  input = reader.fit_transform(input)
455
- confounds = confound_remover._pick_confounds(input["BOLD_confounds"])
456
455
  raw_bold = input["BOLD"]["data"]
456
+ extra_input = {k: v for k, v in input.items() if k != "BOLD"}
457
457
  clean_bold = confound_remover._remove_confounds(
458
- bold_img=raw_bold, confounds_df=confounds
458
+ input=input["BOLD"], extra_input=extra_input
459
459
  )
460
460
  clean_bold = typing.cast(nib.Nifti1Image, clean_bold)
461
461
  # TODO: Find a better way to test functionality here
@@ -533,7 +533,63 @@ def test_fMRIPrepConfoundRemover_fit_transform() -> None:
533
533
  assert t_meta["low_pass"] is None
534
534
  assert t_meta["high_pass"] is None
535
535
  assert t_meta["t_r"] is None
536
- assert t_meta["mask_img"] is None
536
+ assert t_meta["masks"] is None
537
+
538
+ assert "dependencies" in output["BOLD"]["meta"]
539
+ dependencies = output["BOLD"]["meta"]["dependencies"]
540
+ assert dependencies == {"numpy", "nilearn"}
541
+
542
+
543
+ def test_fMRIPrepConfoundRemover_fit_transform_masks() -> None:
544
+ """Test fMRIPrepConfoundRemover with all confounds present."""
545
+
546
+ # need reader for the data
547
+ reader = DefaultDataReader()
548
+ # All strategies full, no spike
549
+ confound_remover = fMRIPrepConfoundRemover(
550
+ masks={"compute_brain_mask": {"threshold": 0.2}}
551
+ )
552
+
553
+ with PartlyCloudyTestingDataGrabber(reduce_confounds=False) as dg:
554
+ input = dg["sub-01"]
555
+ input = reader.fit_transform(input)
556
+ orig_bold = input["BOLD"]["data"].get_fdata().copy()
557
+ output = confound_remover.fit_transform(input)
558
+ trans_bold = output["BOLD"]["data"].get_fdata()
559
+ # Transformation is in place
560
+ assert_array_equal(trans_bold, input["BOLD"]["data"].get_fdata())
561
+
562
+ # Data should have the same shape
563
+ assert orig_bold.shape == trans_bold.shape
564
+
565
+ # but be different
566
+ assert_raises(
567
+ AssertionError, assert_array_equal, orig_bold, trans_bold
568
+ )
569
+
570
+ assert "meta" in output["BOLD"]
571
+ assert "preprocess" in output["BOLD"]["meta"]
572
+ t_meta = output["BOLD"]["meta"]["preprocess"]
573
+ assert t_meta["class"] == "fMRIPrepConfoundRemover"
574
+ # It should have all the default parameters
575
+ assert t_meta["strategy"] == confound_remover.strategy
576
+ assert t_meta["spike"] is None
577
+ assert t_meta["detrend"] is True
578
+ assert t_meta["standardize"] is True
579
+ assert t_meta["low_pass"] is None
580
+ assert t_meta["high_pass"] is None
581
+ assert t_meta["t_r"] is None
582
+ assert isinstance(t_meta["masks"], dict)
583
+ assert t_meta["masks"] is not None
584
+ assert len(t_meta["masks"]) == 1
585
+ assert "compute_brain_mask" in t_meta["masks"]
586
+ assert len(t_meta["masks"]["compute_brain_mask"]) == 1
587
+ assert "threshold" in t_meta["masks"]["compute_brain_mask"]
588
+ assert t_meta["masks"]["compute_brain_mask"]["threshold"] == 0.2
589
+
590
+ assert "BOLD_mask" in output
591
+ assert "mask_item" in output["BOLD"]
592
+ assert output["BOLD"]["mask_item"] == "BOLD_mask"
537
593
 
538
594
  assert "dependencies" in output["BOLD"]["meta"]
539
595
  dependencies = output["BOLD"]["meta"]["dependencies"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: junifer
3
- Version: 0.0.2.dev138
3
+ Version: 0.0.2.dev140
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=rJgTGeR-SOntQoLSGo36zKDTE8IMRBn2-YwC0JSNUpU,377
2
- junifer/_version.py,sha256=qVdH9WeywnuErNlf5zsHPfkfRSMVifPFRbRtdc_dpY8,177
2
+ junifer/_version.py,sha256=HvZxramN6g_D--rQIkn39dXpmFhOcuXTkrv5rcfxKgs,177
3
3
  junifer/stats.py,sha256=3Yt9xD51S0S922T8R6hElO7itvf-Sz41P_SwPzR9KIg,3523
4
4
  junifer/api/__init__.py,sha256=YILu9M7SC0Ri4CVd90fELH2OnK_gvCYAXCoqBNCFE8E,257
5
5
  junifer/api/cli.py,sha256=WiMF7c3SJuRi_rxxBaaTb7YCQOpfebvhAOh-cKDV8sM,8993
@@ -35,7 +35,7 @@ junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py,sha256=V2vk6Y2RP4sLZ
35
35
  junifer/configs/tests/test_juseless.py,sha256=J_Ujtbttb3dLy5phkNLNuTPZy2xXejRhl_7SGIjV91Q,876
36
36
  junifer/data/__init__.py,sha256=mqayvhnk3oVzAzJyFhw8QGKIZY0GGGIXPzQHJkOkMQ0,482
37
37
  junifer/data/coordinates.py,sha256=kezVbrHDfa_LGjMWg9BM6Izl3Rr9pajQhDoakO4lQ6A,4686
38
- junifer/data/masks.py,sha256=_HWqdVEIrBkFJk-Bo72e5x0mp8yxJ2yLX5JcC0Pf27o,8304
38
+ junifer/data/masks.py,sha256=8C33Z84mDzB27bemDSYff9Job2rNHJNsaCJQIRqmZIg,11273
39
39
  junifer/data/parcellations.py,sha256=fzOPlKaD-F4Du1723vFn0qZ3ZNlCPpBUOiyzvEIqtWs,24404
40
40
  junifer/data/utils.py,sha256=K9quLIoWRmm2QFM8Rdy_5bYsWb_XhL0l5Uq_1Sie0kA,1274
41
41
  junifer/data/VOIs/meta/CogAC_VOIs.txt,sha256=PJr-gShA19NA8rV_pcWDEwrTl35H_95qQNXdIeQotLU,397
@@ -60,7 +60,7 @@ junifer/data/masks/vickery-patil/CAT12_IXI555_MNI152_TMP_GS_GMprob0.2_clean_3mm.
60
60
  junifer/data/masks/vickery-patil/GMprob0.2_cortex_3mm_NA_rm.nii.gz,sha256=jfMe_4H9XEnArYms5bSQbqS2V1_HbLHTfI5amQa_Pes,8700
61
61
  junifer/data/tests/test_coordinates.py,sha256=RCYOuaAjs2wqPeFHX-l9Bryt5Zw5mOIV0WpsH891RwA,3240
62
62
  junifer/data/tests/test_data_utils.py,sha256=Vy7x8zaHws5hmn92PKSv3H38hU2kamOpyaH6nG_NNpw,1086
63
- junifer/data/tests/test_masks.py,sha256=JE8i8LAeeqm8-sdztbE833RgoYBxQfuimZW6b-dme4I,8149
63
+ junifer/data/tests/test_masks.py,sha256=hekRQNhbLqCMSYmO5NISdYdWwdsbHOowOxmbgrBG76c,13266
64
64
  junifer/data/tests/test_parcellations.py,sha256=2UAnQw2NZNHzrZ6wcPplZH6y8mf6yuNuAlg6RmJAi0U,17123
65
65
  junifer/datagrabber/__init__.py,sha256=US44K6DeCFWnF7TJzNt_CD5c7q9XaAF5NLS0llyGibQ,579
66
66
  junifer/datagrabber/base.py,sha256=RS9jNUPgzjUoOQUEwqVQDr6yOkaBDtQpbHXbiu0eRjs,4638
@@ -71,12 +71,12 @@ junifer/datagrabber/pattern.py,sha256=OjPqz6VM22bVTeWra1DEzDBe0jL1NMTqu8jHTWGCWy
71
71
  junifer/datagrabber/pattern_datalad.py,sha256=9_HDjChlqb4RLxaC3zrB5EO5fdKT43iroEDvDIk0xVI,1628
72
72
  junifer/datagrabber/utils.py,sha256=x2NG076T_jTiDLpl6lXy7-_RUVuPwSmygf3FZcOdK6k,2769
73
73
  junifer/datagrabber/aomic/__init__.py,sha256=e2PiVk95yR99Wzy6MBnNmUCAyuQcg9jzbfrA3Frm5fQ,295
74
- junifer/datagrabber/aomic/id1000.py,sha256=PuR2yRw4EVkfkUkq-V5c0X4CatC35pw_T_8PTX8MC8I,2944
75
- junifer/datagrabber/aomic/piop1.py,sha256=EeXsXIn-rNxJKHWivt9RkCL7LSlDp3Lylkj9lcv7gSE,5144
76
- junifer/datagrabber/aomic/piop2.py,sha256=NQP61YcWe5W5jDx1zcX5st2sbwvXAmWkA_DcEC_V3IY,4155
77
- junifer/datagrabber/aomic/tests/test_id1000.py,sha256=Nq8ENtXkDe8cz45w2hGcYsZysJ0It8NT60GidOGxmqk,3370
78
- junifer/datagrabber/aomic/tests/test_piop1.py,sha256=No_tq-q-mjErIcYnOZZZCuGRE6AOwp-avjC1ViDyeWk,4407
79
- junifer/datagrabber/aomic/tests/test_piop2.py,sha256=6BO8QrxIaNuj153CpIYan-Z7YEZvlKdbXEovmxQhykY,4183
74
+ junifer/datagrabber/aomic/id1000.py,sha256=X_hs8Y0qP1CO7YXQM3g0KIGJiFQjFfexuGN0acypYLM,3944
75
+ junifer/datagrabber/aomic/piop1.py,sha256=wd8-WlDG7KJRCUmZ7ORABxc8iFLMMedSfc6wYBAn9CI,5698
76
+ junifer/datagrabber/aomic/piop2.py,sha256=hBOVvBsBSyeS9dPp7xSIhQFIqFl69y7wifjfkz5cypM,5303
77
+ junifer/datagrabber/aomic/tests/test_id1000.py,sha256=-QCMDylQgGM0Re_EYHilnT4NrOVtyQ2AASPCpMXy0vk,3523
78
+ junifer/datagrabber/aomic/tests/test_piop1.py,sha256=Aw9oRs_H-hnUyr6-w5CPf85yOVneAAx_T_XcAIVCy9I,4576
79
+ junifer/datagrabber/aomic/tests/test_piop2.py,sha256=sCJXdc3-HG5rTkurdNJfTRgEzjnX8dlW1b7DrMnVryg,4351
80
80
  junifer/datagrabber/tests/test_base.py,sha256=gzyVbat1e9BE82zbcxEp22eR1yD7rFabQVO_0M2hELg,1994
81
81
  junifer/datagrabber/tests/test_datagrabber_utils.py,sha256=Y7g08B8neHiB4HMHDhBxMXDNOmXsQ4fTMalhoA0iLFA,2745
82
82
  junifer/datagrabber/tests/test_datalad_base.py,sha256=HeWVdXybfvsVfzQfZxC7wYD6gWTXz2dNCAbZ5thl01E,14683
@@ -94,45 +94,45 @@ junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py,sha256=ll0Qo
94
94
  junifer/markers/__init__.py,sha256=K35ML9FHYV2V79P4X098YB1ZOfDcnRfZrAZHvVuBg90,769
95
95
  junifer/markers/base.py,sha256=PnBMhq3_NJxSr0ige1fuqxbHM3C7cMXSt9_C0KkAZlU,5877
96
96
  junifer/markers/collection.py,sha256=AvtaGj08WEhV2oREzD9xG7vQFqs5AFsgCuNbkZkUAfM,4585
97
- junifer/markers/ets_rss.py,sha256=Zb8phJlujRHL0UKQlINdmQOxH5SrfNbPwSJjxSl-wFM,4411
98
- junifer/markers/parcel_aggregation.py,sha256=dDclvv3EkR0F7X4Uo0VWld534pCWflz-UvmzNA3qyZI,7902
99
- junifer/markers/sphere_aggregation.py,sha256=L-zOq9m6pbkpyIPWrkghE0g5q4dUkJoOWPwUsyFtOpY,5284
100
- junifer/markers/utils.py,sha256=wmf6FY9K3kGzKQ5dh-6NeK0giYfqTsdL5Mo2Swx6mrU,4571
97
+ junifer/markers/ets_rss.py,sha256=brN2FfB5yYwRpm7sfZQh-9wf-GKZm3NiKUYpzdGs5WA,4504
98
+ junifer/markers/parcel_aggregation.py,sha256=QgqTd42xKE_Fj0g-Nsfv2QLlNFBxrBByEgofxSV2giU,8049
99
+ junifer/markers/sphere_aggregation.py,sha256=TxO4pbQCWz2Nx1omUu0RU2Ml62BNJTcwHPeYtQxXKLw,5431
100
+ junifer/markers/utils.py,sha256=0F-6FI80IsKxcyVOAKh3xHho-wshzrB9hDfVOgHYsxk,4608
101
101
  junifer/markers/falff/__init__.py,sha256=TFVPjdJ7hIkjIqIf9zwI3Ee0T1hDvhikHBnwv8DqtFA,253
102
102
  junifer/markers/falff/falff_base.py,sha256=BdyuUR0xB7bZJfYb3SCVD-KEUTwA_xt_kuaBzUdVQhs,5577
103
103
  junifer/markers/falff/falff_estimator.py,sha256=4aaMsDf_HZkQ7KjZAcu0yJvdffb2IIpgAMHD3qU8THQ,10376
104
- junifer/markers/falff/falff_parcels.py,sha256=WT0Rwzh6hqJh9DoPt36BPO8-F27_WqCqwu12y754ihg,4476
105
- junifer/markers/falff/falff_spheres.py,sha256=Ct35K5pZReS270ibvnsDqe-5wMick8e8koMoKfcKVDM,4717
104
+ junifer/markers/falff/falff_parcels.py,sha256=Wyjt_p2UsSZ-2OXBpFv6hvrRkVcDJMix4VLhpQo-GXk,4566
105
+ junifer/markers/falff/falff_spheres.py,sha256=O0AF5PRxfrDVKXla1hqog6aYHu1GUr9GMmvdBEx1HjA,4813
106
106
  junifer/markers/falff/tests/test_falff_estimator.py,sha256=7UVMFgyxVrWwlh7voKIcgYadcaRxmeuAn0QaN4tTsJs,7706
107
107
  junifer/markers/falff/tests/test_falff_parcels.py,sha256=qI_KaS1YPYd-LdhkKhWgLj5yQjqUva7GHsgyPgpdiFY,4844
108
108
  junifer/markers/falff/tests/test_falff_spheres.py,sha256=QoMyCq9DNCCz0hO1RGl2nJFOEforZv87m6nHqukZ8_Q,4929
109
109
  junifer/markers/functional_connectivity/__init__.py,sha256=Uq8aXpHJesedJNHEixpc4bn7VvYZMhf710jyiX45XlE,499
110
- junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py,sha256=yB-3BvTjKVihIscj0fWzmI1da5Wojq5mMYcWIDyp76E,5037
111
- junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py,sha256=io_b5bRzshw2xt8pBXSv6Z-5uYs7_Fv-L3tnUpVztVo,3258
112
- junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py,sha256=hS88iOfIDlVScPFVAKRG1R7FbNIHwBjJYJpPH0Jz1EA,3598
113
- junifer/markers/functional_connectivity/functional_connectivity_base.py,sha256=Hp1UkYMv5-clJHih2Wf4xYdtL896KGCLQoU_4C591kE,4963
114
- junifer/markers/functional_connectivity/functional_connectivity_parcels.py,sha256=V_bzBGDV-GANFViDG8CPneEthUOKp0jtQhrJ2r1reL8,2960
115
- junifer/markers/functional_connectivity/functional_connectivity_spheres.py,sha256=cQHb0QAChrmal5Scx2lVLf9RgWrbtxYHO21RKRcD2sQ,3352
110
+ junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py,sha256=JN1GezdwR5yQgfsmJ0_jM92QVLecmGR1ihljIm9NLYE,5129
111
+ junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py,sha256=Hrtq08UDnCxUcSMJrmXVfOjnfzxZOrLSwffd5FsHRqM,3357
112
+ junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py,sha256=9hWv8_zd74E5nPtoBapwraWV6fIjOAYUiT9Ktd8XBmA,3710
113
+ junifer/markers/functional_connectivity/functional_connectivity_base.py,sha256=iFuAf5vnFgScIiIavILNMpTiJVkTLk1iw6byt2MNsWQ,5067
114
+ junifer/markers/functional_connectivity/functional_connectivity_parcels.py,sha256=_KcmqDgr3snjrbFuvtg8b3hts9bRgdW0-gvJxYgVW40,3050
115
+ junifer/markers/functional_connectivity/functional_connectivity_spheres.py,sha256=dcdRK2MhxiNMSf9ZisgV9GUE8dDwfk-oH9pXCIY7LK8,3448
116
116
  junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py,sha256=-CkCWwSbApt6d3DCEC2OhTLXyyySFyYXeWcO4te-z4k,2872
117
117
  junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py,sha256=Ir9vZPNU5PoqfzVfy1Mfs5us-juuCegzMO0os2PWVfE,1945
118
118
  junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py,sha256=8cjs8BlfjUgzHuu1uODKWtd__Dp81teHEw02ZAqvgBE,2293
119
- junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py,sha256=favZGlWE8wRooOOXlO3RNRwjls26DGVz996eQM94izw,490
119
+ junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py,sha256=RmPTrG0uLKb5RgdHXUnH6lon60FxN1JCtr-dsTBaX28,522
120
120
  junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py,sha256=KmbhscwDxk_HbH2MKAXpiRnvj1KFVJZTb2snqcn9a9c,3118
121
121
  junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py,sha256=zsiGsZp0Oy7qZOhNjoMafVBST69ET1q7WWITVaaQirc,4170
122
122
  junifer/markers/reho/__init__.py,sha256=9IfeAxKEVgMWbhud-8T54Le07I4pR6A29sMKeFtvEPg,189
123
123
  junifer/markers/reho/reho_base.py,sha256=z7qFl8x-_NUPYQR7i_3zTH2uA2ImE-Ayn3FMfTVadn8,3619
124
124
  junifer/markers/reho/reho_estimator.py,sha256=Ycn__Ir327P4_r1oBJ_d_WXICENHcJxqg1ponUx_r3w,17376
125
- junifer/markers/reho/reho_parcels.py,sha256=EsY8MCCT_x9vZZQL9ynqK5x-GrTuI4cfOUwqTyXLF78,5555
126
- junifer/markers/reho/reho_spheres.py,sha256=tMfM_jiIJGH9-bWSlaa8cOuJV-x1THaJ8QqajNkE0s0,5784
125
+ junifer/markers/reho/reho_parcels.py,sha256=eewXe2ApcvI4UnZ1JJZ2hBWM8au1fYwvYHCyOvn_onQ,5651
126
+ junifer/markers/reho/reho_spheres.py,sha256=modxKp6ys_z-GzYszKjwTxsQ9U2md-kvUo1QTZJYtUA,5880
127
127
  junifer/markers/reho/tests/test_reho_estimator.py,sha256=Cp8N2FapKQjDxU0Wy-3h6vRHdXAo6CKik84ODzgSQ_U,9100
128
128
  junifer/markers/reho/tests/test_reho_parcels.py,sha256=5wDT0u5skCScVuQFeJGq9WJeRTh6h1AB87oS4ejh8nI,4243
129
129
  junifer/markers/reho/tests/test_reho_spheres.py,sha256=o77NIkynWcsUJ07BES3S2NDdUNiYOECMgAwTnvmgkmw,4251
130
- junifer/markers/tests/test_collection.py,sha256=P0Y19QEzQPrhRyo5RfyOpiONlDeCmq9xqQdBmjEEcCc,6740
130
+ junifer/markers/tests/test_collection.py,sha256=R1GlTdxeiVa7-6emQtxWHrrka74UCVUfpyAGUuvXXLk,6850
131
131
  junifer/markers/tests/test_ets_rss.py,sha256=xc70Q_9W8e0tIZ5XG_JYbZ8qO8eB0NQ1NFn5UCSY-hw,2619
132
- junifer/markers/tests/test_marker_utils.py,sha256=LUDO2gH51doc37k7LYl3ai3_mvGdNvGk7_8hiOo-zmk,1440
132
+ junifer/markers/tests/test_marker_utils.py,sha256=SR3ADWI3uGv4ozYqVu-rMZnJVqP6JnjLBgo6qUm16Wk,1478
133
133
  junifer/markers/tests/test_markers_base.py,sha256=afn7SRjpb8uNOa6N4_-31JOm4uUl6j4vDb0cYOzkbmo,2196
134
- junifer/markers/tests/test_parcel_aggregation.py,sha256=MdyyhqGmdJHDxqvKQHq8pM4ZwCpRDe6KVUxBNq3jG6A,15597
135
- junifer/markers/tests/test_sphere_aggregation.py,sha256=Ijev3JRNXTMB2VFwYXwEq1-Xw0Ei_HCKfHtRamz0TH8,5441
134
+ junifer/markers/tests/test_parcel_aggregation.py,sha256=vgWOX07qi-gsWXfCJFtSvJI07FIsEHXpKXqeK-oTje4,15599
135
+ junifer/markers/tests/test_sphere_aggregation.py,sha256=Ot7-0pas4JpK6XwA1bDDrnB7bo7vKh7hE-hZVAZZobs,5442
136
136
  junifer/pipeline/__init__.py,sha256=gOOrLf_C3oe9RdmLLjKMhs2gqtrr5Tzfi_cyTFEp8HM,238
137
137
  junifer/pipeline/pipeline_step_mixin.py,sha256=kwqLKmYcdmrAmTHnxImW32O3oMpNSOmJxxVIuUrwyMw,4842
138
138
  junifer/pipeline/registry.py,sha256=KavghqdJiCRBF4FYw3NkpL2RegpCfLH2fAY3AWwisaI,3595
@@ -142,10 +142,10 @@ junifer/pipeline/tests/test_pipeline_step_mixin.py,sha256=lthbb53HUObOBUnvO6mMta
142
142
  junifer/pipeline/tests/test_registry.py,sha256=XrBx2UaYwoZpjTTc1MWyEb8BD476TFH3JCn6-PPjypk,3864
143
143
  junifer/pipeline/tests/test_update_meta_mixin.py,sha256=C9cDTZB-9CN4zYLeSHLSo0dpWrB8o1fj0jlWpcP9Wsc,1374
144
144
  junifer/preprocess/__init__.py,sha256=GPbiTHFhb9BzUOSgmo_SpgTFNMmkcCJPhQoUA2MQgJI,255
145
- junifer/preprocess/base.py,sha256=bm5HLJPJy_qDFgSXHfMjTioSG-qNh6IG-Fdh8OZZic4,4693
145
+ junifer/preprocess/base.py,sha256=VI5hO0VKQW5J2ddpPJpAgqXHfDeoXaQzhbV17TS_gSM,5008
146
146
  junifer/preprocess/confounds/__init__.py,sha256=EDlcD9jy8O9xluJr6XOnFXtjGCDVqwg6sDIRDMbM8ZU,235
147
- junifer/preprocess/confounds/fmriprep_confound_remover.py,sha256=TSxXzg9UTBsOS0Nk2C7PYjTqoDLGpNdUCvWCB9-dnxo,21353
148
- junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py,sha256=omW1GtbRC-1cwvKbKLV6UB-32xa4yr_ICGh68uw9Q5M,19349
147
+ junifer/preprocess/confounds/fmriprep_confound_remover.py,sha256=1z7R2ESYcHO2GPn95pa5PUBMEnVExT4__P2k8IM6vNY,21584
148
+ junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py,sha256=AsQHcCrm98n-BO3MevvmZcVzLbRn5e3YDta9JCJlvtQ,21614
149
149
  junifer/preprocess/tests/test_preprocess_base.py,sha256=oWokM9bBx4MYXuN6onKsncOsP17_1Y5EOS2fUX4JT5Y,2559
150
150
  junifer/storage/__init__.py,sha256=voc6EDpLAZocPVa0VL2NCEWCZU66IBrFmdStesm3uk8,300
151
151
  junifer/storage/base.py,sha256=tpPmqkDcMmH-M2fpj-rhVAOuOzM2tOG6XdPZGDb8N_k,8771
@@ -172,10 +172,10 @@ junifer/utils/fs.py,sha256=Jd9AoV2fIF7pT7KhXsn8T1O1fJ1_SFZgaFuOBAM7DG8,460
172
172
  junifer/utils/logging.py,sha256=F2C6y5cNAb3OCVmBdiD8YW_tAknc8EeX_SgKewxcCEA,8852
173
173
  junifer/utils/tests/test_fs.py,sha256=o7XTk6OpafppxE4Kx_pDaUfYRt_bU_e1M86FTl5TPVk,862
174
174
  junifer/utils/tests/test_logging.py,sha256=uTzlwwlOv7bh_7DngitVFxCDbH_OWsqfeXEcNyKvF24,7748
175
- junifer-0.0.2.dev138.dist-info/AUTHORS.rst,sha256=rmULKpchpSol4ExWFdm-qu4fkpSZPYqIESVJBZtGb6E,163
176
- junifer-0.0.2.dev138.dist-info/LICENSE.md,sha256=z5aMVBrc-9kk0pxaOdOAkI62S5YhYMiF6ADsMtZmOZg,34353
177
- junifer-0.0.2.dev138.dist-info/METADATA,sha256=gzR0aatU5orYS3f3xNowMeiD95lH_nvs2Uj-eU5rbD8,5656
178
- junifer-0.0.2.dev138.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
179
- junifer-0.0.2.dev138.dist-info/entry_points.txt,sha256=DxFvKq0pOqRunAK0FxwJcoDfV1-dZvsFDpD5HRqSDhw,48
180
- junifer-0.0.2.dev138.dist-info/top_level.txt,sha256=4bAq1R2QFQ4b3hohjys2JBvxrl0GKk5LNFzYvz9VGcA,8
181
- junifer-0.0.2.dev138.dist-info/RECORD,,
175
+ junifer-0.0.2.dev140.dist-info/AUTHORS.rst,sha256=rmULKpchpSol4ExWFdm-qu4fkpSZPYqIESVJBZtGb6E,163
176
+ junifer-0.0.2.dev140.dist-info/LICENSE.md,sha256=z5aMVBrc-9kk0pxaOdOAkI62S5YhYMiF6ADsMtZmOZg,34353
177
+ junifer-0.0.2.dev140.dist-info/METADATA,sha256=fmFDkC4Bep5p-M_2Om4eDnyOmYbfuw9bW8S9KwjFFPo,5656
178
+ junifer-0.0.2.dev140.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
179
+ junifer-0.0.2.dev140.dist-info/entry_points.txt,sha256=DxFvKq0pOqRunAK0FxwJcoDfV1-dZvsFDpD5HRqSDhw,48
180
+ junifer-0.0.2.dev140.dist-info/top_level.txt,sha256=4bAq1R2QFQ4b3hohjys2JBvxrl0GKk5LNFzYvz9VGcA,8
181
+ junifer-0.0.2.dev140.dist-info/RECORD,,