junifer 0.0.7.dev332__py3-none-any.whl → 0.0.8__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 (293) hide show
  1. junifer/_version.py +9 -19
  2. junifer/api/__init__.pyi +17 -2
  3. junifer/api/functions.py +222 -39
  4. junifer/api/queue_context/__init__.pyi +11 -3
  5. junifer/api/queue_context/gnu_parallel_local_adapter.py +81 -120
  6. junifer/api/queue_context/htcondor_adapter.py +118 -181
  7. junifer/api/queue_context/queue_context_adapter.py +51 -7
  8. junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +10 -35
  9. junifer/api/queue_context/tests/test_htcondor_adapter.py +13 -50
  10. junifer/api/res/fsl/run_fsl_docker.sh +4 -0
  11. junifer/api/tests/test_functions.py +863 -36
  12. junifer/cli/__init__.py +1 -7
  13. junifer/cli/cli.py +41 -22
  14. junifer/cli/parser.py +23 -147
  15. junifer/cli/tests/data/gmd_mean.yaml +6 -6
  16. junifer/cli/tests/data/gmd_mean_htcondor.yaml +6 -5
  17. junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +1 -0
  18. junifer/cli/tests/test_cli.py +120 -4
  19. junifer/cli/tests/test_cli_utils.py +23 -6
  20. junifer/cli/utils.py +14 -9
  21. junifer/configs/__init__.py +5 -0
  22. junifer/configs/__init__.pyi +0 -0
  23. junifer/configs/juseless/datagrabbers/__init__.pyi +4 -2
  24. junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +18 -24
  25. junifer/configs/juseless/datagrabbers/camcan_vbm.py +20 -27
  26. junifer/configs/juseless/datagrabbers/ixi_vbm.py +44 -52
  27. junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -7
  28. junifer/configs/juseless/datagrabbers/tests/test_ucla.py +2 -19
  29. junifer/configs/juseless/datagrabbers/ucla.py +111 -104
  30. junifer/configs/juseless/datagrabbers/ukb_vbm.py +19 -25
  31. junifer/configs/py.typed +0 -0
  32. junifer/conftest.py +63 -24
  33. junifer/data/_dispatch.py +9 -19
  34. junifer/data/coordinates/_ants_coordinates_warper.py +4 -1
  35. junifer/data/coordinates/_coordinates.py +51 -6
  36. junifer/data/coordinates/_fsl_coordinates_warper.py +4 -1
  37. junifer/data/coordinates/tests/test_coordinates.py +15 -3
  38. junifer/data/coordinates/tests/test_coordinates_names.py +37 -0
  39. junifer/data/maps/_ants_maps_warper.py +18 -12
  40. junifer/data/maps/_fsl_maps_warper.py +7 -3
  41. junifer/data/maps/_maps.py +12 -8
  42. junifer/data/maps/tests/test_maps.py +13 -21
  43. junifer/data/masks/_ants_mask_warper.py +18 -12
  44. junifer/data/masks/_fsl_mask_warper.py +7 -3
  45. junifer/data/masks/_masks.py +15 -12
  46. junifer/data/masks/tests/test_masks.py +20 -17
  47. junifer/data/parcellations/_ants_parcellation_warper.py +18 -12
  48. junifer/data/parcellations/_fsl_parcellation_warper.py +7 -5
  49. junifer/data/parcellations/_parcellations.py +125 -91
  50. junifer/data/parcellations/tests/test_parcellations.py +122 -1
  51. junifer/data/template_spaces.py +117 -50
  52. junifer/data/tests/test_template_spaces.py +10 -7
  53. junifer/data/utils.py +10 -8
  54. junifer/datagrabber/__init__.pyi +38 -5
  55. junifer/datagrabber/aomic/__init__.pyi +8 -1
  56. junifer/datagrabber/aomic/_types.py +22 -0
  57. junifer/datagrabber/aomic/id1000.py +193 -183
  58. junifer/datagrabber/aomic/piop1.py +215 -259
  59. junifer/datagrabber/aomic/piop2.py +211 -244
  60. junifer/datagrabber/aomic/tests/test_id1000.py +70 -53
  61. junifer/datagrabber/aomic/tests/test_piop1.py +98 -102
  62. junifer/datagrabber/aomic/tests/test_piop2.py +88 -85
  63. junifer/datagrabber/base.py +253 -79
  64. junifer/datagrabber/datalad_base.py +127 -76
  65. junifer/datagrabber/dmcc13_benchmark.py +204 -289
  66. junifer/datagrabber/hcp1200/__init__.pyi +7 -2
  67. junifer/datagrabber/hcp1200/datalad_hcp1200.py +61 -40
  68. junifer/datagrabber/hcp1200/hcp1200.py +151 -164
  69. junifer/datagrabber/hcp1200/tests/test_hcp1200.py +116 -128
  70. junifer/datagrabber/multiple.py +183 -63
  71. junifer/datagrabber/pattern.py +358 -227
  72. junifer/datagrabber/pattern_datalad.py +84 -124
  73. junifer/datagrabber/pattern_validation_mixin.py +22 -50
  74. junifer/datagrabber/tests/test_base.py +17 -4
  75. junifer/datagrabber/tests/test_datalad_base.py +20 -27
  76. junifer/datagrabber/tests/test_dmcc13_benchmark.py +110 -122
  77. junifer/datagrabber/tests/test_multiple.py +293 -31
  78. junifer/datagrabber/tests/test_pattern.py +577 -18
  79. junifer/datagrabber/tests/test_pattern_datalad.py +177 -107
  80. junifer/datagrabber/tests/test_pattern_validation_mixin.py +9 -51
  81. junifer/datareader/default.py +8 -5
  82. junifer/datareader/tests/test_default_reader.py +1 -1
  83. junifer/external/BrainPrint/.codecov.yml +2 -0
  84. junifer/external/BrainPrint/.codespellignore +2 -0
  85. junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/bug-report.md +45 -0
  86. junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/documentation.md +12 -0
  87. junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/feature-request.md +24 -0
  88. junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/questions-help-support.md +28 -0
  89. junifer/external/BrainPrint/.github/dependabot.yml +6 -0
  90. junifer/external/BrainPrint/.github/workflows/build.yml +53 -0
  91. junifer/external/BrainPrint/.github/workflows/code-style.yml +44 -0
  92. junifer/external/BrainPrint/.github/workflows/doc.yml +65 -0
  93. junifer/external/BrainPrint/.github/workflows/publish.yml +31 -0
  94. junifer/external/BrainPrint/.github/workflows/pytest.yml +54 -0
  95. junifer/external/BrainPrint/.gitignore +123 -0
  96. junifer/external/BrainPrint/LICENSE +21 -0
  97. junifer/external/BrainPrint/README.md +108 -0
  98. junifer/external/BrainPrint/brainprint/cli/__init__.py +11 -0
  99. junifer/external/BrainPrint/brainprint/cli/help_text.py +169 -0
  100. junifer/external/BrainPrint/brainprint/cli/parser.py +150 -0
  101. junifer/external/BrainPrint/brainprint/cli/utils.py +14 -0
  102. junifer/external/BrainPrint/brainprint/commands/__init__.py +0 -0
  103. junifer/external/BrainPrint/brainprint/commands/sys_info.py +18 -0
  104. junifer/external/BrainPrint/brainprint/utils/tests/__init__.py +0 -0
  105. junifer/external/BrainPrint/brainprint/utils/tests/test_config.py +33 -0
  106. junifer/external/BrainPrint/doc/Makefile +20 -0
  107. junifer/external/BrainPrint/doc/_static/.gitkeep +0 -0
  108. junifer/external/BrainPrint/doc/_templates/autosummary/class.rst +10 -0
  109. junifer/external/BrainPrint/doc/_templates/autosummary/function.rst +8 -0
  110. junifer/external/BrainPrint/doc/_templates/autosummary/module.rst +6 -0
  111. junifer/external/BrainPrint/doc/api/index.rst +11 -0
  112. junifer/external/BrainPrint/doc/conf.py +272 -0
  113. junifer/external/BrainPrint/doc/index.rst +140 -0
  114. junifer/external/BrainPrint/doc/links.inc +36 -0
  115. junifer/external/BrainPrint/doc/make.bat +35 -0
  116. junifer/external/BrainPrint/doc/references.bib +23 -0
  117. junifer/external/BrainPrint/pyproject.toml +170 -0
  118. junifer/external/BrainPrint/setup.py +3 -0
  119. junifer/external/__init__.py +5 -0
  120. junifer/external/__init__.pyi +0 -0
  121. junifer/external/nilearn/junifer_connectivity_measure.py +95 -39
  122. junifer/external/nilearn/junifer_nifti_spheres_masker.py +226 -67
  123. junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +39 -27
  124. junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +231 -21
  125. junifer/external/py.typed +0 -0
  126. junifer/markers/__init__.pyi +6 -3
  127. junifer/markers/base.py +126 -76
  128. junifer/markers/brainprint.py +30 -39
  129. junifer/markers/complexity/__init__.py +20 -3
  130. junifer/markers/complexity/complexity_base.py +40 -41
  131. junifer/markers/complexity/hurst_exponent.py +22 -35
  132. junifer/markers/complexity/multiscale_entropy_auc.py +53 -41
  133. junifer/markers/complexity/perm_entropy.py +22 -36
  134. junifer/markers/complexity/range_entropy.py +22 -35
  135. junifer/markers/complexity/range_entropy_auc.py +27 -36
  136. junifer/markers/complexity/sample_entropy.py +22 -36
  137. junifer/markers/complexity/tests/test_complexity_registry.py +48 -0
  138. junifer/markers/complexity/tests/test_hurst_exponent.py +47 -36
  139. junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +50 -36
  140. junifer/markers/complexity/tests/test_perm_entropy.py +48 -36
  141. junifer/markers/complexity/tests/test_range_entropy.py +47 -36
  142. junifer/markers/complexity/tests/test_range_entropy_auc.py +47 -36
  143. junifer/markers/complexity/tests/test_sample_entropy.py +48 -36
  144. junifer/markers/complexity/tests/test_weighted_perm_entropy.py +50 -36
  145. junifer/markers/complexity/weighted_perm_entropy.py +22 -36
  146. junifer/markers/ets_rss.py +35 -31
  147. junifer/markers/falff/__init__.pyi +7 -1
  148. junifer/markers/falff/_afni_falff.py +22 -9
  149. junifer/markers/falff/_junifer_falff.py +47 -31
  150. junifer/markers/falff/falff_base.py +80 -60
  151. junifer/markers/falff/falff_maps.py +17 -41
  152. junifer/markers/falff/falff_parcels.py +26 -51
  153. junifer/markers/falff/falff_spheres.py +34 -61
  154. junifer/markers/falff/tests/test_falff_maps.py +20 -23
  155. junifer/markers/falff/tests/test_falff_mask.py +99 -0
  156. junifer/markers/falff/tests/test_falff_parcels.py +14 -10
  157. junifer/markers/falff/tests/test_falff_spheres.py +14 -10
  158. junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +32 -34
  159. junifer/markers/functional_connectivity/edge_functional_connectivity_maps.py +12 -25
  160. junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +19 -34
  161. junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +24 -44
  162. junifer/markers/functional_connectivity/functional_connectivity_base.py +50 -40
  163. junifer/markers/functional_connectivity/functional_connectivity_maps.py +12 -25
  164. junifer/markers/functional_connectivity/functional_connectivity_parcels.py +19 -34
  165. junifer/markers/functional_connectivity/functional_connectivity_spheres.py +24 -45
  166. junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +21 -22
  167. junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_maps.py +8 -7
  168. junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +8 -4
  169. junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +8 -4
  170. junifer/markers/functional_connectivity/tests/test_functional_connectivity_maps.py +8 -7
  171. junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +9 -5
  172. junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +8 -12
  173. junifer/markers/maps_aggregation.py +77 -55
  174. junifer/markers/parcel_aggregation.py +91 -70
  175. junifer/markers/reho/__init__.pyi +7 -1
  176. junifer/markers/reho/_afni_reho.py +23 -14
  177. junifer/markers/reho/_junifer_reho.py +112 -123
  178. junifer/markers/reho/reho_base.py +115 -37
  179. junifer/markers/reho/reho_maps.py +18 -32
  180. junifer/markers/reho/reho_parcels.py +26 -41
  181. junifer/markers/reho/reho_spheres.py +33 -54
  182. junifer/markers/reho/tests/test_junifer_reho.py +178 -0
  183. junifer/markers/reho/tests/test_reho_maps.py +27 -25
  184. junifer/markers/reho/tests/test_reho_parcels.py +28 -22
  185. junifer/markers/reho/tests/test_reho_spheres.py +16 -12
  186. junifer/markers/sphere_aggregation.py +88 -72
  187. junifer/markers/temporal_snr/temporal_snr_base.py +32 -30
  188. junifer/markers/temporal_snr/temporal_snr_maps.py +9 -18
  189. junifer/markers/temporal_snr/temporal_snr_parcels.py +19 -27
  190. junifer/markers/temporal_snr/temporal_snr_spheres.py +27 -41
  191. junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +2 -2
  192. junifer/markers/temporal_snr/tests/test_temporal_snr_maps.py +17 -22
  193. junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +11 -3
  194. junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +9 -9
  195. junifer/markers/tests/test_brainprint.py +10 -9
  196. junifer/markers/tests/test_ets_rss.py +7 -3
  197. junifer/markers/tests/test_lost_regions.py +279 -0
  198. junifer/markers/tests/test_maps_aggregation.py +67 -114
  199. junifer/markers/tests/test_marker_utils.py +40 -1
  200. junifer/markers/tests/test_markers_base.py +275 -6
  201. junifer/markers/tests/test_parcel_aggregation.py +91 -53
  202. junifer/markers/tests/test_sphere_aggregation.py +53 -47
  203. junifer/markers/utils.py +267 -5
  204. junifer/onthefly/__init__.py +2 -3
  205. junifer/onthefly/__init__.pyi +4 -0
  206. junifer/onthefly/_brainprint.py +3 -5
  207. junifer/onthefly/py.typed +0 -0
  208. junifer/onthefly/read_transform.py +11 -9
  209. junifer/onthefly/tests/test_read_transform.py +7 -7
  210. junifer/pipeline/__init__.pyi +4 -2
  211. junifer/pipeline/marker_collection.py +14 -10
  212. junifer/pipeline/pipeline_component_registry.py +25 -6
  213. junifer/pipeline/pipeline_step_mixin.py +5 -12
  214. junifer/pipeline/tests/test_data_object_dumper.py +10 -10
  215. junifer/pipeline/tests/test_marker_collection.py +145 -168
  216. junifer/pipeline/tests/test_pipeline_component_registry.py +52 -8
  217. junifer/pipeline/tests/test_pipeline_step_mixin.py +12 -26
  218. junifer/pipeline/tests/test_update_meta_mixin.py +4 -5
  219. junifer/pipeline/tests/test_workdir_manager.py +39 -0
  220. junifer/pipeline/update_meta_mixin.py +13 -10
  221. junifer/pipeline/utils.py +22 -17
  222. junifer/pipeline/workdir_manager.py +41 -32
  223. junifer/preprocess/__init__.pyi +9 -4
  224. junifer/preprocess/_temporal_filter.py +34 -33
  225. junifer/preprocess/_temporal_slicer.py +17 -30
  226. junifer/preprocess/base.py +99 -55
  227. junifer/preprocess/confounds/__init__.pyi +10 -2
  228. junifer/preprocess/confounds/fmriprep_confound_remover.py +87 -109
  229. junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +64 -45
  230. junifer/preprocess/smoothing/__init__.pyi +2 -2
  231. junifer/preprocess/smoothing/_afni_smoothing.py +8 -7
  232. junifer/preprocess/smoothing/_fsl_smoothing.py +6 -4
  233. junifer/preprocess/smoothing/_nilearn_smoothing.py +7 -5
  234. junifer/preprocess/smoothing/smoothing.py +59 -40
  235. junifer/preprocess/smoothing/tests/test_smoothing.py +28 -8
  236. junifer/preprocess/tests/test_preprocess_base.py +17 -9
  237. junifer/preprocess/tests/test_temporal_filter.py +37 -16
  238. junifer/preprocess/tests/test_temporal_slicer.py +12 -12
  239. junifer/preprocess/warping/__init__.pyi +2 -2
  240. junifer/preprocess/warping/_ants_warper.py +56 -40
  241. junifer/preprocess/warping/_fsl_warper.py +49 -36
  242. junifer/preprocess/warping/_utils.py +106 -0
  243. junifer/preprocess/warping/space_warper.py +99 -98
  244. junifer/preprocess/warping/tests/test_space_warper.py +46 -41
  245. junifer/preprocess/warping/tests/test_warping_utils.py +163 -0
  246. junifer/stats.py +46 -34
  247. junifer/storage/__init__.pyi +8 -4
  248. junifer/storage/base.py +129 -64
  249. junifer/storage/hdf5.py +307 -199
  250. junifer/storage/pandas_base.py +46 -24
  251. junifer/storage/sqlite.py +99 -62
  252. junifer/storage/tests/data/collected_h5io_fork.hdf5 +0 -0
  253. junifer/storage/tests/test_hdf5.py +147 -12
  254. junifer/storage/tests/test_repeated_storage.py +293 -0
  255. junifer/storage/tests/test_sqlite.py +9 -20
  256. junifer/storage/tests/test_storage_base.py +18 -21
  257. junifer/storage/tests/test_utils.py +83 -22
  258. junifer/storage/utils.py +58 -38
  259. junifer/testing/__init__.pyi +2 -2
  260. junifer/testing/datagrabbers.py +480 -44
  261. junifer/testing/registry.py +12 -0
  262. junifer/testing/tests/test_adhdtesting_datagrabber.py +24 -0
  263. junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +5 -0
  264. junifer/testing/tests/test_partlycloudytesting_datagrabber.py +52 -0
  265. junifer/testing/tests/test_spmauditory_datagrabber.py +16 -0
  266. junifer/testing/tests/test_testing_registry.py +31 -0
  267. junifer/testing/tests/test_testing_utils.py +35 -0
  268. junifer/testing/tests/test_uclacnpvbmtesting_datagrabber.py +81 -0
  269. junifer/testing/utils.py +33 -1
  270. junifer/tests/test_stats.py +1 -5
  271. junifer/typing/__init__.pyi +2 -0
  272. junifer/typing/_typing.py +34 -19
  273. junifer/typing/py.typed +0 -0
  274. junifer/utils/__init__.pyi +10 -1
  275. junifer/utils/_config.py +1 -2
  276. junifer/utils/helpers.py +68 -2
  277. junifer/utils/logging.py +31 -7
  278. junifer/utils/tests/test_helpers.py +36 -1
  279. {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/METADATA +43 -35
  280. junifer-0.0.8.dist-info/RECORD +402 -0
  281. {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/WHEEL +1 -1
  282. junifer/cli/tests/test_parser.py +0 -280
  283. junifer/external/h5io/h5io/__init__.py +0 -15
  284. junifer/external/h5io/h5io/_h5io.py +0 -767
  285. junifer/external/h5io/h5io/_version.py +0 -1
  286. junifer/external/h5io/h5io/chunked_array.py +0 -94
  287. junifer/external/h5io/h5io/chunked_list.py +0 -65
  288. junifer/markers/complexity/__init__.pyi +0 -17
  289. junifer-0.0.7.dev332.dist-info/RECORD +0 -353
  290. {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/entry_points.txt +0 -0
  291. {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/licenses/AUTHORS.rst +0 -0
  292. {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/licenses/LICENSE.md +0 -0
  293. {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/top_level.txt +0 -0
@@ -2,105 +2,128 @@
2
2
 
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
4
  # License: AGPL
5
-
6
- from typing import Optional, Union
5
+ from collections.abc import Iterator
6
+ from pathlib import Path
7
7
 
8
8
  import pytest
9
+ from pydantic import AnyUrl
10
+
11
+ from junifer.datagrabber import DataType, DMCC13Benchmark
12
+ from junifer.testing import config_override
13
+
14
+
15
+ URI = AnyUrl(
16
+ "https://cerebra.fz-juelich.de/junifer/datalad-example-dmcc13-benchmark.git"
17
+ )
9
18
 
10
- from junifer.datagrabber import DMCC13Benchmark
11
19
 
20
+ @pytest.fixture(scope="module")
21
+ def dmcc13_datadir(tmp_path_factory) -> Iterator[Path]:
22
+ """Return the path to the DMCC13 benchmark data directory.
12
23
 
13
- URI = "https://gin.g-node.org/synchon/datalad-example-dmcc13-benchmark"
24
+ Parameters
25
+ ----------
26
+ tmp_path_factory : pathlib.Path
27
+ The path to the test directory.
28
+
29
+ Returns
30
+ -------
31
+ pathlib.Path
32
+ The path to the DMCC13 benchmark data directory.
33
+
34
+ """
35
+ datadir = tmp_path_factory.mktemp("dmcc13_datadir")
36
+ datadir.mkdir(parents=True, exist_ok=True)
37
+ dg = DMCC13Benchmark(uri=URI, types=["T1w"], datadir=datadir)
38
+ with config_override("datagrabber.skipidcheck", True), dg:
39
+ yield datadir
14
40
 
15
41
 
16
42
  @pytest.mark.parametrize(
17
43
  "sessions, tasks, phase_encodings, runs, native_t1w",
18
44
  [
19
- (None, None, None, None, False),
20
- ("ses-wave1bas", "Rest", "AP", "1", False),
21
- ("ses-wave1bas", "Axcpt", "AP", "1", False),
22
- ("ses-wave1bas", "Cuedts", "AP", "1", False),
23
- ("ses-wave1bas", "Stern", "AP", "1", False),
24
- ("ses-wave1bas", "Stroop", "AP", "1", False),
25
- ("ses-wave1bas", "Rest", "PA", "2", False),
26
- ("ses-wave1bas", "Axcpt", "PA", "2", False),
27
- ("ses-wave1bas", "Cuedts", "PA", "2", False),
28
- ("ses-wave1bas", "Stern", "PA", "2", False),
29
- ("ses-wave1bas", "Stroop", "PA", "2", False),
30
- ("ses-wave1bas", "Rest", "AP", "1", True),
31
- ("ses-wave1bas", "Axcpt", "AP", "1", True),
32
- ("ses-wave1bas", "Cuedts", "AP", "1", True),
33
- ("ses-wave1bas", "Stern", "AP", "1", True),
34
- ("ses-wave1bas", "Stroop", "AP", "1", True),
35
- ("ses-wave1bas", "Rest", "PA", "2", True),
36
- ("ses-wave1bas", "Axcpt", "PA", "2", True),
37
- ("ses-wave1bas", "Cuedts", "PA", "2", True),
38
- ("ses-wave1bas", "Stern", "PA", "2", True),
39
- ("ses-wave1bas", "Stroop", "PA", "2", True),
40
- ("ses-wave1pro", "Rest", "AP", "1", False),
41
- ("ses-wave1pro", "Rest", "PA", "2", False),
42
- ("ses-wave1pro", "Rest", "AP", "1", True),
43
- ("ses-wave1pro", "Rest", "PA", "2", True),
44
- ("ses-wave1rea", "Rest", "AP", "1", False),
45
- ("ses-wave1rea", "Rest", "PA", "2", False),
46
- ("ses-wave1rea", "Rest", "AP", "1", True),
47
- ("ses-wave1rea", "Rest", "PA", "2", True),
45
+ (["ses-wave1bas"], ["Rest"], ["AP"], ["1"], False),
46
+ (["ses-wave1bas"], ["Axcpt"], ["AP"], ["1"], False),
47
+ (["ses-wave1bas"], ["Cuedts"], ["AP"], ["1"], False),
48
+ (["ses-wave1bas"], ["Stern"], ["AP"], ["1"], False),
49
+ (["ses-wave1bas"], ["Stroop"], ["AP"], ["1"], False),
50
+ (["ses-wave1bas"], ["Rest"], ["PA"], ["2"], False),
51
+ (["ses-wave1bas"], ["Axcpt"], ["PA"], ["2"], False),
52
+ (["ses-wave1bas"], ["Cuedts"], ["PA"], ["2"], False),
53
+ (["ses-wave1bas"], ["Stern"], ["PA"], ["2"], False),
54
+ (["ses-wave1bas"], ["Stroop"], ["PA"], ["2"], False),
55
+ (["ses-wave1bas"], ["Rest"], ["AP"], ["1"], True),
56
+ (["ses-wave1bas"], ["Axcpt"], ["AP"], ["1"], True),
57
+ (["ses-wave1bas"], ["Cuedts"], ["AP"], ["1"], True),
58
+ (["ses-wave1bas"], ["Stern"], ["AP"], ["1"], True),
59
+ (["ses-wave1bas"], ["Stroop"], ["AP"], ["1"], True),
60
+ (["ses-wave1bas"], ["Rest"], ["PA"], ["2"], True),
61
+ (["ses-wave1bas"], ["Axcpt"], ["PA"], ["2"], True),
62
+ (["ses-wave1bas"], ["Cuedts"], ["PA"], ["2"], True),
63
+ (["ses-wave1bas"], ["Stern"], ["PA"], ["2"], True),
64
+ (["ses-wave1bas"], ["Stroop"], ["PA"], ["2"], True),
65
+ (["ses-wave1pro"], ["Rest"], ["AP"], ["1"], False),
66
+ (["ses-wave1pro"], ["Rest"], ["PA"], ["2"], False),
67
+ (["ses-wave1pro"], ["Rest"], ["AP"], ["1"], True),
68
+ (["ses-wave1pro"], ["Rest"], ["PA"], ["2"], True),
69
+ (["ses-wave1rea"], ["Rest"], ["AP"], ["1"], False),
70
+ (["ses-wave1rea"], ["Rest"], ["PA"], ["2"], False),
71
+ (["ses-wave1rea"], ["Rest"], ["AP"], ["1"], True),
72
+ (["ses-wave1rea"], ["Rest"], ["PA"], ["2"], True),
48
73
  ],
49
74
  )
50
75
  def test_DMCC13Benchmark(
51
- sessions: Optional[str],
52
- tasks: Optional[str],
53
- phase_encodings: Optional[str],
54
- runs: Optional[str],
76
+ sessions: list[str],
77
+ tasks: list[str],
78
+ phase_encodings: list[str],
79
+ runs: list[str],
55
80
  native_t1w: bool,
81
+ dmcc13_datadir: Path,
56
82
  ) -> None:
57
83
  """Test DMCC13Benchmark DataGrabber.
58
84
 
59
85
  Parameters
60
86
  ----------
61
- sessions : str or None
87
+ sessions : list of str
62
88
  The parametrized session values.
63
- tasks : str or None
89
+ tasks : list of str
64
90
  The parametrized task values.
65
- phase_encodings : str or None
91
+ phase_encodings : list of str
66
92
  The parametrized phase encoding values.
67
- runs : str or None
93
+ runs : list of str
68
94
  The parametrized run values.
69
95
  native_t1w : bool
70
96
  The parametrized values for fetching native T1w.
97
+ dmcc13_datadir : pathlib.Path
98
+ The path to the DMCC13 benchmark data directory.
71
99
 
72
100
  """
73
101
  dg = DMCC13Benchmark(
102
+ uri=URI,
74
103
  sessions=sessions,
75
104
  tasks=tasks,
76
105
  phase_encodings=phase_encodings,
77
106
  runs=runs,
78
107
  native_t1w=native_t1w,
108
+ datadir=dmcc13_datadir,
79
109
  )
80
- # Set URI to Gin
81
- dg.uri = URI
82
-
83
110
  with dg:
84
- # Get all elements
85
111
  all_elements = dg.get_elements()
86
- # Get test element
87
112
  test_element = all_elements[0]
88
- # Get test element's access values
89
113
  _, ses, task, phase, run = test_element
90
- # Access data
91
114
  out = dg[("sub-01", ses, task, phase, run)]
92
115
 
93
116
  # Available data types
94
117
  data_types = [
95
- "BOLD",
96
- "VBM_CSF",
97
- "VBM_GM",
98
- "VBM_WM",
99
- "T1w",
118
+ DataType.BOLD,
119
+ DataType.VBM_CSF,
120
+ DataType.VBM_GM,
121
+ DataType.VBM_WM,
122
+ DataType.T1w,
100
123
  ]
101
124
  # Add Warp if native T1w is accessed
102
125
  if native_t1w:
103
- data_types.append("Warp")
126
+ data_types.append(DataType.Warp)
104
127
 
105
128
  # Data type file name formats
106
129
  data_file_names = [
@@ -129,11 +152,13 @@ def test_DMCC13Benchmark(
129
152
  "sub-01_space-MNI152NLin2009cAsym_desc-preproc_T1w.nii.gz"
130
153
  )
131
154
 
132
- for data_type, data_file_name in zip(data_types, data_file_names):
155
+ for data_type, data_file_name in zip(
156
+ data_types, data_file_names, strict=False
157
+ ):
133
158
  # Assert data type
134
- assert data_type in out
159
+ assert data_type in out.keys()
135
160
  # Conditional for Warp
136
- if data_type == "Warp":
161
+ if data_type is DataType.Warp:
137
162
  for idx, fname in enumerate(data_file_name):
138
163
  # Assert data file path exists
139
164
  assert out[data_type][idx]["path"].exists()
@@ -166,6 +191,7 @@ def test_DMCC13Benchmark(
166
191
  "desc-confounds_regressors.tsv"
167
192
  ),
168
193
  ),
194
+ strict=False,
169
195
  ):
170
196
  # Assert data type
171
197
  assert type_ in out["BOLD"]
@@ -199,15 +225,15 @@ def test_DMCC13Benchmark(
199
225
  @pytest.mark.parametrize(
200
226
  "types, native_t1w",
201
227
  [
202
- ("BOLD", True),
228
+ (["BOLD"], True),
203
229
  ("BOLD", False),
204
- ("T1w", True),
230
+ (["T1w"], True),
205
231
  ("T1w", False),
206
- ("VBM_CSF", True),
232
+ (["VBM_CSF"], True),
207
233
  ("VBM_CSF", False),
208
- ("VBM_GM", True),
234
+ (["VBM_GM"], True),
209
235
  ("VBM_GM", False),
210
- ("VBM_WM", True),
236
+ (["VBM_WM"], True),
211
237
  ("VBM_WM", False),
212
238
  (["BOLD", "VBM_CSF"], True),
213
239
  (["BOLD", "VBM_CSF"], False),
@@ -218,8 +244,9 @@ def test_DMCC13Benchmark(
218
244
  ],
219
245
  )
220
246
  def test_DMCC13Benchmark_partial_data_access(
221
- types: Union[str, list[str]],
247
+ types: str | list[str],
222
248
  native_t1w: bool,
249
+ dmcc13_datadir: Path,
223
250
  ) -> None:
224
251
  """Test DMCC13Benchmark DataGrabber partial data access.
225
252
 
@@ -229,68 +256,29 @@ def test_DMCC13Benchmark_partial_data_access(
229
256
  The parametrized types.
230
257
  native_t1w : bool
231
258
  The parametrized values for fetching native T1w.
259
+ dmcc13_datadir : pathlib.Path
260
+ The path to the DMCC13 benchmark data directory.
232
261
 
233
262
  """
234
- dg = DMCC13Benchmark(types=types, native_t1w=native_t1w)
235
- # Set URI to Gin
236
- dg.uri = URI
237
-
263
+ dg = DMCC13Benchmark(
264
+ uri=URI,
265
+ types=types,
266
+ native_t1w=native_t1w,
267
+ datadir=dmcc13_datadir,
268
+ )
238
269
  with dg:
239
- # Get all elements
240
270
  all_elements = dg.get_elements()
241
- # Get test element
242
271
  test_element = all_elements[0]
243
- # Get test element's access values
244
- _, ses, task, phase, run = test_element
245
- # Access data
246
- out = dg[("sub-01", ses, task, phase, run)]
247
- # Assert data type
248
- if isinstance(types, list):
249
- for type_ in types:
250
- assert type_ in out
272
+ # Elements only have the subject if no data type of the tasks is
273
+ # grabbed
274
+ if isinstance(test_element, tuple):
275
+ out = dg[("sub-01", *test_element[1:])]
251
276
  else:
252
- assert types in out
253
-
254
-
255
- def test_DMCC13Benchmark_incorrect_data_type() -> None:
256
- """Test DMCC13Benchmark DataGrabber incorrect data type."""
257
- with pytest.raises(
258
- ValueError, match="`patterns` must contain all `types`"
259
- ):
260
- _ = DMCC13Benchmark(types="Orcus")
261
-
262
-
263
- def test_DMCC13Benchmark_invalid_sessions():
264
- """Test DMCC13Benchmark DataGrabber invalid sessions."""
265
- with pytest.raises(
266
- ValueError,
267
- match=("phonyses is not a valid session in the DMCC dataset"),
268
- ):
269
- DMCC13Benchmark(sessions="phonyses")
270
-
271
-
272
- def test_DMCC13Benchmark_invalid_tasks():
273
- """Test DMCC13Benchmark DataGrabber invalid tasks."""
274
- with pytest.raises(
275
- ValueError,
276
- match=("thisisnotarealtask is not a valid task in the DMCC dataset"),
277
- ):
278
- DMCC13Benchmark(tasks="thisisnotarealtask")
279
-
280
-
281
- def test_DMCC13Benchmark_phase_encodings():
282
- """Test DMCC13Benchmark DataGrabber invalid phase encodings."""
283
- with pytest.raises(
284
- ValueError,
285
- match=("moonphase is not a valid phase encoding in the DMCC dataset"),
286
- ):
287
- DMCC13Benchmark(phase_encodings="moonphase")
288
-
289
-
290
- def test_DMCC13Benchmark_runs():
291
- """Test DMCC13Benchmark DataGrabber invalid runs."""
292
- with pytest.raises(
293
- ValueError,
294
- match=("cerebralrun is not a valid run in the DMCC dataset"),
295
- ):
296
- DMCC13Benchmark(runs="cerebralrun")
277
+ out = dg["sub-01"]
278
+ # Assert data type
279
+ if isinstance(types, str):
280
+ types = [types]
281
+ for type_ in types:
282
+ assert type_ in out
283
+ element = out[type_]["meta"]["element"]
284
+ assert list(element) == dg.get_element_keys()