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
junifer/markers/brainprint.py
CHANGED
|
@@ -8,23 +8,24 @@ from pathlib import Path
|
|
|
8
8
|
from typing import (
|
|
9
9
|
Any,
|
|
10
10
|
ClassVar,
|
|
11
|
-
Optional,
|
|
12
|
-
Union,
|
|
13
11
|
)
|
|
14
12
|
|
|
15
13
|
import numpy as np
|
|
16
14
|
import numpy.typing as npt
|
|
15
|
+
from pydantic import PositiveInt
|
|
17
16
|
|
|
18
17
|
from ..api.decorators import register_marker
|
|
18
|
+
from ..datagrabber import DataType
|
|
19
19
|
from ..external.BrainPrint.brainprint.brainprint import (
|
|
20
20
|
compute_asymmetry,
|
|
21
21
|
compute_brainprint,
|
|
22
22
|
)
|
|
23
23
|
from ..external.BrainPrint.brainprint.surfaces import surf_to_vtk
|
|
24
|
-
from ..pipeline import WorkDirManager
|
|
24
|
+
from ..pipeline import ExtDep, WorkDirManager
|
|
25
|
+
from ..storage import StorageType
|
|
25
26
|
from ..typing import Dependencies, ExternalDependencies, MarkerInOutMappings
|
|
26
|
-
from ..utils import
|
|
27
|
-
from .base import BaseMarker
|
|
27
|
+
from ..utils import run_ext_cmd
|
|
28
|
+
from .base import BaseMarker, logger
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
__all__ = ["BrainPrint"]
|
|
@@ -60,15 +61,15 @@ class BrainPrint(BaseMarker):
|
|
|
60
61
|
execution speed. Requires the ``scikit-sparse`` library. If it cannot
|
|
61
62
|
be found, an error will be thrown. If False, will use slower LU
|
|
62
63
|
decomposition (default False).
|
|
63
|
-
name : str, optional
|
|
64
|
-
The name of the marker.
|
|
65
|
-
None).
|
|
64
|
+
name : str or None, optional
|
|
65
|
+
The name of the marker.
|
|
66
|
+
If None, will use the class name (default None).
|
|
66
67
|
|
|
67
68
|
"""
|
|
68
69
|
|
|
69
70
|
_EXT_DEPENDENCIES: ClassVar[ExternalDependencies] = [
|
|
70
71
|
{
|
|
71
|
-
"name":
|
|
72
|
+
"name": ExtDep.FreeSurfer,
|
|
72
73
|
"commands": [
|
|
73
74
|
"mri_binarize",
|
|
74
75
|
"mri_pretess",
|
|
@@ -81,35 +82,25 @@ class BrainPrint(BaseMarker):
|
|
|
81
82
|
_DEPENDENCIES: ClassVar[Dependencies] = {"lapy", "numpy"}
|
|
82
83
|
|
|
83
84
|
_MARKER_INOUT_MAPPINGS: ClassVar[MarkerInOutMappings] = {
|
|
84
|
-
|
|
85
|
-
"eigenvalues":
|
|
86
|
-
"areas":
|
|
87
|
-
"volumes":
|
|
88
|
-
"distances":
|
|
85
|
+
DataType.FreeSurfer: {
|
|
86
|
+
"eigenvalues": StorageType.ScalarTable,
|
|
87
|
+
"areas": StorageType.Vector,
|
|
88
|
+
"volumes": StorageType.Vector,
|
|
89
|
+
"distances": StorageType.Vector,
|
|
89
90
|
}
|
|
90
91
|
}
|
|
91
92
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
) -> None:
|
|
104
|
-
self.num = num
|
|
105
|
-
self.skip_cortex = skip_cortex
|
|
106
|
-
self.keep_eigenvectors = keep_eigenvectors
|
|
107
|
-
self.norm = norm
|
|
108
|
-
self.reweight = reweight
|
|
109
|
-
self.asymmetry = asymmetry
|
|
110
|
-
self.asymmetry_distance = asymmetry_distance
|
|
111
|
-
self.use_cholmod = use_cholmod
|
|
112
|
-
super().__init__(name=name, on="FreeSurfer")
|
|
93
|
+
num: PositiveInt = 50
|
|
94
|
+
skip_cortex: bool = False
|
|
95
|
+
keep_eigenvectors: bool = False
|
|
96
|
+
norm: str = "none"
|
|
97
|
+
reweight: bool = False
|
|
98
|
+
asymmetry: bool = False
|
|
99
|
+
asymmetry_distance: str = "euc"
|
|
100
|
+
use_cholmod: bool = False
|
|
101
|
+
|
|
102
|
+
_tempdir = Path()
|
|
103
|
+
_element_tempdir = Path()
|
|
113
104
|
|
|
114
105
|
def _create_aseg_surface(
|
|
115
106
|
self,
|
|
@@ -307,7 +298,7 @@ class BrainPrint(BaseMarker):
|
|
|
307
298
|
|
|
308
299
|
def _fix_nan(
|
|
309
300
|
self,
|
|
310
|
-
input_data: list[
|
|
301
|
+
input_data: list[float | str | npt.ArrayLike],
|
|
311
302
|
) -> np.ndarray: # pragma: no cover
|
|
312
303
|
"""Convert BrainPrint output with string NaN to ``numpy.nan``.
|
|
313
304
|
|
|
@@ -329,7 +320,7 @@ class BrainPrint(BaseMarker):
|
|
|
329
320
|
def compute(
|
|
330
321
|
self,
|
|
331
322
|
input: dict[str, Any],
|
|
332
|
-
extra_input:
|
|
323
|
+
extra_input: dict | None = None,
|
|
333
324
|
) -> dict: # pragma: no cover
|
|
334
325
|
"""Compute.
|
|
335
326
|
|
|
@@ -353,7 +344,7 @@ class BrainPrint(BaseMarker):
|
|
|
353
344
|
- ``col_names`` : surface labels as list of str
|
|
354
345
|
- ``row_names`` : eigenvalue count labels as list of str
|
|
355
346
|
- ``row_header_col_name`` : "eigenvalue"
|
|
356
|
-
|
|
347
|
+
|
|
357
348
|
* ``areas`` : dictionary with the following keys:
|
|
358
349
|
|
|
359
350
|
- ``data`` : areas as ``np.ndarray``
|
|
@@ -364,7 +355,7 @@ class BrainPrint(BaseMarker):
|
|
|
364
355
|
- ``data`` : volumes as ``np.ndarray``
|
|
365
356
|
- ``col_names`` : surface labels as list of str
|
|
366
357
|
|
|
367
|
-
* ``distances`` : dictionary with the following keys
|
|
358
|
+
* ``distances`` : dictionary with the following keys \
|
|
368
359
|
if ``asymmetry = True``:
|
|
369
360
|
|
|
370
361
|
- ``data`` : distances as ``np.ndarray``
|
|
@@ -15,7 +15,24 @@ if find_spec("neurokit2") is None:
|
|
|
15
15
|
msg="Could not find `neurokit2`, make sure the package is installed.",
|
|
16
16
|
klass=ImportError,
|
|
17
17
|
)
|
|
18
|
-
else:
|
|
19
|
-
import lazy_loader as lazy
|
|
20
18
|
|
|
21
|
-
|
|
19
|
+
# Not lazy: importing the sub-package (e.g., with ``with:`` in the YAML)
|
|
20
|
+
# registers the markers, as they are not built-in components of the registry
|
|
21
|
+
from .hurst_exponent import HurstExponent # noqa: E402
|
|
22
|
+
from .range_entropy import RangeEntropy # noqa: E402
|
|
23
|
+
from .range_entropy_auc import RangeEntropyAUC # noqa: E402
|
|
24
|
+
from .perm_entropy import PermEntropy # noqa: E402
|
|
25
|
+
from .weighted_perm_entropy import WeightedPermEntropy # noqa: E402
|
|
26
|
+
from .sample_entropy import SampleEntropy # noqa: E402
|
|
27
|
+
from .multiscale_entropy_auc import MultiscaleEntropyAUC # noqa: E402
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
__all__ = [
|
|
31
|
+
"HurstExponent",
|
|
32
|
+
"RangeEntropy",
|
|
33
|
+
"RangeEntropyAUC",
|
|
34
|
+
"PermEntropy",
|
|
35
|
+
"WeightedPermEntropy",
|
|
36
|
+
"SampleEntropy",
|
|
37
|
+
"MultiscaleEntropyAUC",
|
|
38
|
+
]
|
|
@@ -1,75 +1,71 @@
|
|
|
1
1
|
"""Provide base class for complexity."""
|
|
2
2
|
|
|
3
3
|
# Authors: Amir Omidvarnia <a.omidvarnia@fz-juelich.de>
|
|
4
|
+
# Synchon Mandal <s.mandal@fz-juelich.de>
|
|
4
5
|
# License: AGPL
|
|
5
6
|
|
|
6
7
|
from abc import abstractmethod
|
|
7
8
|
from typing import (
|
|
8
|
-
|
|
9
|
+
Annotated,
|
|
9
10
|
Any,
|
|
10
11
|
ClassVar,
|
|
11
|
-
Optional,
|
|
12
|
-
Union,
|
|
13
12
|
)
|
|
14
13
|
|
|
14
|
+
import numpy as np
|
|
15
|
+
from pydantic import BeforeValidator
|
|
16
|
+
|
|
17
|
+
from ...datagrabber import DataType
|
|
18
|
+
from ...storage import StorageType
|
|
15
19
|
from ...typing import Dependencies, MarkerInOutMappings
|
|
16
|
-
from ...utils import raise_error
|
|
20
|
+
from ...utils import ensure_list, ensure_list_or_none, raise_error
|
|
17
21
|
from ..base import BaseMarker
|
|
18
22
|
from ..parcel_aggregation import ParcelAggregation
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if TYPE_CHECKING:
|
|
22
|
-
import numpy as np
|
|
23
|
+
from ..utils import _has_data
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
__all__ = ["ComplexityBase"]
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
class ComplexityBase(BaseMarker):
|
|
29
|
-
"""
|
|
30
|
+
"""Abstract base class for complexity computation.
|
|
30
31
|
|
|
31
32
|
Parameters
|
|
32
33
|
----------
|
|
33
34
|
parcellation : str or list of str
|
|
34
|
-
The name(s) of the parcellation(s)
|
|
35
|
-
:func
|
|
35
|
+
The name(s) of the parcellation(s) to use.
|
|
36
|
+
See :func:`.list_data` for options.
|
|
36
37
|
agg_method : str, optional
|
|
37
|
-
The
|
|
38
|
-
:func
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
The aggregation function to use.
|
|
39
|
+
See :func:`.get_aggfunc_by_name` for options
|
|
40
|
+
(default "mean").
|
|
41
|
+
agg_method_params : dict or None, optional
|
|
42
|
+
The parameters to pass to the aggregation function.
|
|
43
|
+
See :func:`.get_aggfunc_by_name` for options (default None).
|
|
44
|
+
masks : str, dict, list of them or None, optional
|
|
43
45
|
The specification of the masks to apply to regions before extracting
|
|
44
46
|
signals. Check :ref:`Using Masks <using_masks>` for more details.
|
|
45
47
|
If None, will not apply any mask (default None).
|
|
46
|
-
name : str, optional
|
|
47
|
-
The name of the marker.
|
|
48
|
-
(default None).
|
|
48
|
+
name : str or None, optional
|
|
49
|
+
The name of the marker.
|
|
50
|
+
If None, will use the class name (default None).
|
|
49
51
|
|
|
50
52
|
"""
|
|
51
53
|
|
|
52
54
|
_DEPENDENCIES: ClassVar[Dependencies] = {"nilearn", "neurokit2"}
|
|
53
55
|
|
|
54
56
|
_MARKER_INOUT_MAPPINGS: ClassVar[MarkerInOutMappings] = {
|
|
55
|
-
|
|
56
|
-
"complexity":
|
|
57
|
+
DataType.BOLD: {
|
|
58
|
+
"complexity": StorageType.Vector,
|
|
57
59
|
},
|
|
58
60
|
}
|
|
59
61
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
) -> None:
|
|
68
|
-
self.parcellation = parcellation
|
|
69
|
-
self.agg_method = agg_method
|
|
70
|
-
self.agg_method_params = agg_method_params
|
|
71
|
-
self.masks = masks
|
|
72
|
-
super().__init__(on="BOLD", name=name)
|
|
62
|
+
parcellation: Annotated[str | list[str], BeforeValidator(ensure_list)]
|
|
63
|
+
agg_method: str = "mean"
|
|
64
|
+
agg_method_params: dict | None = None
|
|
65
|
+
masks: Annotated[
|
|
66
|
+
dict | str | list[dict | str] | None,
|
|
67
|
+
BeforeValidator(ensure_list_or_none),
|
|
68
|
+
] = None
|
|
73
69
|
|
|
74
70
|
@abstractmethod
|
|
75
71
|
def compute_complexity(
|
|
@@ -85,7 +81,7 @@ class ComplexityBase(BaseMarker):
|
|
|
85
81
|
def compute(
|
|
86
82
|
self,
|
|
87
83
|
input: dict[str, Any],
|
|
88
|
-
extra_input:
|
|
84
|
+
extra_input: dict[str, Any] | None = None,
|
|
89
85
|
) -> dict[str, Any]:
|
|
90
86
|
"""Compute.
|
|
91
87
|
|
|
@@ -117,14 +113,17 @@ class ComplexityBase(BaseMarker):
|
|
|
117
113
|
method=self.agg_method,
|
|
118
114
|
method_params=self.agg_method_params,
|
|
119
115
|
masks=self.masks,
|
|
120
|
-
on=
|
|
116
|
+
on=DataType.BOLD,
|
|
121
117
|
).compute(input=input, extra_input=extra_input)
|
|
122
|
-
# Compute complexity measure
|
|
118
|
+
# Compute complexity measure on the regions with data (e.g. regions
|
|
119
|
+
# lost in resampling have none) and set the others to NaN
|
|
120
|
+
data = parcel_aggregation["aggregation"]["data"]
|
|
121
|
+
has_data = _has_data(data)
|
|
122
|
+
complexity = np.full((1, data.shape[1]), np.nan)
|
|
123
|
+
complexity[:, has_data] = self.compute_complexity(data[:, has_data])
|
|
123
124
|
return {
|
|
124
125
|
"complexity": {
|
|
125
|
-
"data":
|
|
126
|
-
parcel_aggregation["aggregation"]["data"]
|
|
127
|
-
),
|
|
126
|
+
"data": complexity,
|
|
128
127
|
"col_names": parcel_aggregation["aggregation"]["col_names"],
|
|
129
128
|
}
|
|
130
129
|
}
|
|
@@ -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,22 +27,23 @@ class HurstExponent(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
|
-
|
|
42
|
-
If None, value is set to {"method": "dfa"} (default None).
|
|
43
|
-
name : str, optional
|
|
44
|
-
The name of the marker.
|
|
45
|
-
(default None).
|
|
40
|
+
params : dict or None, optional
|
|
41
|
+
The parameters to pass to the Hurst exponent calculation function.
|
|
42
|
+
See ``junifer.markers.utils._hurst_exponent`` for more information.
|
|
43
|
+
If None, value is set to ``{"method": "dfa"}`` (default None).
|
|
44
|
+
name : str or None, optional
|
|
45
|
+
The name of the marker.
|
|
46
|
+
If None, will use the class name (default None).
|
|
46
47
|
|
|
47
48
|
Warnings
|
|
48
49
|
--------
|
|
@@ -53,26 +54,12 @@ class HurstExponent(ComplexityBase):
|
|
|
53
54
|
|
|
54
55
|
"""
|
|
55
56
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
masks: Union[str, dict, list[Union[dict, str]], None] = None,
|
|
62
|
-
params: Optional[dict] = None,
|
|
63
|
-
name: Optional[str] = None,
|
|
64
|
-
) -> None:
|
|
65
|
-
super().__init__(
|
|
66
|
-
parcellation=parcellation,
|
|
67
|
-
agg_method=agg_method,
|
|
68
|
-
agg_method_params=agg_method_params,
|
|
69
|
-
masks=masks,
|
|
70
|
-
name=name,
|
|
71
|
-
)
|
|
72
|
-
if params is None:
|
|
57
|
+
params: dict | None = None
|
|
58
|
+
|
|
59
|
+
def validate_marker_params(self) -> None:
|
|
60
|
+
"""Run extra logical validation for marker."""
|
|
61
|
+
if self.params is None:
|
|
73
62
|
self.params = {"method": "dfa"}
|
|
74
|
-
else:
|
|
75
|
-
self.params = params
|
|
76
63
|
|
|
77
64
|
def compute_complexity(
|
|
78
65
|
self,
|
|
@@ -2,21 +2,44 @@
|
|
|
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
|
|
8
|
+
from collections.abc import Generator
|
|
9
|
+
from contextlib import contextmanager
|
|
8
10
|
|
|
9
11
|
import neurokit2 as nk
|
|
10
12
|
import numpy as np
|
|
11
13
|
|
|
12
14
|
from ...api.decorators import register_marker
|
|
13
|
-
from ...utils import
|
|
15
|
+
from ...utils import warn_with_log
|
|
16
|
+
from ..base import logger
|
|
14
17
|
from .complexity_base import ComplexityBase
|
|
15
18
|
|
|
16
19
|
|
|
17
20
|
__all__ = ["MultiscaleEntropyAUC"]
|
|
18
21
|
|
|
19
22
|
|
|
23
|
+
# TODO: remove once the neurokit2 pin (0.2.12) can be raised (0.2.13
|
|
24
|
+
# requires pandas < 3 and setuptools < 82)
|
|
25
|
+
@contextmanager
|
|
26
|
+
def _numpy_trapz() -> Generator[None, None, None]:
|
|
27
|
+
"""Provide ``numpy.trapz`` for ``neurokit2.entropy_multiscale``.
|
|
28
|
+
|
|
29
|
+
``numpy.trapz`` was removed in numpy 2.4 in favour of
|
|
30
|
+
``numpy.trapezoid``, but neurokit2 <= 0.2.12 still uses it.
|
|
31
|
+
|
|
32
|
+
"""
|
|
33
|
+
if hasattr(np, "trapz"):
|
|
34
|
+
yield
|
|
35
|
+
return
|
|
36
|
+
np.trapz = np.trapezoid
|
|
37
|
+
try:
|
|
38
|
+
yield
|
|
39
|
+
finally:
|
|
40
|
+
del np.trapz
|
|
41
|
+
|
|
42
|
+
|
|
20
43
|
@register_marker
|
|
21
44
|
class MultiscaleEntropyAUC(ComplexityBase):
|
|
22
45
|
"""Class for AUC of multiscale entropy of a time series.
|
|
@@ -27,23 +50,25 @@ class MultiscaleEntropyAUC(ComplexityBase):
|
|
|
27
50
|
The name(s) of the parcellation(s) to use.
|
|
28
51
|
See :func:`.list_data` for options.
|
|
29
52
|
agg_method : str, optional
|
|
30
|
-
The
|
|
31
|
-
:func
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
53
|
+
The aggregation function to use.
|
|
54
|
+
See :func:`.get_aggfunc_by_name` for options
|
|
55
|
+
(default "mean").
|
|
56
|
+
agg_method_params : dict or None, optional
|
|
57
|
+
The parameters to pass to the aggregation function.
|
|
58
|
+
See :func:`.get_aggfunc_by_name` for options (default None).
|
|
59
|
+
masks : str, dict, list of them or None, optional
|
|
36
60
|
The specification of the masks to apply to regions before extracting
|
|
37
61
|
signals. Check :ref:`Using Masks <using_masks>` for more details.
|
|
38
62
|
If None, will not apply any mask (default None).
|
|
39
|
-
params : dict, optional
|
|
40
|
-
|
|
41
|
-
function.
|
|
42
|
-
``junifer.markers.utils._multiscale_entropy_auc
|
|
43
|
-
is set to {"m": 2, "tol": 0.5, "scale": 10}
|
|
44
|
-
name : str, optional
|
|
45
|
-
The name of the marker. If None, it will use the class name
|
|
63
|
+
params : dict or None, optional
|
|
64
|
+
The parameters to pass to the AUC of multiscale entropy calculation
|
|
65
|
+
function. See
|
|
66
|
+
``junifer.markers.utils._multiscale_entropy_auc`` for more information.
|
|
67
|
+
If None, value is set to ``{"m": 2, "tol": 0.5, "scale": 10}``
|
|
46
68
|
(default None).
|
|
69
|
+
name : str or None, optional
|
|
70
|
+
The name of the marker.
|
|
71
|
+
If None, will use the class name (default None).
|
|
47
72
|
|
|
48
73
|
Warnings
|
|
49
74
|
--------
|
|
@@ -54,26 +79,12 @@ class MultiscaleEntropyAUC(ComplexityBase):
|
|
|
54
79
|
|
|
55
80
|
"""
|
|
56
81
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
masks: Union[str, dict, list[Union[dict, str]], None] = None,
|
|
63
|
-
params: Optional[dict] = None,
|
|
64
|
-
name: Optional[str] = None,
|
|
65
|
-
) -> None:
|
|
66
|
-
super().__init__(
|
|
67
|
-
parcellation=parcellation,
|
|
68
|
-
agg_method=agg_method,
|
|
69
|
-
agg_method_params=agg_method_params,
|
|
70
|
-
masks=masks,
|
|
71
|
-
name=name,
|
|
72
|
-
)
|
|
73
|
-
if params is None:
|
|
82
|
+
params: dict | None = None
|
|
83
|
+
|
|
84
|
+
def validate_marker_params(self) -> None:
|
|
85
|
+
"""Run extra logical validation for marker."""
|
|
86
|
+
if self.params is None:
|
|
74
87
|
self.params = {"m": 2, "tol": 0.5, "scale": 10}
|
|
75
|
-
else:
|
|
76
|
-
self.params = params
|
|
77
88
|
|
|
78
89
|
def compute_complexity(
|
|
79
90
|
self,
|
|
@@ -123,13 +134,14 @@ class MultiscaleEntropyAUC(ComplexityBase):
|
|
|
123
134
|
for idx_roi in range(n_roi):
|
|
124
135
|
sig = extracted_bold_values[:, idx_roi]
|
|
125
136
|
tol_corrected = tol * np.std(sig)
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
137
|
+
with _numpy_trapz():
|
|
138
|
+
tmp = nk.entropy_multiscale(
|
|
139
|
+
sig,
|
|
140
|
+
scale=scale,
|
|
141
|
+
dimension=emb_dim,
|
|
142
|
+
tolerance=tol_corrected,
|
|
143
|
+
method="MSEn",
|
|
144
|
+
)
|
|
133
145
|
|
|
134
146
|
MSEn_auc_roi[idx_roi] = tmp[0]
|
|
135
147
|
|
|
@@ -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,23 +27,23 @@ class PermEntropy(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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
(default None).
|
|
40
|
+
params : dict or None, optional
|
|
41
|
+
The parameters to pass to the permutation entropy calculation function.
|
|
42
|
+
See ``junifer.markers.utils._perm_entropy`` for more information.
|
|
43
|
+
If None, value is set to ``{"m": 2, "delay": 1}`` (default None).
|
|
44
|
+
name : str or None, optional
|
|
45
|
+
The name of the marker.
|
|
46
|
+
If None, will use the class name (default None).
|
|
47
47
|
|
|
48
48
|
Warnings
|
|
49
49
|
--------
|
|
@@ -54,26 +54,12 @@ class PermEntropy(ComplexityBase):
|
|
|
54
54
|
|
|
55
55
|
"""
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
masks: Union[str, dict, list[Union[dict, str]], None] = None,
|
|
63
|
-
params: Optional[dict] = None,
|
|
64
|
-
name: Optional[str] = None,
|
|
65
|
-
) -> None:
|
|
66
|
-
super().__init__(
|
|
67
|
-
parcellation=parcellation,
|
|
68
|
-
agg_method=agg_method,
|
|
69
|
-
agg_method_params=agg_method_params,
|
|
70
|
-
masks=masks,
|
|
71
|
-
name=name,
|
|
72
|
-
)
|
|
73
|
-
if params is None:
|
|
57
|
+
params: dict | None = None
|
|
58
|
+
|
|
59
|
+
def validate_marker_params(self) -> None:
|
|
60
|
+
"""Run extra logical validation for marker."""
|
|
61
|
+
if self.params is None:
|
|
74
62
|
self.params = {"m": 4, "delay": 1}
|
|
75
|
-
else:
|
|
76
|
-
self.params = params
|
|
77
63
|
|
|
78
64
|
def compute_complexity(
|
|
79
65
|
self,
|