junifer 0.0.7.dev105__tar.gz → 0.0.7.dev121__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.dev105 → junifer-0.0.7.dev121}/PKG-INFO +1 -1
- junifer-0.0.7.dev121/docs/changes/newsfragments/429.change +1 -0
- junifer-0.0.7.dev121/docs/changes/newsfragments/429.enh +1 -0
- junifer-0.0.7.dev121/docs/changes/newsfragments/452.doc +1 -0
- junifer-0.0.7.dev121/docs/changes/newsfragments/452.feature +1 -0
- junifer-0.0.7.dev121/docs/extending/data_dump_asset.rst +46 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/extending/index.rst +1 -0
- junifer-0.0.7.dev121/docs/using/configuring.rst +65 -0
- junifer-0.0.7.dev121/docs/using/dumping.rst +18 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/using/index.rst +2 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/_version.py +2 -2
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/decorators.py +53 -1
- junifer-0.0.7.dev121/junifer/api/tests/test_decorators.py +78 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/onthefly/read_transform.py +70 -4
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/onthefly/tests/test_read_transform.py +84 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/pipeline/__init__.pyi +10 -0
- junifer-0.0.7.dev121/junifer/pipeline/_data_object_dumper.py +347 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/pipeline/marker_collection.py +41 -3
- junifer-0.0.7.dev121/junifer/pipeline/tests/test_data_object_dumper.py +225 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/typing/__init__.pyi +2 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/typing/_typing.py +2 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer.egg-info/PKG-INFO +1 -1
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer.egg-info/SOURCES.txt +9 -0
- junifer-0.0.7.dev105/junifer/api/tests/test_decorators.py +0 -32
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.dockerignore +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.github/dependabot.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.github/pull_request_template.md +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.github/workflows/ci-docs.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.github/workflows/ci.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.github/workflows/docker-ci-publish.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.github/workflows/docker-docs-publish.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.github/workflows/docs-preview.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.github/workflows/docs.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.github/workflows/lint.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.github/workflows/publish.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.gitignore +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.gitmodules +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/.pre-commit-config.yaml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/AUTHORS.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/Dockerfile-ci +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/Dockerfile-docs +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/LICENSE.md +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/README.md +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/codecov.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/conda-env.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/Makefile +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/_static/css/custom.css +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/_static/js/custom.js +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/_templates/versions.html +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/api/api.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/api/cli.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/api/configs.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/api/data.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/api/datagrabbers.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/api/datareaders.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/api/index.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/api/markers.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/api/nilearn.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/api/onthefly.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/api/pipeline.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/api/preprocessing.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/api/stats.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/api/storage.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/api/testing.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/api/utils.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/builtin.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/changes/contributors.inc +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/changes/newsfragments/.gitignore +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/changes/newsfragments/333.enh +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/changes/newsfragments/432.feature +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/changes/newsfragments/441.misc +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/changes/newsfragments/443.feature +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/changes/newsfragments/444.bugfix +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/changes/newsfragments/450.doc +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/changes/newsfragments/450.feature +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/changes/newsfragments/451.doc +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/changes/newsfragments/451.feature +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/conf.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/contribution.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/extending/coordinates.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/extending/data_registries.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/extending/data_types.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/extending/datagrabber.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/extending/dependencies.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/extending/extension.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/extending/marker.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/extending/masks.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/extending/parcellations.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/extending/plugins.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/extending/preprocessor.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/faq.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/help.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/images/junifer_logo.png +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/index.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/installation.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/links.inc +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/maintaining.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/redirect.html +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/starting.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/understanding/data.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/understanding/datagrabber.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/understanding/datareader.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/understanding/index.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/understanding/marker.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/understanding/pipeline.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/understanding/preprocess.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/understanding/storage.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/using/codeless.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/using/masks.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/using/queueing.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/using/running.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/docs/whats_new.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/examples/README.rst +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/examples/norun_hcpfc_pearson.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/examples/norun_ukbvm_gmd.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/examples/run_compute_parcel_mean.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/examples/run_datagrabber_bids_datalad.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/examples/run_ets_rss_marker.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/examples/run_junifer_julearn.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/examples/run_run_gmd_mean.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/examples/yamls/gmd_mean.yaml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/examples/yamls/partly_cloudy_agg_mean_tian.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/examples/yamls/ukb_gmd_mean.yaml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/ignore_words.txt +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/functions.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/queue_context/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/queue_context/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/queue_context/gnu_parallel_local_adapter.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/queue_context/htcondor_adapter.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/queue_context/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/queue_context/queue_context_adapter.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/queue_context/tests/test_htcondor_adapter.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/afni/3dRSFC +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/afni/3dReHo +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/afni/afni +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/afni/run_afni_docker.sh +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/ants/ResampleImage +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/ants/antsApplyTransforms +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/ants/run_ants_docker.sh +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/freesurfer/mri_binarize +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/freesurfer/mri_mc +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/freesurfer/mri_pretess +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/freesurfer/mris_convert +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/freesurfer/run_freesurfer_docker.sh +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/fsl/applywarp +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/fsl/flirt +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/fsl/img2imgcoord +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/fsl/std2imgcoord +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/run_conda.bash +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/run_conda.zsh +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/run_venv.bash +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/res/run_venv.zsh +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/api/tests/test_functions.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/cli/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/cli/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/cli/cli.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/cli/parser.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/cli/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/cli/tests/data/gmd_mean.yaml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/cli/tests/data/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/cli/tests/test_cli.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/cli/tests/test_cli_utils.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/cli/tests/test_parser.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/cli/utils.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/juseless/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/juseless/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/juseless/datagrabbers/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/juseless/datagrabbers/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/configs/juseless/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/conftest.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/_dispatch.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/coordinates/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/coordinates/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/coordinates/_ants_coordinates_warper.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/coordinates/_coordinates.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/coordinates/_fsl_coordinates_warper.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/coordinates/tests/test_coordinates.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/masks/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/masks/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/masks/_ants_mask_warper.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/masks/_fsl_mask_warper.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/masks/_masks.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/masks/tests/test_masks.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/parcellations/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/parcellations/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/parcellations/_ants_parcellation_warper.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/parcellations/_fsl_parcellation_warper.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/parcellations/_parcellations.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/parcellations/tests/test_parcellations.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/pipeline_data_registry_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/template_spaces.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/tests/test_data_utils.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/tests/test_dispatch.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/tests/test_template_spaces.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/data/utils.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/aomic/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/aomic/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/aomic/id1000.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/aomic/piop1.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/aomic/piop2.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/aomic/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/datalad_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/dmcc13_benchmark.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/hcp1200/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/hcp1200/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/hcp1200/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/multiple.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/pattern.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/pattern_datalad.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/pattern_validation_mixin.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/tests/test_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/tests/test_multiple.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/tests/test_pattern.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datagrabber/tests/test_pattern_validation_mixin.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datareader/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datareader/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datareader/default.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datareader/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/datareader/tests/test_default_reader.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/BrainPrint/brainprint/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/BrainPrint/brainprint/_version.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/BrainPrint/brainprint/asymmetry.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/BrainPrint/brainprint/brainprint.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/BrainPrint/brainprint/surfaces.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/BrainPrint/brainprint/utils/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/BrainPrint/brainprint/utils/_config.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/BrainPrint/brainprint/utils/utils.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/h5io/h5io/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/h5io/h5io/_h5io.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/h5io/h5io/_version.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/h5io/h5io/chunked_array.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/h5io/h5io/chunked_list.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/nilearn/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/nilearn/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/nilearn/junifer_connectivity_measure.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/nilearn/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/brainprint.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/complexity_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/hurst_exponent.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/perm_entropy.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/range_entropy.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/range_entropy_auc.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/sample_entropy.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/ets_rss.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/falff/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/falff/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/falff/_afni_falff.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/falff/_junifer_falff.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/falff/falff_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/falff/falff_parcels.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/falff/falff_spheres.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/falff/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/functional_connectivity/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/functional_connectivity/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/functional_connectivity/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/parcel_aggregation.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/reho/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/reho/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/reho/_afni_reho.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/reho/_junifer_reho.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/reho/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/reho/reho_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/reho/reho_parcels.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/reho/reho_spheres.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/sphere_aggregation.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/temporal_snr/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/temporal_snr/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/temporal_snr/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/tests/test_brainprint.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/tests/test_ets_rss.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/tests/test_marker_utils.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/tests/test_markers_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/markers/utils.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/onthefly/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/onthefly/_brainprint.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/pipeline/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/pipeline/pipeline_component_registry.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/pipeline/pipeline_step_mixin.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/pipeline/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/pipeline/tests/test_marker_collection.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/pipeline/tests/test_pipeline_component_registry.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/pipeline/tests/test_workdir_manager.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/pipeline/update_meta_mixin.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/pipeline/utils.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/pipeline/workdir_manager.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/_temporal_filter.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/_temporal_slicer.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/confounds/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/confounds/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/confounds/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/smoothing/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/smoothing/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/smoothing/_afni_smoothing.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/smoothing/_fsl_smoothing.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/smoothing/_nilearn_smoothing.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/smoothing/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/smoothing/smoothing.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/smoothing/tests/test_smoothing.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/tests/test_preprocess_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/tests/test_temporal_filter.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/tests/test_temporal_slicer.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/warping/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/warping/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/warping/_ants_warper.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/warping/_fsl_warper.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/warping/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/warping/space_warper.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/preprocess/warping/tests/test_space_warper.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/stats.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/storage/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/storage/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/storage/base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/storage/hdf5.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/storage/pandas_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/storage/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/storage/sqlite.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/storage/tests/test_hdf5.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/storage/tests/test_pandas_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/storage/tests/test_sqlite.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/storage/tests/test_storage_base.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/storage/tests/test_utils.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/storage/utils.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/testing/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/testing/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/testing/datagrabbers.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/testing/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/testing/registry.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/testing/tests/test_testing_registry.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/testing/utils.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/tests/test_main.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/tests/test_stats.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/typing/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/utils/__init__.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/utils/__init__.pyi +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/utils/_config.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/utils/_yaml.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/utils/fs.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/utils/helpers.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/utils/logging.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/utils/py.typed +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/utils/singleton.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/utils/tests/test_config.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/utils/tests/test_fs.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/utils/tests/test_helpers.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer/utils/tests/test_logging.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer.egg-info/dependency_links.txt +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer.egg-info/entry_points.txt +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer.egg-info/requires.txt +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/junifer.egg-info/top_level.txt +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/pyproject.toml +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/setup.cfg +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/setup.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/tools/create_aomic1000_example_dataset.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/tools/create_aomicpiop1_example_dataset.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/tools/create_aomicpiop2_example_dataset.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/tools/create_bids_example_dataset.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/tools/create_bids_example_dataset_sessions.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/tools/create_hcp1200_example_dataset.py +0 -0
- {junifer-0.0.7.dev105 → junifer-0.0.7.dev121}/tox.ini +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: junifer
|
3
|
-
Version: 0.0.7.
|
3
|
+
Version: 0.0.7.dev121
|
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
|
+
:func:`.read_transform` has a new parameter ``nan_policy`` to handle NaN values when transforming feature data by `Fede Raimondo`_
|
@@ -0,0 +1 @@
|
|
1
|
+
Implement a NaN policy for :func:`.read_transform` by `Fede Raimondo`_
|
@@ -0,0 +1 @@
|
|
1
|
+
Add documentation on :class:`.ConfigManager`, dumping data object and extending data dump assets by `Synchon Mandal`_
|
@@ -0,0 +1 @@
|
|
1
|
+
Allow pipeline data object to be dumped by introducing :class:`.DataObjectDumper` and available dumping / loading assets to be extended by introducing :func:`.register_data_dump_asset` decorator by `Synchon Mandal`_
|
@@ -0,0 +1,46 @@
|
|
1
|
+
.. include:: ../links.inc
|
2
|
+
|
3
|
+
.. _adding_data_dump_assets:
|
4
|
+
|
5
|
+
Adding Data Dump Assets
|
6
|
+
=======================
|
7
|
+
|
8
|
+
``junifer`` supports dumping ``nibabel.Nifti1Image`` and ``pandas.DataFrame`` which should cover most fMRI use cases. But, in case you work with other modalities like EEG, you can register your own data dump asset.
|
9
|
+
|
10
|
+
How to add a data dump asset
|
11
|
+
----------------------------
|
12
|
+
|
13
|
+
This example shows how to create a data dump asset for ``mne.io.Raw``.
|
14
|
+
|
15
|
+
#. Check :ref:`extending junifer <extending_extension>` on how to create a
|
16
|
+
*junifer extension* if you have not done so.
|
17
|
+
#. Create the data registry in the *extension script* like so:
|
18
|
+
|
19
|
+
.. code-block:: python
|
20
|
+
|
21
|
+
from pathlib import Path
|
22
|
+
|
23
|
+
from junifer.api.decorators import register_data_dump_asset
|
24
|
+
from junifer.pipeline import BaseDataDumpAsset
|
25
|
+
|
26
|
+
import mne
|
27
|
+
|
28
|
+
@register_data_dump_asset([mne.io.Raw], [".fif", ".fif.gz"])
|
29
|
+
class RawAsset(BaseDataDumpAsset):
|
30
|
+
"""Class for ``mne.io.Raw`` dumper."""
|
31
|
+
|
32
|
+
def dump(self) -> None:
|
33
|
+
self.data.save(self.path_without_ext.with_suffix(".raw.fif.gz"))
|
34
|
+
|
35
|
+
@classmethod
|
36
|
+
def load(cls: "RawAsset", path: Path) -> mne.io.Raw:
|
37
|
+
return mne.io.Raw(path)
|
38
|
+
|
39
|
+
* :func:`.register_data_dump_asset` registers a class. The first argument is
|
40
|
+
a list of types that the class is responsible for saving and the second
|
41
|
+
argument is a list of file extensions that the class is responsible for
|
42
|
+
loading.
|
43
|
+
* Inheriting from ``junifer.pipeline.BaseDumpAsset`` takes care of the class
|
44
|
+
acting as a data dump asset.
|
45
|
+
* Method ``junifer.pipeline.BaseDumpAsset.dump`` and class method
|
46
|
+
``junifer.pipeline.BaseDumpAsset.load`` need to be implemented.
|
@@ -0,0 +1,65 @@
|
|
1
|
+
.. include:: ../links.inc
|
2
|
+
|
3
|
+
.. _configuring:
|
4
|
+
|
5
|
+
Configuring Pipeline Behaviour
|
6
|
+
==============================
|
7
|
+
|
8
|
+
It is also possible to configure some internal :ref:`pipeline <pipeline>` behaviour via :obj:`.ConfigManager`.
|
9
|
+
It can be done either via the command-line interface (CLI) or the application programming
|
10
|
+
interface (API).
|
11
|
+
|
12
|
+
To use via the CLI, one would do:
|
13
|
+
|
14
|
+
.. code-block:: bash
|
15
|
+
|
16
|
+
<CONFIG-KEY>=<CONFIG-VAL> junifer run ...
|
17
|
+
|
18
|
+
and via the API like so:
|
19
|
+
|
20
|
+
.. code-block:: python
|
21
|
+
|
22
|
+
from junifer.utils import config
|
23
|
+
|
24
|
+
# Add config
|
25
|
+
config.set(key="<config-key>", val=<config-val>)
|
26
|
+
|
27
|
+
# do feature extraction
|
28
|
+
...
|
29
|
+
|
30
|
+
# Remove config
|
31
|
+
config.delete("<config-key>")
|
32
|
+
|
33
|
+
.. _available_configurations:
|
34
|
+
|
35
|
+
Available Configurations
|
36
|
+
------------------------
|
37
|
+
|
38
|
+
.. list-table::
|
39
|
+
:widths: auto
|
40
|
+
:header-rows: 1
|
41
|
+
|
42
|
+
* - CLI Key
|
43
|
+
- API Key
|
44
|
+
- Value
|
45
|
+
- Description
|
46
|
+
* - ``JUNIFER_DATA_LOCATION``
|
47
|
+
- ``data.location``
|
48
|
+
- str
|
49
|
+
- Alternative location for ``junifer-data``
|
50
|
+
* - ``JUNIFER_DATAGRABBER_SKIPIDCHECK``
|
51
|
+
- ``datagrabber.skipidcheck``
|
52
|
+
- bool
|
53
|
+
- Skip DataLad-based DataGrabber's ID check
|
54
|
+
* - ``JUNIFER_DATAGRABBER_SKIPDIRTYCHECK``
|
55
|
+
- ``datagrabber.skipdirtycheck``
|
56
|
+
- bool
|
57
|
+
- Skip Git "dirty" check for a DataLad dataset clone of a DataGrabber
|
58
|
+
* - ``JUNIFER_PREPROCESSING_DUMP_LOCATION``
|
59
|
+
- ``preprocessing.dump.location``
|
60
|
+
- str
|
61
|
+
- Dump location of pre-processed data for debugging purposes
|
62
|
+
* - ``JUNIFER_PREPROCESSING_DUMP_GRANULARITY``
|
63
|
+
- ``preprocessing.dump.granularity``
|
64
|
+
- "full" or "final"
|
65
|
+
- Dump all pre-processing steps or just the final pre-processed data
|
@@ -0,0 +1,18 @@
|
|
1
|
+
.. include:: ../links.inc
|
2
|
+
|
3
|
+
.. _dumping:
|
4
|
+
|
5
|
+
Dumping Pipeline Data
|
6
|
+
=====================
|
7
|
+
|
8
|
+
It is usually not required to check the :ref:`data object <data_object>` but
|
9
|
+
for debugging purposes one can do that. Since, there is no direct way to interact
|
10
|
+
with it, ``junifer`` provides a way to dump the object before, in between and / or after
|
11
|
+
pre-processing. It is controlled by the ``JUNIFER_PREPROCESSING_DUMP_LOCATION`` and
|
12
|
+
``JUNIFER_PREPROCESSING_DUMP_GRANULARITY`` :ref:`configuration options <available_configurations>`.
|
13
|
+
|
14
|
+
``junifer`` dumps the ``"data"`` attribute of the data object as proper files in their respective formats,
|
15
|
+
for example, ``nibabel.Nifti1Image`` gets dumped as a ``.nii.gz`` file. As of now, ``junifer`` can dump
|
16
|
+
``nibabel.Nifti1Image`` and ``pandas.DataFrame`` (confound files) file formats. In case you
|
17
|
+
:ref:`add custom data types <adding_data_types>` which support different file formats, you can create and
|
18
|
+
register a :ref:`custom dumper <adding_data_dump_assets>`.
|
@@ -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.dev121'
|
21
|
+
__version_tuple__ = version_tuple = (0, 0, 7, 'dev121')
|
@@ -6,8 +6,13 @@
|
|
6
6
|
# License: AGPL
|
7
7
|
|
8
8
|
from ..data import DataDispatcher
|
9
|
-
from ..pipeline import
|
9
|
+
from ..pipeline import (
|
10
|
+
AssetDumperDispatcher,
|
11
|
+
AssetLoaderDispatcher,
|
12
|
+
PipelineComponentRegistry,
|
13
|
+
)
|
10
14
|
from ..typing import (
|
15
|
+
DataDumpAssetLike,
|
11
16
|
DataGrabberLike,
|
12
17
|
DataRegistryLike,
|
13
18
|
MarkerLike,
|
@@ -17,6 +22,7 @@ from ..typing import (
|
|
17
22
|
|
18
23
|
|
19
24
|
__all__ = [
|
25
|
+
"register_data_dump_asset",
|
20
26
|
"register_data_registry",
|
21
27
|
"register_datagrabber",
|
22
28
|
"register_datareader",
|
@@ -184,3 +190,49 @@ def register_data_registry(name: str) -> DataRegistryLike:
|
|
184
190
|
return klass
|
185
191
|
|
186
192
|
return decorator
|
193
|
+
|
194
|
+
|
195
|
+
def register_data_dump_asset(
|
196
|
+
types: list[type], exts: list[str]
|
197
|
+
) -> DataDumpAssetLike:
|
198
|
+
"""Asset registration decorator.
|
199
|
+
|
200
|
+
Registers the data dump asset for ``types`` with ``exts``.
|
201
|
+
|
202
|
+
Parameters
|
203
|
+
----------
|
204
|
+
types : list of class
|
205
|
+
The classes to dump.
|
206
|
+
exts : list of str
|
207
|
+
The extensions to load.
|
208
|
+
|
209
|
+
Returns
|
210
|
+
-------
|
211
|
+
class
|
212
|
+
The unmodified input class.
|
213
|
+
|
214
|
+
"""
|
215
|
+
|
216
|
+
def decorator(klass: DataDumpAssetLike) -> DataDumpAssetLike:
|
217
|
+
"""Actual decorator.
|
218
|
+
|
219
|
+
Parameters
|
220
|
+
----------
|
221
|
+
klass : class
|
222
|
+
The class of the data dump asset to register.
|
223
|
+
|
224
|
+
Returns
|
225
|
+
-------
|
226
|
+
class
|
227
|
+
The unmodified input class.
|
228
|
+
|
229
|
+
"""
|
230
|
+
# Add asset dumper
|
231
|
+
for t in types:
|
232
|
+
AssetDumperDispatcher()[t] = klass
|
233
|
+
# Add asset loader
|
234
|
+
for e in exts:
|
235
|
+
AssetLoaderDispatcher()[e] = klass
|
236
|
+
return klass
|
237
|
+
|
238
|
+
return decorator
|
@@ -0,0 +1,78 @@
|
|
1
|
+
"""Provide tests for public decorators."""
|
2
|
+
|
3
|
+
# Authors: Synchon Mandal <s.mandal@fz-juelich.de>
|
4
|
+
# License: AGPL
|
5
|
+
|
6
|
+
import pickle
|
7
|
+
|
8
|
+
from junifer.api.decorators import (
|
9
|
+
register_data_dump_asset,
|
10
|
+
register_data_registry,
|
11
|
+
)
|
12
|
+
from junifer.data import BasePipelineDataRegistry, DataDispatcher
|
13
|
+
from junifer.pipeline import (
|
14
|
+
AssetDumperDispatcher,
|
15
|
+
AssetLoaderDispatcher,
|
16
|
+
BaseDataDumpAsset,
|
17
|
+
)
|
18
|
+
|
19
|
+
|
20
|
+
def test_register_data_registry() -> None:
|
21
|
+
"""Test data registry registration."""
|
22
|
+
|
23
|
+
@register_data_registry("dumb")
|
24
|
+
class DumDum(BasePipelineDataRegistry):
|
25
|
+
def __init__(self):
|
26
|
+
super().__init__()
|
27
|
+
|
28
|
+
def register(self):
|
29
|
+
pass
|
30
|
+
|
31
|
+
def deregister(self):
|
32
|
+
pass
|
33
|
+
|
34
|
+
def load(self):
|
35
|
+
pass
|
36
|
+
|
37
|
+
def get(self):
|
38
|
+
pass
|
39
|
+
|
40
|
+
assert "dumb" in DataDispatcher()
|
41
|
+
_ = DataDispatcher().pop("dumb")
|
42
|
+
assert "dumb" not in DataDispatcher()
|
43
|
+
|
44
|
+
|
45
|
+
def test_register_data_dump_asset() -> None:
|
46
|
+
"""Test data dump asset registration."""
|
47
|
+
|
48
|
+
class Int(int): ...
|
49
|
+
|
50
|
+
class Float(float): ...
|
51
|
+
|
52
|
+
@register_data_dump_asset([Int, Float], [".int", ".float"])
|
53
|
+
class DumAsset(BaseDataDumpAsset):
|
54
|
+
def dump(self):
|
55
|
+
suffix = ""
|
56
|
+
if isinstance(self.data, Int):
|
57
|
+
suffix = ".int"
|
58
|
+
else:
|
59
|
+
suffix = ".float"
|
60
|
+
pickle.dump(self.data, self.path_without_ext.with_suffix(suffix))
|
61
|
+
|
62
|
+
@classmethod
|
63
|
+
def load(cls, path):
|
64
|
+
return pickle.load(path)
|
65
|
+
|
66
|
+
assert Int in AssetDumperDispatcher()
|
67
|
+
assert Float in AssetDumperDispatcher()
|
68
|
+
_ = AssetDumperDispatcher().pop(Int)
|
69
|
+
_ = AssetDumperDispatcher().pop(Float)
|
70
|
+
assert Int not in AssetDumperDispatcher()
|
71
|
+
assert Float not in AssetDumperDispatcher()
|
72
|
+
|
73
|
+
assert ".int" in AssetLoaderDispatcher()
|
74
|
+
assert ".float" in AssetLoaderDispatcher()
|
75
|
+
_ = AssetLoaderDispatcher().pop(".int")
|
76
|
+
_ = AssetLoaderDispatcher().pop(".float")
|
77
|
+
assert ".int" not in AssetLoaderDispatcher()
|
78
|
+
assert ".float" not in AssetLoaderDispatcher()
|
@@ -5,6 +5,7 @@
|
|
5
5
|
|
6
6
|
from typing import Optional
|
7
7
|
|
8
|
+
import numpy as np
|
8
9
|
import pandas as pd
|
9
10
|
|
10
11
|
from ..typing import StorageLike
|
@@ -19,6 +20,7 @@ def read_transform(
|
|
19
20
|
transform: str,
|
20
21
|
feature_name: Optional[str] = None,
|
21
22
|
feature_md5: Optional[str] = None,
|
23
|
+
nan_policy: Optional[str] = "bypass",
|
22
24
|
transform_args: Optional[tuple] = None,
|
23
25
|
transform_kw_args: Optional[dict] = None,
|
24
26
|
) -> pd.DataFrame:
|
@@ -35,6 +37,16 @@ def read_transform(
|
|
35
37
|
Name of the feature to read (default None).
|
36
38
|
feature_md5 : str, optional
|
37
39
|
MD5 hash of the feature to read (default None).
|
40
|
+
nan_policy : str, optional
|
41
|
+
The policy to handle NaN values (default "ignore").
|
42
|
+
Options are:
|
43
|
+
|
44
|
+
* "bypass": Do nothing and pass NaN values to the transform function.
|
45
|
+
* "drop_element": Drop (skip) elements with NaN values.
|
46
|
+
* "drop_rows": Drop (skip) rows with NaN values.
|
47
|
+
* "drop_columns": Drop (skip) columns with NaN values.
|
48
|
+
* "drop_symmetric": Drop (skip) symmetric pairs with NaN values.
|
49
|
+
|
38
50
|
transform_args : tuple, optional
|
39
51
|
The positional arguments for the callable of ``transform``
|
40
52
|
(default None).
|
@@ -47,6 +59,18 @@ def read_transform(
|
|
47
59
|
pandas.DataFrame
|
48
60
|
The transformed feature as a dataframe.
|
49
61
|
|
62
|
+
Raises
|
63
|
+
------
|
64
|
+
ValueError
|
65
|
+
If ``nan_policy`` is invalid or
|
66
|
+
if *package* is invalid.
|
67
|
+
RuntimeError
|
68
|
+
If *package* is ``bctpy`` and stored data kind is not ``matrix``.
|
69
|
+
ImportError
|
70
|
+
If ``bctpy`` cannot be imported.
|
71
|
+
AttributeError
|
72
|
+
If *function* to be invoked in invalid.
|
73
|
+
|
50
74
|
Notes
|
51
75
|
-----
|
52
76
|
This function has been only tested for:
|
@@ -63,6 +87,18 @@ def read_transform(
|
|
63
87
|
transform_args = transform_args or ()
|
64
88
|
transform_kw_args = transform_kw_args or {}
|
65
89
|
|
90
|
+
if nan_policy not in [
|
91
|
+
"bypass",
|
92
|
+
"drop_element",
|
93
|
+
"drop_rows",
|
94
|
+
"drop_columns",
|
95
|
+
"drop_symmetric",
|
96
|
+
]:
|
97
|
+
raise_error(
|
98
|
+
f"Unknown nan_policy: {nan_policy}",
|
99
|
+
klass=ValueError,
|
100
|
+
)
|
101
|
+
|
66
102
|
# Read storage
|
67
103
|
stored_data = storage.read(
|
68
104
|
feature_name=feature_name, feature_md5=feature_md5
|
@@ -106,22 +142,52 @@ def read_transform(
|
|
106
142
|
except AttributeError as err:
|
107
143
|
raise_error(msg=str(err), klass=AttributeError)
|
108
144
|
|
109
|
-
# Apply function and store
|
145
|
+
# Apply function and store element-wise
|
110
146
|
output_list = []
|
147
|
+
element_list = []
|
111
148
|
logger.debug(
|
112
149
|
f"Computing '{package}.{func_str}' for feature "
|
113
150
|
f"{feature_name or feature_md5} ..."
|
114
151
|
)
|
115
|
-
for
|
152
|
+
for i_element, element in enumerate(stored_data["element"]):
|
153
|
+
t_data = stored_data["data"][:, :, i_element]
|
154
|
+
has_nan = np.isnan(np.min(t_data))
|
155
|
+
if nan_policy == "drop_element" and has_nan:
|
156
|
+
logger.debug(
|
157
|
+
f"Skipping element {element} due to NaN values ..."
|
158
|
+
)
|
159
|
+
continue
|
160
|
+
elif nan_policy == "drop_rows" and has_nan:
|
161
|
+
logger.debug(
|
162
|
+
f"Skipping rows with NaN values in element {element} ..."
|
163
|
+
)
|
164
|
+
t_data = t_data[~np.isnan(t_data).any(axis=1)]
|
165
|
+
elif nan_policy == "drop_columns" and has_nan:
|
166
|
+
logger.debug(
|
167
|
+
f"Skipping columns with NaN values in element {element} "
|
168
|
+
"..."
|
169
|
+
)
|
170
|
+
t_data = t_data[:, ~np.isnan(t_data).any(axis=0)]
|
171
|
+
elif nan_policy == "drop_symmetric":
|
172
|
+
logger.debug(
|
173
|
+
f"Skipping pairs of rows/columns with NaN values in "
|
174
|
+
f"element {element}..."
|
175
|
+
)
|
176
|
+
good_rows = ~np.isnan(t_data).any(axis=1)
|
177
|
+
good_columns = ~np.isnan(t_data).any(axis=0)
|
178
|
+
good_idx = np.logical_and(good_rows, good_columns)
|
179
|
+
t_data = t_data[good_idx][:, good_idx]
|
180
|
+
|
116
181
|
output = func(
|
117
|
-
|
182
|
+
t_data,
|
118
183
|
*transform_args,
|
119
184
|
**transform_kw_args,
|
120
185
|
)
|
121
186
|
output_list.append(output)
|
187
|
+
element_list.append(element)
|
122
188
|
|
123
189
|
# Create dataframe for index
|
124
|
-
idx_df = pd.DataFrame(data=
|
190
|
+
idx_df = pd.DataFrame(data=element_list)
|
125
191
|
# Create multiindex from dataframe
|
126
192
|
logger.debug(
|
127
193
|
"Generating pandas.MultiIndex for feature "
|
@@ -64,6 +64,36 @@ def matrix_storage(tmp_path: Path) -> HDF5FeatureStorage:
|
|
64
64
|
return storage
|
65
65
|
|
66
66
|
|
67
|
+
@pytest.fixture
|
68
|
+
def matrix_storage_with_nan(tmp_path: Path) -> HDF5FeatureStorage:
|
69
|
+
"""Return a HDF5FeatureStorage with matrix data.
|
70
|
+
|
71
|
+
Parameters
|
72
|
+
----------
|
73
|
+
tmp_path : pathlib.Path
|
74
|
+
The path to the test directory.
|
75
|
+
|
76
|
+
"""
|
77
|
+
storage = HDF5FeatureStorage(tmp_path / "matrix_store_nan.hdf5")
|
78
|
+
data = np.arange(36).reshape(3, 3, 4).astype(float)
|
79
|
+
data[1, 1, 2] = np.nan
|
80
|
+
data[1, 2, 2] = np.nan
|
81
|
+
for i in range(4):
|
82
|
+
storage.store(
|
83
|
+
kind="matrix",
|
84
|
+
meta={
|
85
|
+
"element": {"subject": f"test{i + 1}"},
|
86
|
+
"dependencies": [],
|
87
|
+
"marker": {"name": "matrix"},
|
88
|
+
"type": "BOLD",
|
89
|
+
},
|
90
|
+
data=data[:, :, i],
|
91
|
+
col_names=["f1", "f2", "f3"],
|
92
|
+
row_names=["g1", "g2", "g3"],
|
93
|
+
)
|
94
|
+
return storage
|
95
|
+
|
96
|
+
|
67
97
|
def test_incorrect_package(matrix_storage: HDF5FeatureStorage) -> None:
|
68
98
|
"""Test error check for incorrect package name.
|
69
99
|
|
@@ -176,3 +206,57 @@ def test_bctpy_function(
|
|
176
206
|
)
|
177
207
|
assert "Computing" in caplog.text
|
178
208
|
assert "Generating" in caplog.text
|
209
|
+
|
210
|
+
|
211
|
+
@pytest.mark.parametrize(
|
212
|
+
"nan_policy, error_msg",
|
213
|
+
[
|
214
|
+
("drop_element", None),
|
215
|
+
("drop_rows", "square"),
|
216
|
+
("drop_columns", "square"),
|
217
|
+
("drop_symmetric", None),
|
218
|
+
("bypass", "NaNs"),
|
219
|
+
("wrong", "Unknown"),
|
220
|
+
],
|
221
|
+
)
|
222
|
+
def test_bctpy_nans(
|
223
|
+
matrix_storage_with_nan: HDF5FeatureStorage,
|
224
|
+
caplog: pytest.LogCaptureFixture,
|
225
|
+
nan_policy: str,
|
226
|
+
error_msg: str,
|
227
|
+
) -> None:
|
228
|
+
"""Test working function of bctpy.
|
229
|
+
|
230
|
+
Parameters
|
231
|
+
----------
|
232
|
+
matrix_storage_with_nan : HDF5FeatureStorage
|
233
|
+
The HDF5FeatureStorage with matrix data, as fixture.
|
234
|
+
caplog : pytest.LogCaptureFixture
|
235
|
+
The pytest.LogCaptureFixture object.
|
236
|
+
nan_policy : str
|
237
|
+
The NAN policy to test.
|
238
|
+
error_msg : str
|
239
|
+
The expected error message snippet. If None, no error should be raised.
|
240
|
+
|
241
|
+
"""
|
242
|
+
# Skip test if import fails
|
243
|
+
pytest.importorskip("bct")
|
244
|
+
|
245
|
+
with caplog.at_level(logging.DEBUG):
|
246
|
+
if error_msg is None:
|
247
|
+
read_transform(
|
248
|
+
storage=matrix_storage_with_nan, # type: ignore
|
249
|
+
feature_name="BOLD_matrix",
|
250
|
+
transform="bctpy_eigenvector_centrality_und",
|
251
|
+
nan_policy=nan_policy,
|
252
|
+
)
|
253
|
+
assert "Computing" in caplog.text
|
254
|
+
assert "Generating" in caplog.text
|
255
|
+
else:
|
256
|
+
with pytest.raises(ValueError, match=error_msg):
|
257
|
+
read_transform(
|
258
|
+
storage=matrix_storage_with_nan, # type: ignore
|
259
|
+
feature_name="BOLD_matrix",
|
260
|
+
transform="bctpy_eigenvector_centrality_und",
|
261
|
+
nan_policy=nan_policy,
|
262
|
+
)
|
@@ -1,4 +1,8 @@
|
|
1
1
|
__all__ = [
|
2
|
+
"AssetDumperDispatcher",
|
3
|
+
"AssetLoaderDispatcher",
|
4
|
+
"BaseDataDumpAsset",
|
5
|
+
"DataObjectDumper",
|
2
6
|
"PipelineComponentRegistry",
|
3
7
|
"PipelineStepMixin",
|
4
8
|
"UpdateMetaMixin",
|
@@ -6,6 +10,12 @@ __all__ = [
|
|
6
10
|
"MarkerCollection",
|
7
11
|
]
|
8
12
|
|
13
|
+
from ._data_object_dumper import (
|
14
|
+
AssetDumperDispatcher,
|
15
|
+
AssetLoaderDispatcher,
|
16
|
+
BaseDataDumpAsset,
|
17
|
+
DataObjectDumper,
|
18
|
+
)
|
9
19
|
from .pipeline_component_registry import PipelineComponentRegistry
|
10
20
|
from .pipeline_step_mixin import PipelineStepMixin
|
11
21
|
from .update_meta_mixin import UpdateMetaMixin
|