junifer 0.0.7.dev84__tar.gz → 0.0.7.dev95__tar.gz
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-0.0.7.dev84 → junifer-0.0.7.dev95}/.github/workflows/docker-ci-publish.yml +3 -3
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.github/workflows/docker-docs-publish.yml +3 -3
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/PKG-INFO +1 -1
- junifer-0.0.7.dev95/docs/changes/newsfragments/451.doc +1 -0
- junifer-0.0.7.dev95/docs/changes/newsfragments/451.feature +1 -0
- junifer-0.0.7.dev95/docs/extending/data_types.rst +57 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/extending/index.rst +1 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/_version.py +2 -2
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/__init__.pyi +11 -1
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/pattern_validation_mixin.py +212 -85
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/tests/test_pattern_validation_mixin.py +104 -1
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/typing/_typing.py +1 -1
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer.egg-info/PKG-INFO +1 -1
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer.egg-info/SOURCES.txt +3 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.dockerignore +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.github/dependabot.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.github/pull_request_template.md +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.github/workflows/ci-docs.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.github/workflows/ci.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.github/workflows/docs-preview.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.github/workflows/docs.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.github/workflows/lint.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.github/workflows/publish.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.gitignore +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.gitmodules +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/.pre-commit-config.yaml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/AUTHORS.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/Dockerfile-ci +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/Dockerfile-docs +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/LICENSE.md +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/README.md +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/codecov.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/conda-env.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/Makefile +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/_static/css/custom.css +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/_static/js/custom.js +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/_templates/versions.html +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/api/api.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/api/cli.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/api/configs.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/api/data.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/api/datagrabbers.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/api/datareaders.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/api/index.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/api/markers.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/api/nilearn.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/api/onthefly.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/api/pipeline.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/api/preprocessing.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/api/stats.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/api/storage.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/api/testing.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/api/utils.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/builtin.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/changes/contributors.inc +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/changes/newsfragments/.gitignore +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/changes/newsfragments/333.enh +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/changes/newsfragments/441.misc +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/changes/newsfragments/443.feature +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/changes/newsfragments/444.bugfix +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/changes/newsfragments/450.doc +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/changes/newsfragments/450.feature +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/conf.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/contribution.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/extending/coordinates.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/extending/data_registries.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/extending/datagrabber.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/extending/dependencies.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/extending/extension.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/extending/marker.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/extending/masks.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/extending/parcellations.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/extending/plugins.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/extending/preprocessor.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/faq.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/help.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/images/junifer_logo.png +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/index.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/installation.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/links.inc +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/maintaining.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/redirect.html +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/starting.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/understanding/data.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/understanding/datagrabber.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/understanding/datareader.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/understanding/index.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/understanding/marker.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/understanding/pipeline.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/understanding/preprocess.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/understanding/storage.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/using/codeless.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/using/index.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/using/masks.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/using/queueing.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/using/running.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/docs/whats_new.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/examples/README.rst +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/examples/norun_hcpfc_pearson.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/examples/norun_ukbvm_gmd.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/examples/run_compute_parcel_mean.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/examples/run_datagrabber_bids_datalad.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/examples/run_ets_rss_marker.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/examples/run_junifer_julearn.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/examples/run_run_gmd_mean.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/examples/yamls/gmd_mean.yaml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/examples/yamls/partly_cloudy_agg_mean_tian.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/examples/yamls/ukb_gmd_mean.yaml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/ignore_words.txt +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/decorators.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/functions.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/queue_context/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/queue_context/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/queue_context/gnu_parallel_local_adapter.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/queue_context/htcondor_adapter.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/queue_context/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/queue_context/queue_context_adapter.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/queue_context/tests/test_htcondor_adapter.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/afni/3dRSFC +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/afni/3dReHo +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/afni/afni +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/afni/run_afni_docker.sh +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/ants/ResampleImage +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/ants/antsApplyTransforms +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/ants/run_ants_docker.sh +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/freesurfer/mri_binarize +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/freesurfer/mri_mc +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/freesurfer/mri_pretess +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/freesurfer/mris_convert +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/freesurfer/run_freesurfer_docker.sh +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/fsl/applywarp +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/fsl/flirt +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/fsl/img2imgcoord +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/fsl/std2imgcoord +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/run_conda.bash +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/run_conda.zsh +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/run_venv.bash +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/res/run_venv.zsh +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/tests/test_decorators.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/api/tests/test_functions.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/cli/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/cli/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/cli/cli.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/cli/parser.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/cli/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/cli/tests/data/gmd_mean.yaml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/cli/tests/data/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/cli/tests/test_cli.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/cli/tests/test_cli_utils.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/cli/tests/test_parser.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/cli/utils.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/juseless/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/juseless/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/juseless/datagrabbers/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/juseless/datagrabbers/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/configs/juseless/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/conftest.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/_dispatch.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/coordinates/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/coordinates/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/coordinates/_ants_coordinates_warper.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/coordinates/_coordinates.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/coordinates/_fsl_coordinates_warper.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/coordinates/tests/test_coordinates.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/masks/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/masks/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/masks/_ants_mask_warper.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/masks/_fsl_mask_warper.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/masks/_masks.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/masks/tests/test_masks.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/parcellations/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/parcellations/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/parcellations/_ants_parcellation_warper.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/parcellations/_fsl_parcellation_warper.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/parcellations/_parcellations.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/parcellations/tests/test_parcellations.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/pipeline_data_registry_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/template_spaces.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/tests/test_data_utils.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/tests/test_dispatch.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/tests/test_template_spaces.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/data/utils.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/aomic/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/aomic/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/aomic/id1000.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/aomic/piop1.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/aomic/piop2.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/aomic/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/datalad_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/dmcc13_benchmark.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/hcp1200/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/hcp1200/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/hcp1200/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/multiple.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/pattern.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/pattern_datalad.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/tests/test_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/tests/test_multiple.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/tests/test_pattern.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datareader/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datareader/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datareader/default.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datareader/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/datareader/tests/test_default_reader.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/BrainPrint/brainprint/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/BrainPrint/brainprint/_version.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/BrainPrint/brainprint/asymmetry.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/BrainPrint/brainprint/brainprint.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/BrainPrint/brainprint/surfaces.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/BrainPrint/brainprint/utils/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/BrainPrint/brainprint/utils/_config.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/BrainPrint/brainprint/utils/utils.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/h5io/h5io/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/h5io/h5io/_h5io.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/h5io/h5io/_version.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/h5io/h5io/chunked_array.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/h5io/h5io/chunked_list.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/nilearn/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/nilearn/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/nilearn/junifer_connectivity_measure.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/nilearn/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/brainprint.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/complexity_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/hurst_exponent.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/perm_entropy.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/range_entropy.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/range_entropy_auc.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/sample_entropy.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/ets_rss.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/falff/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/falff/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/falff/_afni_falff.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/falff/_junifer_falff.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/falff/falff_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/falff/falff_parcels.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/falff/falff_spheres.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/falff/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/functional_connectivity/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/functional_connectivity/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/functional_connectivity/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/parcel_aggregation.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/reho/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/reho/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/reho/_afni_reho.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/reho/_junifer_reho.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/reho/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/reho/reho_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/reho/reho_parcels.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/reho/reho_spheres.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/sphere_aggregation.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/temporal_snr/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/temporal_snr/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/temporal_snr/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/tests/test_brainprint.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/tests/test_ets_rss.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/tests/test_marker_utils.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/tests/test_markers_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/markers/utils.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/onthefly/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/onthefly/_brainprint.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/onthefly/read_transform.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/onthefly/tests/test_read_transform.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/pipeline/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/pipeline/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/pipeline/marker_collection.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/pipeline/pipeline_component_registry.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/pipeline/pipeline_step_mixin.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/pipeline/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/pipeline/tests/test_marker_collection.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/pipeline/tests/test_pipeline_component_registry.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/pipeline/tests/test_workdir_manager.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/pipeline/update_meta_mixin.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/pipeline/utils.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/pipeline/workdir_manager.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/_temporal_slicer.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/confounds/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/confounds/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/confounds/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/smoothing/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/smoothing/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/smoothing/_afni_smoothing.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/smoothing/_fsl_smoothing.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/smoothing/_nilearn_smoothing.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/smoothing/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/smoothing/smoothing.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/smoothing/tests/test_smoothing.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/tests/test_preprocess_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/tests/test_temporal_slicer.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/warping/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/warping/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/warping/_ants_warper.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/warping/_fsl_warper.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/warping/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/warping/space_warper.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/preprocess/warping/tests/test_space_warper.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/stats.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/storage/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/storage/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/storage/base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/storage/hdf5.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/storage/pandas_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/storage/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/storage/sqlite.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/storage/tests/test_hdf5.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/storage/tests/test_pandas_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/storage/tests/test_sqlite.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/storage/tests/test_storage_base.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/storage/tests/test_utils.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/storage/utils.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/testing/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/testing/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/testing/datagrabbers.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/testing/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/testing/registry.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/testing/tests/test_testing_registry.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/testing/utils.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/tests/test_main.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/tests/test_stats.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/typing/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/typing/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/utils/__init__.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/utils/__init__.pyi +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/utils/_config.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/utils/_yaml.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/utils/fs.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/utils/helpers.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/utils/logging.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/utils/py.typed +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/utils/singleton.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/utils/tests/test_config.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/utils/tests/test_fs.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/utils/tests/test_helpers.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer/utils/tests/test_logging.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer.egg-info/dependency_links.txt +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer.egg-info/entry_points.txt +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer.egg-info/requires.txt +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/junifer.egg-info/top_level.txt +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/pyproject.toml +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/setup.cfg +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/setup.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/tools/create_aomic1000_example_dataset.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/tools/create_aomicpiop1_example_dataset.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/tools/create_aomicpiop2_example_dataset.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/tools/create_bids_example_dataset.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/tools/create_bids_example_dataset_sessions.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/tools/create_hcp1200_example_dataset.py +0 -0
- {junifer-0.0.7.dev84 → junifer-0.0.7.dev95}/tox.ini +0 -0
@@ -45,7 +45,7 @@ jobs:
|
|
45
45
|
# https://github.com/sigstore/cosign-installer
|
46
46
|
- name: Install cosign
|
47
47
|
if: github.event_name != 'pull_request'
|
48
|
-
uses: sigstore/cosign-installer@
|
48
|
+
uses: sigstore/cosign-installer@398d4b0eeef1380460a10c8013a76f728fb906ac #v3.9.1
|
49
49
|
with:
|
50
50
|
cosign-release: 'v2.2.4'
|
51
51
|
|
@@ -53,7 +53,7 @@ jobs:
|
|
53
53
|
# multi-platform images and export cache
|
54
54
|
# https://github.com/docker/setup-buildx-action
|
55
55
|
- name: Set up Docker Buildx
|
56
|
-
uses: docker/setup-buildx-action@
|
56
|
+
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
|
57
57
|
|
58
58
|
# Login against a Docker registry except on PR
|
59
59
|
# https://github.com/docker/login-action
|
@@ -77,7 +77,7 @@ jobs:
|
|
77
77
|
# https://github.com/docker/build-push-action
|
78
78
|
- name: Build and push Docker image
|
79
79
|
id: build-and-push
|
80
|
-
uses: docker/build-push-action@
|
80
|
+
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
|
81
81
|
with:
|
82
82
|
context: .
|
83
83
|
file: Dockerfile-ci
|
@@ -42,7 +42,7 @@ jobs:
|
|
42
42
|
# https://github.com/sigstore/cosign-installer
|
43
43
|
- name: Install cosign
|
44
44
|
if: github.event_name != 'pull_request'
|
45
|
-
uses: sigstore/cosign-installer@
|
45
|
+
uses: sigstore/cosign-installer@398d4b0eeef1380460a10c8013a76f728fb906ac #v3.9.1
|
46
46
|
with:
|
47
47
|
cosign-release: 'v2.2.4'
|
48
48
|
|
@@ -50,7 +50,7 @@ jobs:
|
|
50
50
|
# multi-platform images and export cache
|
51
51
|
# https://github.com/docker/setup-buildx-action
|
52
52
|
- name: Set up Docker Buildx
|
53
|
-
uses: docker/setup-buildx-action@
|
53
|
+
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
|
54
54
|
|
55
55
|
# Login against a Docker registry except on PR
|
56
56
|
# https://github.com/docker/login-action
|
@@ -74,7 +74,7 @@ jobs:
|
|
74
74
|
# https://github.com/docker/build-push-action
|
75
75
|
- name: Build and push Docker image
|
76
76
|
id: build-and-push
|
77
|
-
uses: docker/build-push-action@
|
77
|
+
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
|
78
78
|
with:
|
79
79
|
context: .
|
80
80
|
file: Dockerfile-docs
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: junifer
|
3
|
-
Version: 0.0.7.
|
3
|
+
Version: 0.0.7.dev95
|
4
4
|
Summary: JUelich NeuroImaging FEature extractoR
|
5
5
|
Author-email: Fede Raimondo <f.raimondo@fz-juelich.de>, Synchon Mandal <s.mandal@fz-juelich.de>
|
6
6
|
Maintainer-email: Fede Raimondo <f.raimondo@fz-juelich.de>, Synchon Mandal <s.mandal@fz-juelich.de>
|
@@ -0,0 +1 @@
|
|
1
|
+
Add documentation on adding data types by `Synchon Mandal`_
|
@@ -0,0 +1 @@
|
|
1
|
+
Enable data types to be added by introducing :func:`.register_data_type` by `Synchon Mandal`_
|
@@ -0,0 +1,57 @@
|
|
1
|
+
.. include:: ../links.inc
|
2
|
+
|
3
|
+
.. _adding_data_types:
|
4
|
+
|
5
|
+
Adding Data Types
|
6
|
+
=================
|
7
|
+
|
8
|
+
``junifer`` supports most of the :ref:`data types <data_types>` required for fMRI
|
9
|
+
but also provides a way to add custom data types in case you work with other
|
10
|
+
modalities like EEG.
|
11
|
+
|
12
|
+
How to add a data type
|
13
|
+
----------------------
|
14
|
+
|
15
|
+
#. Check :ref:`extending junifer <extending_extension>` on how to create a
|
16
|
+
*junifer extension* if you have not done so.
|
17
|
+
#. Define the data type schema in the *extension script* like so:
|
18
|
+
|
19
|
+
.. code-block:: python
|
20
|
+
|
21
|
+
from junifer.datagrabber import DataTypeSchema
|
22
|
+
|
23
|
+
|
24
|
+
dtype_schema: DataTypeSchema = {
|
25
|
+
"mandatory": ["pattern"],
|
26
|
+
"optional": {
|
27
|
+
"mask": {
|
28
|
+
"mandatory": ["pattern"],
|
29
|
+
"optional": [],
|
30
|
+
},
|
31
|
+
},
|
32
|
+
}
|
33
|
+
|
34
|
+
* The :obj:`.DataTypeSchema` has two mandatory keys:
|
35
|
+
|
36
|
+
* ``mandatory`` : list of str
|
37
|
+
* ``optional`` : dict of str and :obj:`.OptionalTypeSchema`
|
38
|
+
|
39
|
+
* ``mandatory`` defines the keys that must be present when defining a *pattern*
|
40
|
+
in a DataGrabber.
|
41
|
+
* ``optional`` defines the mapping from *sub-types* that are optional, to their patterns.
|
42
|
+
The patterns in turn require a ``mandatory`` key and an ``optional`` key both
|
43
|
+
just being the keys that must be there if the optional key is found. It's
|
44
|
+
possible that the *sub-type* (``mask`` in the example) can be absent from the dataset.
|
45
|
+
|
46
|
+
#. Register the data type before defining / using a DataGrabber like so:
|
47
|
+
|
48
|
+
.. code-block:: python
|
49
|
+
|
50
|
+
from junifer.datagrabber import register_data_type
|
51
|
+
...
|
52
|
+
|
53
|
+
|
54
|
+
# registers the data type as "dtype"
|
55
|
+
register_data_type(name="dtype", schema=dtype_schema)
|
56
|
+
|
57
|
+
...
|
@@ -17,5 +17,5 @@ __version__: str
|
|
17
17
|
__version_tuple__: VERSION_TUPLE
|
18
18
|
version_tuple: VERSION_TUPLE
|
19
19
|
|
20
|
-
__version__ = version = '0.0.7.
|
21
|
-
__version_tuple__ = version_tuple = (0, 0, 7, '
|
20
|
+
__version__ = version = '0.0.7.dev95'
|
21
|
+
__version_tuple__ = version_tuple = (0, 0, 7, 'dev95')
|
@@ -10,7 +10,11 @@ __all__ = [
|
|
10
10
|
"DataladHCP1200",
|
11
11
|
"MultipleDataGrabber",
|
12
12
|
"DMCC13Benchmark",
|
13
|
+
"DataTypeManager",
|
14
|
+
"DataTypeSchema",
|
15
|
+
"OptionalTypeSchema",
|
13
16
|
"PatternValidationMixin",
|
17
|
+
"register_data_type",
|
14
18
|
]
|
15
19
|
|
16
20
|
# These 4 need to be in this order, otherwise it is a circular import
|
@@ -24,4 +28,10 @@ from .hcp1200 import HCP1200, DataladHCP1200
|
|
24
28
|
from .multiple import MultipleDataGrabber
|
25
29
|
from .dmcc13_benchmark import DMCC13Benchmark
|
26
30
|
|
27
|
-
from .pattern_validation_mixin import
|
31
|
+
from .pattern_validation_mixin import (
|
32
|
+
DataTypeManager,
|
33
|
+
DataTypeSchema,
|
34
|
+
OptionalTypeSchema,
|
35
|
+
PatternValidationMixin,
|
36
|
+
register_data_type,
|
37
|
+
)
|
@@ -3,71 +3,199 @@
|
|
3
3
|
# Authors: Synchon Mandal <s.mandal@fz-juelich.de>
|
4
4
|
# License: AGPL
|
5
5
|
|
6
|
+
from collections.abc import Iterator, MutableMapping
|
7
|
+
from typing import TypedDict
|
8
|
+
|
6
9
|
from ..typing import DataGrabberPatterns
|
7
10
|
from ..utils import logger, raise_error, warn_with_log
|
8
11
|
|
9
12
|
|
10
|
-
__all__ = [
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
"
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
"
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
13
|
+
__all__ = [
|
14
|
+
"DataTypeManager",
|
15
|
+
"DataTypeSchema",
|
16
|
+
"OptionalTypeSchema",
|
17
|
+
"PatternValidationMixin",
|
18
|
+
"register_data_type",
|
19
|
+
]
|
20
|
+
|
21
|
+
|
22
|
+
class OptionalTypeSchema(TypedDict):
|
23
|
+
"""Optional type schema."""
|
24
|
+
|
25
|
+
mandatory: list[str]
|
26
|
+
optional: list[str]
|
27
|
+
|
28
|
+
|
29
|
+
class DataTypeSchema(TypedDict):
|
30
|
+
"""Data type schema."""
|
31
|
+
|
32
|
+
mandatory: list[str]
|
33
|
+
optional: dict[str, OptionalTypeSchema]
|
34
|
+
|
35
|
+
|
36
|
+
class DataTypeManager(MutableMapping):
|
37
|
+
"""Class for managing data types."""
|
38
|
+
|
39
|
+
_instance = None
|
40
|
+
|
41
|
+
def __new__(cls):
|
42
|
+
"""Overridden to make the class singleton."""
|
43
|
+
# Make class singleton
|
44
|
+
if cls._instance is None:
|
45
|
+
cls._instance = super().__new__(cls)
|
46
|
+
# Set global schema
|
47
|
+
cls._global: dict[str, DataTypeSchema] = {}
|
48
|
+
cls._builtin: dict[str, DataTypeSchema] = {}
|
49
|
+
cls._external: dict[str, DataTypeSchema] = {}
|
50
|
+
cls._builtin.update(
|
51
|
+
{
|
52
|
+
"T1w": {
|
53
|
+
"mandatory": ["pattern", "space"],
|
54
|
+
"optional": {
|
55
|
+
"mask": {
|
56
|
+
"mandatory": ["pattern", "space"],
|
57
|
+
"optional": [],
|
58
|
+
},
|
59
|
+
},
|
60
|
+
},
|
61
|
+
"T2w": {
|
62
|
+
"mandatory": ["pattern", "space"],
|
63
|
+
"optional": {
|
64
|
+
"mask": {
|
65
|
+
"mandatory": ["pattern", "space"],
|
66
|
+
"optional": [],
|
67
|
+
},
|
68
|
+
},
|
69
|
+
},
|
70
|
+
"BOLD": {
|
71
|
+
"mandatory": ["pattern", "space"],
|
72
|
+
"optional": {
|
73
|
+
"mask": {
|
74
|
+
"mandatory": ["pattern", "space"],
|
75
|
+
"optional": [],
|
76
|
+
},
|
77
|
+
"confounds": {
|
78
|
+
"mandatory": ["pattern", "format"],
|
79
|
+
"optional": ["mappings"],
|
80
|
+
},
|
81
|
+
"reference": {
|
82
|
+
"mandatory": ["pattern"],
|
83
|
+
"optional": [],
|
84
|
+
},
|
85
|
+
"prewarp_space": {"mandatory": [], "optional": []},
|
86
|
+
},
|
87
|
+
},
|
88
|
+
"Warp": {
|
89
|
+
"mandatory": ["pattern", "src", "dst", "warper"],
|
90
|
+
"optional": {},
|
91
|
+
},
|
92
|
+
"VBM_GM": {
|
93
|
+
"mandatory": ["pattern", "space"],
|
94
|
+
"optional": {},
|
95
|
+
},
|
96
|
+
"VBM_WM": {
|
97
|
+
"mandatory": ["pattern", "space"],
|
98
|
+
"optional": {},
|
99
|
+
},
|
100
|
+
"VBM_CSF": {
|
101
|
+
"mandatory": ["pattern", "space"],
|
102
|
+
"optional": {},
|
103
|
+
},
|
104
|
+
"DWI": {
|
105
|
+
"mandatory": ["pattern"],
|
106
|
+
"optional": {},
|
107
|
+
},
|
108
|
+
"FreeSurfer": {
|
109
|
+
"mandatory": ["pattern"],
|
110
|
+
"optional": {
|
111
|
+
"aseg": {"mandatory": ["pattern"], "optional": []},
|
112
|
+
"norm": {"mandatory": ["pattern"], "optional": []},
|
113
|
+
"lh_white": {
|
114
|
+
"mandatory": ["pattern"],
|
115
|
+
"optional": [],
|
116
|
+
},
|
117
|
+
"rh_white": {
|
118
|
+
"mandatory": ["pattern"],
|
119
|
+
"optional": [],
|
120
|
+
},
|
121
|
+
"lh_pial": {
|
122
|
+
"mandatory": ["pattern"],
|
123
|
+
"optional": [],
|
124
|
+
},
|
125
|
+
"rh_pial": {
|
126
|
+
"mandatory": ["pattern"],
|
127
|
+
"optional": [],
|
128
|
+
},
|
129
|
+
},
|
130
|
+
},
|
131
|
+
}
|
132
|
+
)
|
133
|
+
cls._global.update(cls._builtin)
|
134
|
+
return cls._instance
|
135
|
+
|
136
|
+
def __getitem__(self, key: str) -> DataTypeSchema:
|
137
|
+
"""Retrieve schema for ``key``."""
|
138
|
+
return self._global[key]
|
139
|
+
|
140
|
+
def __iter__(self) -> Iterator[str]:
|
141
|
+
"""Iterate over data types."""
|
142
|
+
return iter(self._global)
|
143
|
+
|
144
|
+
def __len__(self) -> int:
|
145
|
+
"""Get data type count."""
|
146
|
+
return len(self._global)
|
147
|
+
|
148
|
+
def __delitem__(self, key: str) -> None:
|
149
|
+
"""Remove schema for ``key``."""
|
150
|
+
# Internal check
|
151
|
+
if key in self._builtin:
|
152
|
+
raise_error(f"Cannot delete in-built key: {key}")
|
153
|
+
# Non-existing key
|
154
|
+
if key not in self._external:
|
155
|
+
raise_error(klass=KeyError, msg=key)
|
156
|
+
# Update external
|
157
|
+
_ = self._external.pop(key)
|
158
|
+
# Update global
|
159
|
+
_ = self._global.pop(key)
|
160
|
+
|
161
|
+
def __setitem__(self, key: str, value: DataTypeSchema) -> None:
|
162
|
+
"""Update ``key`` with ``value``."""
|
163
|
+
# Internal check
|
164
|
+
if key in self._builtin:
|
165
|
+
raise_error(f"Cannot set value for in-built key: {key}")
|
166
|
+
# Value type check
|
167
|
+
if not isinstance(value, dict):
|
168
|
+
raise_error(f"Invalid value type: {type(value)}")
|
169
|
+
# Update external
|
170
|
+
self._external[key] = value
|
171
|
+
# Update global
|
172
|
+
self._global[key] = value
|
173
|
+
|
174
|
+
def popitem():
|
175
|
+
"""Not implemented."""
|
176
|
+
pass
|
177
|
+
|
178
|
+
def clear(self):
|
179
|
+
"""Not implemented."""
|
180
|
+
pass
|
181
|
+
|
182
|
+
def setdefault(self, key: str, value=None):
|
183
|
+
"""Not implemented."""
|
184
|
+
pass
|
185
|
+
|
186
|
+
|
187
|
+
def register_data_type(name: str, schema: DataTypeSchema) -> None:
|
188
|
+
"""Register custom data type.
|
189
|
+
|
190
|
+
Parameters
|
191
|
+
----------
|
192
|
+
name : str
|
193
|
+
The data type name.
|
194
|
+
schema : DataTypeSchema
|
195
|
+
The data type schema.
|
196
|
+
|
197
|
+
"""
|
198
|
+
DataTypeManager()[name] = schema
|
71
199
|
|
72
200
|
|
73
201
|
class PatternValidationMixin:
|
@@ -311,12 +439,13 @@ class PatternValidationMixin:
|
|
311
439
|
msg="`patterns` must contain all `types`", klass=ValueError
|
312
440
|
)
|
313
441
|
# Check against schema
|
442
|
+
dtype_mgr = DataTypeManager()
|
314
443
|
for dtype_key, dtype_val in patterns.items():
|
315
444
|
# Check if valid data type is provided
|
316
|
-
if dtype_key not in
|
445
|
+
if dtype_key not in dtype_mgr:
|
317
446
|
raise_error(
|
318
447
|
f"Unknown data type: {dtype_key}, "
|
319
|
-
f"should be one of: {list(
|
448
|
+
f"should be one of: {list(dtype_mgr.keys())}"
|
320
449
|
)
|
321
450
|
# Conditional for list dtype vals like Warp
|
322
451
|
if isinstance(dtype_val, list):
|
@@ -324,14 +453,14 @@ class PatternValidationMixin:
|
|
324
453
|
# Check mandatory keys for data type
|
325
454
|
self._validate_mandatory_keys(
|
326
455
|
keys=list(entry),
|
327
|
-
schema=
|
456
|
+
schema=dtype_mgr[dtype_key]["mandatory"],
|
328
457
|
data_type=f"{dtype_key}.{idx}",
|
329
458
|
partial_pattern_ok=partial_pattern_ok,
|
330
459
|
)
|
331
460
|
# Check optional keys for data type
|
332
|
-
for optional_key, optional_val in
|
333
|
-
|
334
|
-
]
|
461
|
+
for optional_key, optional_val in dtype_mgr[dtype_key][
|
462
|
+
"optional"
|
463
|
+
].items():
|
335
464
|
if optional_key not in entry:
|
336
465
|
logger.debug(
|
337
466
|
f"Optional key: `{optional_key}` missing for "
|
@@ -344,12 +473,12 @@ class PatternValidationMixin:
|
|
344
473
|
)
|
345
474
|
# Set nested type name for easier access
|
346
475
|
nested_dtype = f"{dtype_key}.{idx}.{optional_key}"
|
347
|
-
nested_mandatory_keys_schema =
|
476
|
+
nested_mandatory_keys_schema = dtype_mgr[
|
348
477
|
dtype_key
|
349
478
|
]["optional"][optional_key]["mandatory"]
|
350
|
-
nested_optional_keys_schema =
|
351
|
-
|
352
|
-
][
|
479
|
+
nested_optional_keys_schema = dtype_mgr[dtype_key][
|
480
|
+
"optional"
|
481
|
+
][optional_key]["optional"]
|
353
482
|
# Check mandatory keys for nested type
|
354
483
|
self._validate_mandatory_keys(
|
355
484
|
keys=list(optional_val["mandatory"]),
|
@@ -392,10 +521,8 @@ class PatternValidationMixin:
|
|
392
521
|
self._identify_stray_keys(
|
393
522
|
keys=list(entry.keys()),
|
394
523
|
schema=(
|
395
|
-
|
396
|
-
+ list(
|
397
|
-
PATTERNS_SCHEMA[dtype_key]["optional"].keys()
|
398
|
-
)
|
524
|
+
dtype_mgr[dtype_key]["mandatory"]
|
525
|
+
+ list(dtype_mgr[dtype_key]["optional"].keys())
|
399
526
|
),
|
400
527
|
data_type=dtype_key,
|
401
528
|
)
|
@@ -412,12 +539,12 @@ class PatternValidationMixin:
|
|
412
539
|
# Check mandatory keys for data type
|
413
540
|
self._validate_mandatory_keys(
|
414
541
|
keys=list(dtype_val),
|
415
|
-
schema=
|
542
|
+
schema=dtype_mgr[dtype_key]["mandatory"],
|
416
543
|
data_type=dtype_key,
|
417
544
|
partial_pattern_ok=partial_pattern_ok,
|
418
545
|
)
|
419
546
|
# Check optional keys for data type
|
420
|
-
for optional_key, optional_val in
|
547
|
+
for optional_key, optional_val in dtype_mgr[dtype_key][
|
421
548
|
"optional"
|
422
549
|
].items():
|
423
550
|
if optional_key not in dtype_val:
|
@@ -432,12 +559,12 @@ class PatternValidationMixin:
|
|
432
559
|
)
|
433
560
|
# Set nested type name for easier access
|
434
561
|
nested_dtype = f"{dtype_key}.{optional_key}"
|
435
|
-
nested_mandatory_keys_schema =
|
436
|
-
|
437
|
-
][
|
438
|
-
nested_optional_keys_schema =
|
439
|
-
|
440
|
-
][
|
562
|
+
nested_mandatory_keys_schema = dtype_mgr[dtype_key][
|
563
|
+
"optional"
|
564
|
+
][optional_key]["mandatory"]
|
565
|
+
nested_optional_keys_schema = dtype_mgr[dtype_key][
|
566
|
+
"optional"
|
567
|
+
][optional_key]["optional"]
|
441
568
|
# Check mandatory keys for nested type
|
442
569
|
self._validate_mandatory_keys(
|
443
570
|
keys=list(optional_val["mandatory"]),
|
@@ -476,8 +603,8 @@ class PatternValidationMixin:
|
|
476
603
|
self._identify_stray_keys(
|
477
604
|
keys=list(dtype_val.keys()),
|
478
605
|
schema=(
|
479
|
-
|
480
|
-
+ list(
|
606
|
+
dtype_mgr[dtype_key]["mandatory"]
|
607
|
+
+ list(dtype_mgr[dtype_key]["optional"].keys())
|
481
608
|
),
|
482
609
|
data_type=dtype_key,
|
483
610
|
)
|
@@ -9,7 +9,110 @@ from typing import Union
|
|
9
9
|
|
10
10
|
import pytest
|
11
11
|
|
12
|
-
from junifer.datagrabber.pattern_validation_mixin import
|
12
|
+
from junifer.datagrabber.pattern_validation_mixin import (
|
13
|
+
DataTypeManager,
|
14
|
+
DataTypeSchema,
|
15
|
+
PatternValidationMixin,
|
16
|
+
register_data_type,
|
17
|
+
)
|
18
|
+
|
19
|
+
|
20
|
+
def test_dtype_mgr_addition_errors() -> None:
|
21
|
+
"""Test data type manager addition errors."""
|
22
|
+
with pytest.raises(ValueError, match="Cannot set"):
|
23
|
+
dtype_schema: DataTypeSchema = {
|
24
|
+
"mandatory": ["pattern"],
|
25
|
+
"optional": {},
|
26
|
+
}
|
27
|
+
DataTypeManager()["T1w"] = dtype_schema
|
28
|
+
|
29
|
+
with pytest.raises(ValueError, match="Invalid"):
|
30
|
+
DataTypeManager()["DType"] = ""
|
31
|
+
|
32
|
+
|
33
|
+
def test_dtype_mgr_removal_errors() -> None:
|
34
|
+
"""Test data type manager removal errors."""
|
35
|
+
with pytest.raises(ValueError, match="Cannot delete"):
|
36
|
+
_ = DataTypeManager().pop("T1w")
|
37
|
+
|
38
|
+
with pytest.raises(KeyError, match="DType"):
|
39
|
+
del DataTypeManager()["DType"]
|
40
|
+
|
41
|
+
|
42
|
+
@pytest.mark.parametrize(
|
43
|
+
"dtype",
|
44
|
+
[
|
45
|
+
{
|
46
|
+
"mandatory": ["pattern"],
|
47
|
+
"optional": {},
|
48
|
+
},
|
49
|
+
{
|
50
|
+
"mandatory": ["pattern"],
|
51
|
+
"optional": {
|
52
|
+
"subtype": {
|
53
|
+
"mandatory": [],
|
54
|
+
"optional": [],
|
55
|
+
}
|
56
|
+
},
|
57
|
+
},
|
58
|
+
{
|
59
|
+
"mandatory": ["pattern"],
|
60
|
+
"optional": {
|
61
|
+
"subtype": {
|
62
|
+
"mandatory": ["pattern"],
|
63
|
+
"optional": [],
|
64
|
+
}
|
65
|
+
},
|
66
|
+
},
|
67
|
+
{
|
68
|
+
"mandatory": ["pattern"],
|
69
|
+
"optional": {
|
70
|
+
"subtype": {
|
71
|
+
"mandatory": ["pattern"],
|
72
|
+
"optional": ["pattern"],
|
73
|
+
}
|
74
|
+
},
|
75
|
+
},
|
76
|
+
],
|
77
|
+
)
|
78
|
+
def test_dtype_mgr(dtype: DataTypeSchema) -> None:
|
79
|
+
"""Test data type manager addition and removal.
|
80
|
+
|
81
|
+
Parameters
|
82
|
+
----------
|
83
|
+
dtype : DataTypeSchema
|
84
|
+
The parametrized schema.
|
85
|
+
|
86
|
+
"""
|
87
|
+
|
88
|
+
DataTypeManager().update({"DType": dtype})
|
89
|
+
assert "DType" in DataTypeManager()
|
90
|
+
|
91
|
+
_ = DataTypeManager().pop("DType")
|
92
|
+
assert "DType" not in DataTypeManager()
|
93
|
+
|
94
|
+
|
95
|
+
def test_register_data_type() -> None:
|
96
|
+
"""Test data type registration."""
|
97
|
+
|
98
|
+
dtype_schema: DataTypeSchema = {
|
99
|
+
"mandatory": ["pattern"],
|
100
|
+
"optional": {
|
101
|
+
"mask": {
|
102
|
+
"mandatory": ["pattern"],
|
103
|
+
"optional": [],
|
104
|
+
},
|
105
|
+
},
|
106
|
+
}
|
107
|
+
|
108
|
+
register_data_type(
|
109
|
+
name="dtype",
|
110
|
+
schema=dtype_schema,
|
111
|
+
)
|
112
|
+
|
113
|
+
assert "dtype" in DataTypeManager()
|
114
|
+
_ = DataTypeManager().pop("dtype")
|
115
|
+
assert "dumb" not in DataTypeManager()
|
13
116
|
|
14
117
|
|
15
118
|
@pytest.mark.parametrize(
|
@@ -64,7 +64,7 @@ ConditionalDependencies = Sequence[
|
|
64
64
|
ExternalDependencies = Sequence[MutableMapping[str, Union[str, Sequence[str]]]]
|
65
65
|
MarkerInOutMappings = MutableMapping[str, MutableMapping[str, str]]
|
66
66
|
DataGrabberPatterns = dict[
|
67
|
-
str, Union[dict[str, str],
|
67
|
+
str, Union[dict[str, str], list[dict[str, str]]]
|
68
68
|
]
|
69
69
|
ConfigVal = Union[bool, int, float, str]
|
70
70
|
Element = Union[str, tuple[str, ...]]
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: junifer
|
3
|
-
Version: 0.0.7.
|
3
|
+
Version: 0.0.7.dev95
|
4
4
|
Summary: JUelich NeuroImaging FEature extractoR
|
5
5
|
Author-email: Fede Raimondo <f.raimondo@fz-juelich.de>, Synchon Mandal <s.mandal@fz-juelich.de>
|
6
6
|
Maintainer-email: Fede Raimondo <f.raimondo@fz-juelich.de>, Synchon Mandal <s.mandal@fz-juelich.de>
|