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
|
@@ -11,66 +11,78 @@ import pytest
|
|
|
11
11
|
|
|
12
12
|
pytest.importorskip("neurokit2")
|
|
13
13
|
|
|
14
|
+
|
|
15
|
+
from junifer.datagrabber import DataType
|
|
14
16
|
from junifer.datareader import DefaultDataReader
|
|
15
17
|
from junifer.markers.complexity import PermEntropy
|
|
16
|
-
from junifer.
|
|
17
|
-
from junifer.storage import SQLiteFeatureStorage
|
|
18
|
+
from junifer.storage import HDF5FeatureStorage
|
|
18
19
|
from junifer.testing.datagrabbers import (
|
|
19
|
-
|
|
20
|
+
PartlyCloudyTestingDataGrabber,
|
|
20
21
|
)
|
|
21
22
|
|
|
22
23
|
|
|
24
|
+
pytestmark = pytest.mark.external
|
|
25
|
+
|
|
26
|
+
|
|
23
27
|
# Set parcellation
|
|
24
|
-
PARCELLATION = "
|
|
28
|
+
PARCELLATION = "TianxS1x3TxMNInonlinear2009cAsym"
|
|
25
29
|
|
|
26
30
|
|
|
27
|
-
@pytest.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
@pytest.fixture(scope="module")
|
|
32
|
+
def element_data() -> dict:
|
|
33
|
+
"""Load the data element once for all tests in the module.
|
|
34
|
+
|
|
35
|
+
Returns
|
|
36
|
+
-------
|
|
37
|
+
dict
|
|
38
|
+
The element data.
|
|
39
|
+
|
|
40
|
+
"""
|
|
41
|
+
with PartlyCloudyTestingDataGrabber() as dg:
|
|
33
42
|
# Fetch element
|
|
34
|
-
element = dg["
|
|
43
|
+
element = dg["sub-01"]
|
|
35
44
|
# Fetch element data
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
45
|
+
return DefaultDataReader().fit_transform(element)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_compute(element_data: dict) -> None:
|
|
49
|
+
"""Test PermEntropy compute().
|
|
50
|
+
|
|
51
|
+
Parameters
|
|
52
|
+
----------
|
|
53
|
+
element_data : dict
|
|
54
|
+
The element data.
|
|
55
|
+
|
|
56
|
+
"""
|
|
57
|
+
# Initialize the marker
|
|
58
|
+
marker = PermEntropy(parcellation=PARCELLATION)
|
|
59
|
+
# Compute the marker
|
|
60
|
+
feature_map = marker.fit_transform(element_data)
|
|
61
|
+
# Assert the dimension of timeseries
|
|
62
|
+
assert feature_map["BOLD"]["complexity"]["data"].ndim == 2
|
|
43
63
|
|
|
44
64
|
|
|
45
65
|
def test_storage_type() -> None:
|
|
46
66
|
"""Test PermEntropy storage_type."""
|
|
47
67
|
assert "vector" == PermEntropy(parcellation=PARCELLATION).storage_type(
|
|
48
|
-
input_type=
|
|
68
|
+
input_type=DataType.BOLD, output_feature="complexity"
|
|
49
69
|
)
|
|
50
70
|
|
|
51
71
|
|
|
52
|
-
|
|
53
|
-
_check_ants() is False, reason="requires ANTs to be in PATH"
|
|
54
|
-
)
|
|
55
|
-
def test_store(tmp_path: Path) -> None:
|
|
72
|
+
def test_store(element_data: dict, tmp_path: Path) -> None:
|
|
56
73
|
"""Test PermEntropy store().
|
|
57
74
|
|
|
58
75
|
Parameters
|
|
59
76
|
----------
|
|
77
|
+
element_data : dict
|
|
78
|
+
The element data.
|
|
60
79
|
tmp_path : pathlib.Path
|
|
61
80
|
The path to the test directory.
|
|
62
81
|
|
|
63
82
|
"""
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
marker = PermEntropy(parcellation=PARCELLATION)
|
|
71
|
-
# Create storage
|
|
72
|
-
storage = SQLiteFeatureStorage(
|
|
73
|
-
uri=tmp_path / "test_perm_entropy.sqlite"
|
|
74
|
-
)
|
|
75
|
-
# Compute the marker and store
|
|
76
|
-
marker.fit_transform(input=element_data, storage=storage)
|
|
83
|
+
# Initialize the marker
|
|
84
|
+
marker = PermEntropy(parcellation=PARCELLATION)
|
|
85
|
+
# Create storage
|
|
86
|
+
storage = HDF5FeatureStorage(uri=tmp_path / "test_perm_entropy.hdf5")
|
|
87
|
+
# Compute the marker and store
|
|
88
|
+
marker.fit_transform(input=element_data, storage=storage)
|
|
@@ -12,66 +12,77 @@ import pytest
|
|
|
12
12
|
pytest.importorskip("neurokit2")
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
from junifer.datagrabber import DataType
|
|
15
16
|
from junifer.datareader import DefaultDataReader
|
|
16
17
|
from junifer.markers.complexity import RangeEntropy
|
|
17
|
-
from junifer.
|
|
18
|
-
from junifer.storage import SQLiteFeatureStorage
|
|
18
|
+
from junifer.storage import HDF5FeatureStorage
|
|
19
19
|
from junifer.testing.datagrabbers import (
|
|
20
|
-
|
|
20
|
+
PartlyCloudyTestingDataGrabber,
|
|
21
21
|
)
|
|
22
22
|
|
|
23
23
|
|
|
24
|
+
pytestmark = pytest.mark.external
|
|
25
|
+
|
|
26
|
+
|
|
24
27
|
# Set parcellation
|
|
25
|
-
PARCELLATION = "
|
|
28
|
+
PARCELLATION = "TianxS1x3TxMNInonlinear2009cAsym"
|
|
26
29
|
|
|
27
30
|
|
|
28
|
-
@pytest.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
@pytest.fixture(scope="module")
|
|
32
|
+
def element_data() -> dict:
|
|
33
|
+
"""Load the data element once for all tests in the module.
|
|
34
|
+
|
|
35
|
+
Returns
|
|
36
|
+
-------
|
|
37
|
+
dict
|
|
38
|
+
The element data.
|
|
39
|
+
|
|
40
|
+
"""
|
|
41
|
+
with PartlyCloudyTestingDataGrabber() as dg:
|
|
34
42
|
# Fetch element
|
|
35
|
-
element = dg["
|
|
43
|
+
element = dg["sub-01"]
|
|
36
44
|
# Fetch element data
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
return DefaultDataReader().fit_transform(element)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_compute(element_data: dict) -> None:
|
|
49
|
+
"""Test RangeEntropy compute().
|
|
50
|
+
|
|
51
|
+
Parameters
|
|
52
|
+
----------
|
|
53
|
+
element_data : dict
|
|
54
|
+
The element data.
|
|
55
|
+
|
|
56
|
+
"""
|
|
57
|
+
# Initialize the marker
|
|
58
|
+
marker = RangeEntropy(parcellation=PARCELLATION)
|
|
59
|
+
# Compute the marker
|
|
60
|
+
feature_map = marker.fit_transform(element_data)
|
|
61
|
+
# Assert the dimension of timeseries
|
|
62
|
+
assert feature_map["BOLD"]["complexity"]["data"].ndim == 2
|
|
44
63
|
|
|
45
64
|
|
|
46
65
|
def test_storage_type() -> None:
|
|
47
66
|
"""Test RangeEntropy storage_type."""
|
|
48
67
|
assert "vector" == RangeEntropy(parcellation=PARCELLATION).storage_type(
|
|
49
|
-
input_type=
|
|
68
|
+
input_type=DataType.BOLD, output_feature="complexity"
|
|
50
69
|
)
|
|
51
70
|
|
|
52
71
|
|
|
53
|
-
|
|
54
|
-
_check_ants() is False, reason="requires ANTs to be in PATH"
|
|
55
|
-
)
|
|
56
|
-
def test_store(tmp_path: Path) -> None:
|
|
72
|
+
def test_store(element_data: dict, tmp_path: Path) -> None:
|
|
57
73
|
"""Test RangeEntropy store().
|
|
58
74
|
|
|
59
75
|
Parameters
|
|
60
76
|
----------
|
|
77
|
+
element_data : dict
|
|
78
|
+
The element data.
|
|
61
79
|
tmp_path : pathlib.Path
|
|
62
80
|
The path to the test directory.
|
|
63
81
|
|
|
64
82
|
"""
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
marker = RangeEntropy(parcellation=PARCELLATION)
|
|
72
|
-
# Create storage
|
|
73
|
-
storage = SQLiteFeatureStorage(
|
|
74
|
-
uri=tmp_path / "test_range_entropy.sqlite"
|
|
75
|
-
)
|
|
76
|
-
# Compute the marker and store
|
|
77
|
-
marker.fit_transform(input=element_data, storage=storage)
|
|
83
|
+
# Initialize the marker
|
|
84
|
+
marker = RangeEntropy(parcellation=PARCELLATION)
|
|
85
|
+
# Create storage
|
|
86
|
+
storage = HDF5FeatureStorage(uri=tmp_path / "test_range_entropy.hdf5")
|
|
87
|
+
# Compute the marker and store
|
|
88
|
+
marker.fit_transform(input=element_data, storage=storage)
|
|
@@ -12,66 +12,77 @@ import pytest
|
|
|
12
12
|
pytest.importorskip("neurokit2")
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
from junifer.datagrabber import DataType
|
|
15
16
|
from junifer.datareader import DefaultDataReader
|
|
16
17
|
from junifer.markers.complexity import RangeEntropyAUC
|
|
17
|
-
from junifer.
|
|
18
|
-
from junifer.storage import SQLiteFeatureStorage
|
|
18
|
+
from junifer.storage import HDF5FeatureStorage
|
|
19
19
|
from junifer.testing.datagrabbers import (
|
|
20
|
-
|
|
20
|
+
PartlyCloudyTestingDataGrabber,
|
|
21
21
|
)
|
|
22
22
|
|
|
23
23
|
|
|
24
|
+
pytestmark = pytest.mark.external
|
|
25
|
+
|
|
26
|
+
|
|
24
27
|
# Set parcellation
|
|
25
|
-
PARCELLATION = "
|
|
28
|
+
PARCELLATION = "TianxS1x3TxMNInonlinear2009cAsym"
|
|
26
29
|
|
|
27
30
|
|
|
28
|
-
@pytest.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
@pytest.fixture(scope="module")
|
|
32
|
+
def element_data() -> dict:
|
|
33
|
+
"""Load the data element once for all tests in the module.
|
|
34
|
+
|
|
35
|
+
Returns
|
|
36
|
+
-------
|
|
37
|
+
dict
|
|
38
|
+
The element data.
|
|
39
|
+
|
|
40
|
+
"""
|
|
41
|
+
with PartlyCloudyTestingDataGrabber() as dg:
|
|
34
42
|
# Fetch element
|
|
35
|
-
element = dg["
|
|
43
|
+
element = dg["sub-01"]
|
|
36
44
|
# Fetch element data
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
return DefaultDataReader().fit_transform(element)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_compute(element_data: dict) -> None:
|
|
49
|
+
"""Test RangeEntropyAUC compute().
|
|
50
|
+
|
|
51
|
+
Parameters
|
|
52
|
+
----------
|
|
53
|
+
element_data : dict
|
|
54
|
+
The element data.
|
|
55
|
+
|
|
56
|
+
"""
|
|
57
|
+
# Initialize the marker
|
|
58
|
+
marker = RangeEntropyAUC(parcellation=PARCELLATION)
|
|
59
|
+
# Compute the marker
|
|
60
|
+
feature_map = marker.fit_transform(element_data)
|
|
61
|
+
# Assert the dimension of timeseries
|
|
62
|
+
assert feature_map["BOLD"]["complexity"]["data"].ndim == 2
|
|
44
63
|
|
|
45
64
|
|
|
46
65
|
def test_storage_type() -> None:
|
|
47
66
|
"""Test RangeEntropyAUC storage_type."""
|
|
48
67
|
assert "vector" == RangeEntropyAUC(parcellation=PARCELLATION).storage_type(
|
|
49
|
-
input_type=
|
|
68
|
+
input_type=DataType.BOLD, output_feature="complexity"
|
|
50
69
|
)
|
|
51
70
|
|
|
52
71
|
|
|
53
|
-
|
|
54
|
-
_check_ants() is False, reason="requires ANTs to be in PATH"
|
|
55
|
-
)
|
|
56
|
-
def test_store(tmp_path: Path) -> None:
|
|
72
|
+
def test_store(element_data: dict, tmp_path: Path) -> None:
|
|
57
73
|
"""Test RangeEntropyAUC store().
|
|
58
74
|
|
|
59
75
|
Parameters
|
|
60
76
|
----------
|
|
77
|
+
element_data : dict
|
|
78
|
+
The element data.
|
|
61
79
|
tmp_path : pathlib.Path
|
|
62
80
|
The path to the test directory.
|
|
63
81
|
|
|
64
82
|
"""
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
marker = RangeEntropyAUC(parcellation=PARCELLATION)
|
|
72
|
-
# Create storage
|
|
73
|
-
storage = SQLiteFeatureStorage(
|
|
74
|
-
uri=tmp_path / "test_range_entropy_auc.sqlite"
|
|
75
|
-
)
|
|
76
|
-
# Compute the marker and store
|
|
77
|
-
marker.fit_transform(input=element_data, storage=storage)
|
|
83
|
+
# Initialize the marker
|
|
84
|
+
marker = RangeEntropyAUC(parcellation=PARCELLATION)
|
|
85
|
+
# Create storage
|
|
86
|
+
storage = HDF5FeatureStorage(uri=tmp_path / "test_range_entropy_auc.hdf5")
|
|
87
|
+
# Compute the marker and store
|
|
88
|
+
marker.fit_transform(input=element_data, storage=storage)
|
|
@@ -11,66 +11,78 @@ import pytest
|
|
|
11
11
|
|
|
12
12
|
pytest.importorskip("neurokit2")
|
|
13
13
|
|
|
14
|
+
|
|
15
|
+
from junifer.datagrabber import DataType
|
|
14
16
|
from junifer.datareader import DefaultDataReader
|
|
15
17
|
from junifer.markers.complexity import SampleEntropy
|
|
16
|
-
from junifer.
|
|
17
|
-
from junifer.storage import SQLiteFeatureStorage
|
|
18
|
+
from junifer.storage import HDF5FeatureStorage
|
|
18
19
|
from junifer.testing.datagrabbers import (
|
|
19
|
-
|
|
20
|
+
PartlyCloudyTestingDataGrabber,
|
|
20
21
|
)
|
|
21
22
|
|
|
22
23
|
|
|
24
|
+
pytestmark = pytest.mark.external
|
|
25
|
+
|
|
26
|
+
|
|
23
27
|
# Set parcellation
|
|
24
|
-
PARCELLATION = "
|
|
28
|
+
PARCELLATION = "TianxS1x3TxMNInonlinear2009cAsym"
|
|
25
29
|
|
|
26
30
|
|
|
27
|
-
@pytest.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
@pytest.fixture(scope="module")
|
|
32
|
+
def element_data() -> dict:
|
|
33
|
+
"""Load the data element once for all tests in the module.
|
|
34
|
+
|
|
35
|
+
Returns
|
|
36
|
+
-------
|
|
37
|
+
dict
|
|
38
|
+
The element data.
|
|
39
|
+
|
|
40
|
+
"""
|
|
41
|
+
with PartlyCloudyTestingDataGrabber() as dg:
|
|
33
42
|
# Fetch element
|
|
34
|
-
element = dg["
|
|
43
|
+
element = dg["sub-01"]
|
|
35
44
|
# Fetch element data
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
45
|
+
return DefaultDataReader().fit_transform(element)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_compute(element_data: dict) -> None:
|
|
49
|
+
"""Test SampleEntropy compute().
|
|
50
|
+
|
|
51
|
+
Parameters
|
|
52
|
+
----------
|
|
53
|
+
element_data : dict
|
|
54
|
+
The element data.
|
|
55
|
+
|
|
56
|
+
"""
|
|
57
|
+
# Initialize the marker
|
|
58
|
+
marker = SampleEntropy(parcellation=PARCELLATION)
|
|
59
|
+
# Compute the marker
|
|
60
|
+
feature_map = marker.fit_transform(element_data)
|
|
61
|
+
# Assert the dimension of timeseries
|
|
62
|
+
assert feature_map["BOLD"]["complexity"]["data"].ndim == 2
|
|
43
63
|
|
|
44
64
|
|
|
45
65
|
def test_storage_type() -> None:
|
|
46
66
|
"""Test SampleEntropy storage_type."""
|
|
47
67
|
assert "vector" == SampleEntropy(parcellation=PARCELLATION).storage_type(
|
|
48
|
-
input_type=
|
|
68
|
+
input_type=DataType.BOLD, output_feature="complexity"
|
|
49
69
|
)
|
|
50
70
|
|
|
51
71
|
|
|
52
|
-
|
|
53
|
-
_check_ants() is False, reason="requires ANTs to be in PATH"
|
|
54
|
-
)
|
|
55
|
-
def test_store(tmp_path: Path) -> None:
|
|
72
|
+
def test_store(element_data: dict, tmp_path: Path) -> None:
|
|
56
73
|
"""Test SampleEntropy store().
|
|
57
74
|
|
|
58
75
|
Parameters
|
|
59
76
|
----------
|
|
77
|
+
element_data : dict
|
|
78
|
+
The element data.
|
|
60
79
|
tmp_path : pathlib.Path
|
|
61
80
|
The path to the test directory.
|
|
62
81
|
|
|
63
82
|
"""
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
marker = SampleEntropy(parcellation=PARCELLATION)
|
|
71
|
-
# Create storage
|
|
72
|
-
storage = SQLiteFeatureStorage(
|
|
73
|
-
uri=tmp_path / "test_sample_entropy.sqlite"
|
|
74
|
-
)
|
|
75
|
-
# Compute the marker and store
|
|
76
|
-
marker.fit_transform(input=element_data, storage=storage)
|
|
83
|
+
# Initialize the marker
|
|
84
|
+
marker = SampleEntropy(parcellation=PARCELLATION)
|
|
85
|
+
# Create storage
|
|
86
|
+
storage = HDF5FeatureStorage(uri=tmp_path / "test_sample_entropy.hdf5")
|
|
87
|
+
# Compute the marker and store
|
|
88
|
+
marker.fit_transform(input=element_data, storage=storage)
|
|
@@ -11,66 +11,80 @@ import pytest
|
|
|
11
11
|
|
|
12
12
|
pytest.importorskip("neurokit2")
|
|
13
13
|
|
|
14
|
+
|
|
15
|
+
from junifer.datagrabber import DataType
|
|
14
16
|
from junifer.datareader import DefaultDataReader
|
|
15
17
|
from junifer.markers.complexity import WeightedPermEntropy
|
|
16
|
-
from junifer.
|
|
17
|
-
from junifer.storage import SQLiteFeatureStorage
|
|
18
|
+
from junifer.storage import HDF5FeatureStorage
|
|
18
19
|
from junifer.testing.datagrabbers import (
|
|
19
|
-
|
|
20
|
+
PartlyCloudyTestingDataGrabber,
|
|
20
21
|
)
|
|
21
22
|
|
|
22
23
|
|
|
24
|
+
pytestmark = pytest.mark.external
|
|
25
|
+
|
|
26
|
+
|
|
23
27
|
# Set parcellation
|
|
24
|
-
PARCELLATION = "
|
|
28
|
+
PARCELLATION = "TianxS1x3TxMNInonlinear2009cAsym"
|
|
25
29
|
|
|
26
30
|
|
|
27
|
-
@pytest.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
@pytest.fixture(scope="module")
|
|
32
|
+
def element_data() -> dict:
|
|
33
|
+
"""Load the data element once for all tests in the module.
|
|
34
|
+
|
|
35
|
+
Returns
|
|
36
|
+
-------
|
|
37
|
+
dict
|
|
38
|
+
The element data.
|
|
39
|
+
|
|
40
|
+
"""
|
|
41
|
+
with PartlyCloudyTestingDataGrabber() as dg:
|
|
33
42
|
# Fetch element
|
|
34
|
-
element = dg["
|
|
43
|
+
element = dg["sub-01"]
|
|
35
44
|
# Fetch element data
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
45
|
+
return DefaultDataReader().fit_transform(element)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_compute(element_data: dict) -> None:
|
|
49
|
+
"""Test WeightedPermEntropy compute().
|
|
50
|
+
|
|
51
|
+
Parameters
|
|
52
|
+
----------
|
|
53
|
+
element_data : dict
|
|
54
|
+
The element data.
|
|
55
|
+
|
|
56
|
+
"""
|
|
57
|
+
# Initialize the marker
|
|
58
|
+
marker = WeightedPermEntropy(parcellation=PARCELLATION)
|
|
59
|
+
# Compute the marker
|
|
60
|
+
feature_map = marker.fit_transform(element_data)
|
|
61
|
+
# Assert the dimension of timeseries
|
|
62
|
+
assert feature_map["BOLD"]["complexity"]["data"].ndim == 2
|
|
43
63
|
|
|
44
64
|
|
|
45
65
|
def test_storage_type() -> None:
|
|
46
66
|
"""Test WeightedPermEntropy storage_type."""
|
|
47
67
|
assert "vector" == WeightedPermEntropy(
|
|
48
68
|
parcellation=PARCELLATION
|
|
49
|
-
).storage_type(input_type=
|
|
69
|
+
).storage_type(input_type=DataType.BOLD, output_feature="complexity")
|
|
50
70
|
|
|
51
71
|
|
|
52
|
-
|
|
53
|
-
_check_ants() is False, reason="requires ANTs to be in PATH"
|
|
54
|
-
)
|
|
55
|
-
def test_store(tmp_path: Path) -> None:
|
|
72
|
+
def test_store(element_data: dict, tmp_path: Path) -> None:
|
|
56
73
|
"""Test WeightedPermEntropy store().
|
|
57
74
|
|
|
58
75
|
Parameters
|
|
59
76
|
----------
|
|
77
|
+
element_data : dict
|
|
78
|
+
The element data.
|
|
60
79
|
tmp_path : pathlib.Path
|
|
61
80
|
The path to the test directory.
|
|
62
81
|
|
|
63
82
|
"""
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
storage = SQLiteFeatureStorage(
|
|
73
|
-
uri=tmp_path / "test_weighted_perm_entropy.sqlite"
|
|
74
|
-
)
|
|
75
|
-
# Compute the marker and store
|
|
76
|
-
marker.fit_transform(input=element_data, storage=storage)
|
|
83
|
+
# Initialize the marker
|
|
84
|
+
marker = WeightedPermEntropy(parcellation=PARCELLATION)
|
|
85
|
+
# Create storage
|
|
86
|
+
storage = HDF5FeatureStorage(
|
|
87
|
+
uri=tmp_path / "test_weighted_perm_entropy.hdf5"
|
|
88
|
+
)
|
|
89
|
+
# Compute the marker and store
|
|
90
|
+
marker.fit_transform(input=element_data, storage=storage)
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
# Authors: Amir Omidvarnia <a.omidvarnia@fz-juelich.de>
|
|
4
4
|
# Leonard Sasse <l.sasse@fz-juelich.de>
|
|
5
|
+
# Synchon Mandal <s.mandal@fz-juelich.de>
|
|
5
6
|
# License: AGPL
|
|
6
7
|
|
|
7
|
-
from typing import Optional, Union
|
|
8
|
-
|
|
9
8
|
import neurokit2 as nk
|
|
10
9
|
import numpy as np
|
|
11
10
|
|
|
12
11
|
from ...api.decorators import register_marker
|
|
13
|
-
from ...utils import
|
|
12
|
+
from ...utils import warn_with_log
|
|
13
|
+
from ..base import logger
|
|
14
14
|
from .complexity_base import ComplexityBase
|
|
15
15
|
|
|
16
16
|
|
|
@@ -27,24 +27,24 @@ class WeightedPermEntropy(ComplexityBase):
|
|
|
27
27
|
The name(s) of the parcellation(s) to use.
|
|
28
28
|
See :func:`.list_data` for options.
|
|
29
29
|
agg_method : str, optional
|
|
30
|
-
The
|
|
31
|
-
:func
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
The aggregation function to use.
|
|
31
|
+
See :func:`.get_aggfunc_by_name` for options
|
|
32
|
+
(default "mean").
|
|
33
|
+
agg_method_params : dict or None, optional
|
|
34
|
+
The parameters to pass to the aggregation function.
|
|
35
|
+
See :func:`.get_aggfunc_by_name` for options (default None).
|
|
36
|
+
masks : str, dict, list of them or None, optional
|
|
36
37
|
The specification of the masks to apply to regions before extracting
|
|
37
38
|
signals. Check :ref:`Using Masks <using_masks>` for more details.
|
|
38
39
|
If None, will not apply any mask (default None).
|
|
39
|
-
params : dict, optional
|
|
40
|
-
|
|
41
|
-
function.
|
|
42
|
-
|
|
43
|
-
``junifer.markers.utils._weighted_perm_entropy``. If None, value
|
|
44
|
-
is set to {"m": 2, "delay": 1} (default None).
|
|
45
|
-
name : str, optional
|
|
46
|
-
The name of the marker. If None, it will use the class name
|
|
40
|
+
params : dict or None, optional
|
|
41
|
+
The parameters to pass to the weighted permutation entropy calculation
|
|
42
|
+
function. See ``junifer.markers.utils._weighted_perm_entropy`` for more
|
|
43
|
+
information. If None, value is set to ``{"m": 2, "delay": 1}``
|
|
47
44
|
(default None).
|
|
45
|
+
name : str or None, optional
|
|
46
|
+
The name of the marker.
|
|
47
|
+
If None, will use the class name (default None).
|
|
48
48
|
|
|
49
49
|
Warnings
|
|
50
50
|
--------
|
|
@@ -55,26 +55,12 @@ class WeightedPermEntropy(ComplexityBase):
|
|
|
55
55
|
|
|
56
56
|
"""
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
masks: Union[str, dict, list[Union[dict, str]], None] = None,
|
|
64
|
-
params: Optional[dict] = None,
|
|
65
|
-
name: Optional[str] = None,
|
|
66
|
-
) -> None:
|
|
67
|
-
super().__init__(
|
|
68
|
-
parcellation=parcellation,
|
|
69
|
-
agg_method=agg_method,
|
|
70
|
-
agg_method_params=agg_method_params,
|
|
71
|
-
masks=masks,
|
|
72
|
-
name=name,
|
|
73
|
-
)
|
|
74
|
-
if params is None:
|
|
58
|
+
params: dict | None = None
|
|
59
|
+
|
|
60
|
+
def validate_marker_params(self) -> None:
|
|
61
|
+
"""Run extra logical validation for marker."""
|
|
62
|
+
if self.params is None:
|
|
75
63
|
self.params = {"m": 4, "delay": 1}
|
|
76
|
-
else:
|
|
77
|
-
self.params = params
|
|
78
64
|
|
|
79
65
|
def compute_complexity(
|
|
80
66
|
self,
|