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.
- junifer/_version.py +9 -19
- junifer/api/__init__.pyi +17 -2
- junifer/api/functions.py +222 -39
- junifer/api/queue_context/__init__.pyi +11 -3
- junifer/api/queue_context/gnu_parallel_local_adapter.py +81 -120
- junifer/api/queue_context/htcondor_adapter.py +118 -181
- junifer/api/queue_context/queue_context_adapter.py +51 -7
- junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +10 -35
- junifer/api/queue_context/tests/test_htcondor_adapter.py +13 -50
- junifer/api/res/fsl/run_fsl_docker.sh +4 -0
- junifer/api/tests/test_functions.py +863 -36
- junifer/cli/__init__.py +1 -7
- junifer/cli/cli.py +41 -22
- junifer/cli/parser.py +23 -147
- junifer/cli/tests/data/gmd_mean.yaml +6 -6
- junifer/cli/tests/data/gmd_mean_htcondor.yaml +6 -5
- junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +1 -0
- junifer/cli/tests/test_cli.py +120 -4
- junifer/cli/tests/test_cli_utils.py +23 -6
- junifer/cli/utils.py +14 -9
- junifer/configs/__init__.py +5 -0
- junifer/configs/__init__.pyi +0 -0
- junifer/configs/juseless/datagrabbers/__init__.pyi +4 -2
- junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +18 -24
- junifer/configs/juseless/datagrabbers/camcan_vbm.py +20 -27
- junifer/configs/juseless/datagrabbers/ixi_vbm.py +44 -52
- junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -7
- junifer/configs/juseless/datagrabbers/tests/test_ucla.py +2 -19
- junifer/configs/juseless/datagrabbers/ucla.py +111 -104
- junifer/configs/juseless/datagrabbers/ukb_vbm.py +19 -25
- junifer/configs/py.typed +0 -0
- junifer/conftest.py +63 -24
- junifer/data/_dispatch.py +9 -19
- junifer/data/coordinates/_ants_coordinates_warper.py +4 -1
- junifer/data/coordinates/_coordinates.py +51 -6
- junifer/data/coordinates/_fsl_coordinates_warper.py +4 -1
- junifer/data/coordinates/tests/test_coordinates.py +15 -3
- junifer/data/coordinates/tests/test_coordinates_names.py +37 -0
- junifer/data/maps/_ants_maps_warper.py +18 -12
- junifer/data/maps/_fsl_maps_warper.py +7 -3
- junifer/data/maps/_maps.py +12 -8
- junifer/data/maps/tests/test_maps.py +13 -21
- junifer/data/masks/_ants_mask_warper.py +18 -12
- junifer/data/masks/_fsl_mask_warper.py +7 -3
- junifer/data/masks/_masks.py +15 -12
- junifer/data/masks/tests/test_masks.py +20 -17
- junifer/data/parcellations/_ants_parcellation_warper.py +18 -12
- junifer/data/parcellations/_fsl_parcellation_warper.py +7 -5
- junifer/data/parcellations/_parcellations.py +125 -91
- junifer/data/parcellations/tests/test_parcellations.py +122 -1
- junifer/data/template_spaces.py +117 -50
- junifer/data/tests/test_template_spaces.py +10 -7
- junifer/data/utils.py +10 -8
- junifer/datagrabber/__init__.pyi +38 -5
- junifer/datagrabber/aomic/__init__.pyi +8 -1
- junifer/datagrabber/aomic/_types.py +22 -0
- junifer/datagrabber/aomic/id1000.py +193 -183
- junifer/datagrabber/aomic/piop1.py +215 -259
- junifer/datagrabber/aomic/piop2.py +211 -244
- junifer/datagrabber/aomic/tests/test_id1000.py +70 -53
- junifer/datagrabber/aomic/tests/test_piop1.py +98 -102
- junifer/datagrabber/aomic/tests/test_piop2.py +88 -85
- junifer/datagrabber/base.py +253 -79
- junifer/datagrabber/datalad_base.py +127 -76
- junifer/datagrabber/dmcc13_benchmark.py +204 -289
- junifer/datagrabber/hcp1200/__init__.pyi +7 -2
- junifer/datagrabber/hcp1200/datalad_hcp1200.py +61 -40
- junifer/datagrabber/hcp1200/hcp1200.py +151 -164
- junifer/datagrabber/hcp1200/tests/test_hcp1200.py +116 -128
- junifer/datagrabber/multiple.py +183 -63
- junifer/datagrabber/pattern.py +358 -227
- junifer/datagrabber/pattern_datalad.py +84 -124
- junifer/datagrabber/pattern_validation_mixin.py +22 -50
- junifer/datagrabber/tests/test_base.py +17 -4
- junifer/datagrabber/tests/test_datalad_base.py +20 -27
- junifer/datagrabber/tests/test_dmcc13_benchmark.py +110 -122
- junifer/datagrabber/tests/test_multiple.py +293 -31
- junifer/datagrabber/tests/test_pattern.py +577 -18
- junifer/datagrabber/tests/test_pattern_datalad.py +177 -107
- junifer/datagrabber/tests/test_pattern_validation_mixin.py +9 -51
- junifer/datareader/default.py +8 -5
- junifer/datareader/tests/test_default_reader.py +1 -1
- junifer/external/BrainPrint/.codecov.yml +2 -0
- junifer/external/BrainPrint/.codespellignore +2 -0
- junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/bug-report.md +45 -0
- junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/documentation.md +12 -0
- junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/feature-request.md +24 -0
- junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/questions-help-support.md +28 -0
- junifer/external/BrainPrint/.github/dependabot.yml +6 -0
- junifer/external/BrainPrint/.github/workflows/build.yml +53 -0
- junifer/external/BrainPrint/.github/workflows/code-style.yml +44 -0
- junifer/external/BrainPrint/.github/workflows/doc.yml +65 -0
- junifer/external/BrainPrint/.github/workflows/publish.yml +31 -0
- junifer/external/BrainPrint/.github/workflows/pytest.yml +54 -0
- junifer/external/BrainPrint/.gitignore +123 -0
- junifer/external/BrainPrint/LICENSE +21 -0
- junifer/external/BrainPrint/README.md +108 -0
- junifer/external/BrainPrint/brainprint/cli/__init__.py +11 -0
- junifer/external/BrainPrint/brainprint/cli/help_text.py +169 -0
- junifer/external/BrainPrint/brainprint/cli/parser.py +150 -0
- junifer/external/BrainPrint/brainprint/cli/utils.py +14 -0
- junifer/external/BrainPrint/brainprint/commands/__init__.py +0 -0
- junifer/external/BrainPrint/brainprint/commands/sys_info.py +18 -0
- junifer/external/BrainPrint/brainprint/utils/tests/__init__.py +0 -0
- junifer/external/BrainPrint/brainprint/utils/tests/test_config.py +33 -0
- junifer/external/BrainPrint/doc/Makefile +20 -0
- junifer/external/BrainPrint/doc/_static/.gitkeep +0 -0
- junifer/external/BrainPrint/doc/_templates/autosummary/class.rst +10 -0
- junifer/external/BrainPrint/doc/_templates/autosummary/function.rst +8 -0
- junifer/external/BrainPrint/doc/_templates/autosummary/module.rst +6 -0
- junifer/external/BrainPrint/doc/api/index.rst +11 -0
- junifer/external/BrainPrint/doc/conf.py +272 -0
- junifer/external/BrainPrint/doc/index.rst +140 -0
- junifer/external/BrainPrint/doc/links.inc +36 -0
- junifer/external/BrainPrint/doc/make.bat +35 -0
- junifer/external/BrainPrint/doc/references.bib +23 -0
- junifer/external/BrainPrint/pyproject.toml +170 -0
- junifer/external/BrainPrint/setup.py +3 -0
- junifer/external/__init__.py +5 -0
- junifer/external/__init__.pyi +0 -0
- junifer/external/nilearn/junifer_connectivity_measure.py +95 -39
- junifer/external/nilearn/junifer_nifti_spheres_masker.py +226 -67
- junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +39 -27
- junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +231 -21
- junifer/external/py.typed +0 -0
- junifer/markers/__init__.pyi +6 -3
- junifer/markers/base.py +126 -76
- junifer/markers/brainprint.py +30 -39
- junifer/markers/complexity/__init__.py +20 -3
- junifer/markers/complexity/complexity_base.py +40 -41
- junifer/markers/complexity/hurst_exponent.py +22 -35
- junifer/markers/complexity/multiscale_entropy_auc.py +53 -41
- junifer/markers/complexity/perm_entropy.py +22 -36
- junifer/markers/complexity/range_entropy.py +22 -35
- junifer/markers/complexity/range_entropy_auc.py +27 -36
- junifer/markers/complexity/sample_entropy.py +22 -36
- junifer/markers/complexity/tests/test_complexity_registry.py +48 -0
- junifer/markers/complexity/tests/test_hurst_exponent.py +47 -36
- junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +50 -36
- junifer/markers/complexity/tests/test_perm_entropy.py +48 -36
- junifer/markers/complexity/tests/test_range_entropy.py +47 -36
- junifer/markers/complexity/tests/test_range_entropy_auc.py +47 -36
- junifer/markers/complexity/tests/test_sample_entropy.py +48 -36
- junifer/markers/complexity/tests/test_weighted_perm_entropy.py +50 -36
- junifer/markers/complexity/weighted_perm_entropy.py +22 -36
- junifer/markers/ets_rss.py +35 -31
- junifer/markers/falff/__init__.pyi +7 -1
- junifer/markers/falff/_afni_falff.py +22 -9
- junifer/markers/falff/_junifer_falff.py +47 -31
- junifer/markers/falff/falff_base.py +80 -60
- junifer/markers/falff/falff_maps.py +17 -41
- junifer/markers/falff/falff_parcels.py +26 -51
- junifer/markers/falff/falff_spheres.py +34 -61
- junifer/markers/falff/tests/test_falff_maps.py +20 -23
- junifer/markers/falff/tests/test_falff_mask.py +99 -0
- junifer/markers/falff/tests/test_falff_parcels.py +14 -10
- junifer/markers/falff/tests/test_falff_spheres.py +14 -10
- junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +32 -34
- junifer/markers/functional_connectivity/edge_functional_connectivity_maps.py +12 -25
- junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +19 -34
- junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +24 -44
- junifer/markers/functional_connectivity/functional_connectivity_base.py +50 -40
- junifer/markers/functional_connectivity/functional_connectivity_maps.py +12 -25
- junifer/markers/functional_connectivity/functional_connectivity_parcels.py +19 -34
- junifer/markers/functional_connectivity/functional_connectivity_spheres.py +24 -45
- junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +21 -22
- junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_maps.py +8 -7
- junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +8 -4
- junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +8 -4
- junifer/markers/functional_connectivity/tests/test_functional_connectivity_maps.py +8 -7
- junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +9 -5
- junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +8 -12
- junifer/markers/maps_aggregation.py +77 -55
- junifer/markers/parcel_aggregation.py +91 -70
- junifer/markers/reho/__init__.pyi +7 -1
- junifer/markers/reho/_afni_reho.py +23 -14
- junifer/markers/reho/_junifer_reho.py +112 -123
- junifer/markers/reho/reho_base.py +115 -37
- junifer/markers/reho/reho_maps.py +18 -32
- junifer/markers/reho/reho_parcels.py +26 -41
- junifer/markers/reho/reho_spheres.py +33 -54
- junifer/markers/reho/tests/test_junifer_reho.py +178 -0
- junifer/markers/reho/tests/test_reho_maps.py +27 -25
- junifer/markers/reho/tests/test_reho_parcels.py +28 -22
- junifer/markers/reho/tests/test_reho_spheres.py +16 -12
- junifer/markers/sphere_aggregation.py +88 -72
- junifer/markers/temporal_snr/temporal_snr_base.py +32 -30
- junifer/markers/temporal_snr/temporal_snr_maps.py +9 -18
- junifer/markers/temporal_snr/temporal_snr_parcels.py +19 -27
- junifer/markers/temporal_snr/temporal_snr_spheres.py +27 -41
- junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +2 -2
- junifer/markers/temporal_snr/tests/test_temporal_snr_maps.py +17 -22
- junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +11 -3
- junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +9 -9
- junifer/markers/tests/test_brainprint.py +10 -9
- junifer/markers/tests/test_ets_rss.py +7 -3
- junifer/markers/tests/test_lost_regions.py +279 -0
- junifer/markers/tests/test_maps_aggregation.py +67 -114
- junifer/markers/tests/test_marker_utils.py +40 -1
- junifer/markers/tests/test_markers_base.py +275 -6
- junifer/markers/tests/test_parcel_aggregation.py +91 -53
- junifer/markers/tests/test_sphere_aggregation.py +53 -47
- junifer/markers/utils.py +267 -5
- junifer/onthefly/__init__.py +2 -3
- junifer/onthefly/__init__.pyi +4 -0
- junifer/onthefly/_brainprint.py +3 -5
- junifer/onthefly/py.typed +0 -0
- junifer/onthefly/read_transform.py +11 -9
- junifer/onthefly/tests/test_read_transform.py +7 -7
- junifer/pipeline/__init__.pyi +4 -2
- junifer/pipeline/marker_collection.py +14 -10
- junifer/pipeline/pipeline_component_registry.py +25 -6
- junifer/pipeline/pipeline_step_mixin.py +5 -12
- junifer/pipeline/tests/test_data_object_dumper.py +10 -10
- junifer/pipeline/tests/test_marker_collection.py +145 -168
- junifer/pipeline/tests/test_pipeline_component_registry.py +52 -8
- junifer/pipeline/tests/test_pipeline_step_mixin.py +12 -26
- junifer/pipeline/tests/test_update_meta_mixin.py +4 -5
- junifer/pipeline/tests/test_workdir_manager.py +39 -0
- junifer/pipeline/update_meta_mixin.py +13 -10
- junifer/pipeline/utils.py +22 -17
- junifer/pipeline/workdir_manager.py +41 -32
- junifer/preprocess/__init__.pyi +9 -4
- junifer/preprocess/_temporal_filter.py +34 -33
- junifer/preprocess/_temporal_slicer.py +17 -30
- junifer/preprocess/base.py +99 -55
- junifer/preprocess/confounds/__init__.pyi +10 -2
- junifer/preprocess/confounds/fmriprep_confound_remover.py +87 -109
- junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +64 -45
- junifer/preprocess/smoothing/__init__.pyi +2 -2
- junifer/preprocess/smoothing/_afni_smoothing.py +8 -7
- junifer/preprocess/smoothing/_fsl_smoothing.py +6 -4
- junifer/preprocess/smoothing/_nilearn_smoothing.py +7 -5
- junifer/preprocess/smoothing/smoothing.py +59 -40
- junifer/preprocess/smoothing/tests/test_smoothing.py +28 -8
- junifer/preprocess/tests/test_preprocess_base.py +17 -9
- junifer/preprocess/tests/test_temporal_filter.py +37 -16
- junifer/preprocess/tests/test_temporal_slicer.py +12 -12
- junifer/preprocess/warping/__init__.pyi +2 -2
- junifer/preprocess/warping/_ants_warper.py +56 -40
- junifer/preprocess/warping/_fsl_warper.py +49 -36
- junifer/preprocess/warping/_utils.py +106 -0
- junifer/preprocess/warping/space_warper.py +99 -98
- junifer/preprocess/warping/tests/test_space_warper.py +46 -41
- junifer/preprocess/warping/tests/test_warping_utils.py +163 -0
- junifer/stats.py +46 -34
- junifer/storage/__init__.pyi +8 -4
- junifer/storage/base.py +129 -64
- junifer/storage/hdf5.py +307 -199
- junifer/storage/pandas_base.py +46 -24
- junifer/storage/sqlite.py +99 -62
- junifer/storage/tests/data/collected_h5io_fork.hdf5 +0 -0
- junifer/storage/tests/test_hdf5.py +147 -12
- junifer/storage/tests/test_repeated_storage.py +293 -0
- junifer/storage/tests/test_sqlite.py +9 -20
- junifer/storage/tests/test_storage_base.py +18 -21
- junifer/storage/tests/test_utils.py +83 -22
- junifer/storage/utils.py +58 -38
- junifer/testing/__init__.pyi +2 -2
- junifer/testing/datagrabbers.py +480 -44
- junifer/testing/registry.py +12 -0
- junifer/testing/tests/test_adhdtesting_datagrabber.py +24 -0
- junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +5 -0
- junifer/testing/tests/test_partlycloudytesting_datagrabber.py +52 -0
- junifer/testing/tests/test_spmauditory_datagrabber.py +16 -0
- junifer/testing/tests/test_testing_registry.py +31 -0
- junifer/testing/tests/test_testing_utils.py +35 -0
- junifer/testing/tests/test_uclacnpvbmtesting_datagrabber.py +81 -0
- junifer/testing/utils.py +33 -1
- junifer/tests/test_stats.py +1 -5
- junifer/typing/__init__.pyi +2 -0
- junifer/typing/_typing.py +34 -19
- junifer/typing/py.typed +0 -0
- junifer/utils/__init__.pyi +10 -1
- junifer/utils/_config.py +1 -2
- junifer/utils/helpers.py +68 -2
- junifer/utils/logging.py +31 -7
- junifer/utils/tests/test_helpers.py +36 -1
- {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/METADATA +43 -35
- junifer-0.0.8.dist-info/RECORD +402 -0
- {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/WHEEL +1 -1
- junifer/cli/tests/test_parser.py +0 -280
- junifer/external/h5io/h5io/__init__.py +0 -15
- junifer/external/h5io/h5io/_h5io.py +0 -767
- junifer/external/h5io/h5io/_version.py +0 -1
- junifer/external/h5io/h5io/chunked_array.py +0 -94
- junifer/external/h5io/h5io/chunked_list.py +0 -65
- junifer/markers/complexity/__init__.pyi +0 -17
- junifer-0.0.7.dev332.dist-info/RECORD +0 -353
- {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/entry_points.txt +0 -0
- {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/licenses/AUTHORS.rst +0 -0
- {junifer-0.0.7.dev332.dist-info → junifer-0.0.8.dist-info}/licenses/LICENSE.md +0 -0
- {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
|
|
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
|
-
|
|
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
|
-
(
|
|
20
|
-
("ses-wave1bas", "
|
|
21
|
-
("ses-wave1bas", "
|
|
22
|
-
("ses-wave1bas", "
|
|
23
|
-
("ses-wave1bas", "
|
|
24
|
-
("ses-wave1bas", "
|
|
25
|
-
("ses-wave1bas", "
|
|
26
|
-
("ses-wave1bas", "
|
|
27
|
-
("ses-wave1bas", "
|
|
28
|
-
("ses-wave1bas", "
|
|
29
|
-
("ses-wave1bas", "
|
|
30
|
-
("ses-wave1bas", "
|
|
31
|
-
("ses-wave1bas", "
|
|
32
|
-
("ses-wave1bas", "
|
|
33
|
-
("ses-wave1bas", "
|
|
34
|
-
("ses-wave1bas", "
|
|
35
|
-
("ses-wave1bas", "
|
|
36
|
-
("ses-wave1bas", "
|
|
37
|
-
("ses-wave1bas", "
|
|
38
|
-
("ses-wave1bas", "
|
|
39
|
-
("ses-
|
|
40
|
-
("ses-wave1pro", "Rest", "
|
|
41
|
-
("ses-wave1pro", "Rest", "
|
|
42
|
-
("ses-wave1pro", "Rest", "
|
|
43
|
-
("ses-
|
|
44
|
-
("ses-wave1rea", "Rest", "
|
|
45
|
-
("ses-wave1rea", "Rest", "
|
|
46
|
-
("ses-wave1rea", "Rest", "
|
|
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:
|
|
52
|
-
tasks:
|
|
53
|
-
phase_encodings:
|
|
54
|
-
runs:
|
|
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 :
|
|
87
|
+
sessions : list of str
|
|
62
88
|
The parametrized session values.
|
|
63
|
-
tasks :
|
|
89
|
+
tasks : list of str
|
|
64
90
|
The parametrized task values.
|
|
65
|
-
phase_encodings :
|
|
91
|
+
phase_encodings : list of str
|
|
66
92
|
The parametrized phase encoding values.
|
|
67
|
-
runs :
|
|
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
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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(
|
|
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(
|
|
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
|
|
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:
|
|
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(
|
|
235
|
-
|
|
236
|
-
|
|
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
|
-
#
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
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()
|