junifer 0.0.8.dev335__tar.gz → 0.0.8.dev339__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.8.dev335/junifer.egg-info → junifer-0.0.8.dev339}/PKG-INFO +1 -1
- junifer-0.0.8.dev339/docs/changes/newsfragments/533.enh +1 -0
- junifer-0.0.8.dev339/docs/changes/newsfragments/533.enh.1 +1 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/_version.py +3 -3
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/_afni_falff.py +12 -2
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/_junifer_falff.py +19 -7
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/falff_base.py +23 -3
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/falff_maps.py +1 -1
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/falff_parcels.py +1 -1
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/falff_spheres.py +1 -1
- junifer-0.0.8.dev339/junifer/markers/falff/tests/test_falff_mask.py +99 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/reho_base.py +3 -40
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/tests/test_marker_utils.py +40 -1
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/utils.py +44 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/tests/test_workdir_manager.py +24 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/workdir_manager.py +23 -13
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/_temporal_filter.py +4 -2
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/_temporal_slicer.py +4 -2
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/confounds/fmriprep_confound_remover.py +4 -2
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +7 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/smoothing/_nilearn_smoothing.py +4 -1
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/smoothing/tests/test_smoothing.py +6 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/tests/test_temporal_filter.py +6 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/tests/test_temporal_slicer.py +6 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339/junifer.egg-info}/PKG-INFO +1 -1
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer.egg-info/SOURCES.txt +3 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer.egg-info/scm_file_list.json +3 -0
- junifer-0.0.8.dev339/junifer.egg-info/scm_version.json +8 -0
- junifer-0.0.8.dev335/junifer.egg-info/scm_version.json +0 -8
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.dockerignore +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/dependabot.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/pull_request_template.md +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/workflows/check-stale.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/workflows/ci.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/workflows/docker-publish.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/workflows/docs-preview.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/workflows/docs.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/workflows/lint.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/workflows/publish.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.gitignore +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.gitmodules +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.pre-commit-config.yaml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.python-version +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/AUTHORS.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/Dockerfile +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/Dockerfile-ci +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/LICENSE.md +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/README.md +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/codecov.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/conda-env.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/Makefile +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/_static/css/custom.css +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/_static/css/version_selector.css +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/_static/js/custom.js +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/_templates/versions.html +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/api.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/cli.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/configs.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/data.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/datagrabbers.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/datareaders.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/index.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/markers.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/nilearn.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/onthefly.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/pipeline.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/preprocessing.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/stats.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/storage.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/testing.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/utils.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/builtin.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/contributors.inc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/.gitignore +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/239.enh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/364.doc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/364.enh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/364.feature +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/474.misc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/482.bugfix +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/492.bugfix +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/499.enh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/502.bugfix +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/503.enh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/504.bugfix +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/504.misc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/509.enh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/510.bugfix +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/511.bugfix +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/511.bugfix.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/511.change +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/511.enh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/511.enh.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/511.feature +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/511.misc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/511.misc.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/513.doc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/513.misc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/514.bugfix +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/514.bugfix.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/514.enh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/515.doc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/515.enh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/515.enh.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/515.misc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/515.misc.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/516.bugfix +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/516.bugfix.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/516.bugfix.2 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/516.change +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/516.change.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/516.misc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.bugfix +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.bugfix.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.bugfix.2 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.bugfix.3 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.bugfix.4 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.bugfix.5 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.bugfix.6 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.change +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.doc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.misc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.misc.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.misc.2 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.misc.3 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.removal +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/521.bugfix +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/522.bugfix +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/522.enh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/523.misc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.bugfix +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.bugfix.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.change +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.change.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.change.2 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.doc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.enh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.feature +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.feature.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.bugfix +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.bugfix.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.change +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.change.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.change.2 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.change.3 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.change.4 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.doc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.enh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.feature +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/528.bugfix +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/528.change +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/528.doc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/529.bugfix +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/529.bugfix.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/529.bugfix.2 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/529.bugfix.3 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/529.doc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/529.enh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/530.change +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/530.enh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/530.enh.1 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/531.enh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/conf.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/contribution.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/confounds_format.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/coordinates.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/data_dump_asset.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/data_registries.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/data_types.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/datagrabber.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/dependencies.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/extension.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/index.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/logging.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/maps.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/marker.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/masks.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/parcellations.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/plugins.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/preprocessor.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/faq.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/help.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/images/junifer_logo.png +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/index.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/installation.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/internals.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/links.inc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/maintaining.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/poly.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/poly_files/patches/version_banner.html +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/poly_files/patches/versions.html +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/poly_files/templates/index.html +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/starting.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/understanding/data.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/understanding/datagrabber.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/understanding/datareader.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/understanding/index.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/understanding/marker.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/understanding/pipeline.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/understanding/preprocess.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/understanding/storage.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/using/codeless.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/using/configuring.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/using/dumping.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/using/index.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/using/masks.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/using/queueing.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/using/running.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/whats_new.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/README.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/norun_hcpfc_pearson.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/norun_ukbvm_gmd.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/run_compute_parcel_mean.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/run_datagrabber_bids_datalad.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/run_ets_rss_marker.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/run_junifer_julearn.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/run_run_gmd_mean.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/yamls/gmd_mean.yaml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/yamls/partly_cloudy_agg_mean_tian.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/yamls/ukb_gmd_mean.yaml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/ignore_words.txt +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/decorators.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/functions.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/queue_context/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/queue_context/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/queue_context/gnu_parallel_local_adapter.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/queue_context/htcondor_adapter.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/queue_context/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/queue_context/queue_context_adapter.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/queue_context/tests/test_htcondor_adapter.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/afni/3dRSFC +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/afni/3dReHo +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/afni/afni +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/afni/run_afni_docker.sh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/ants/ResampleImage +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/ants/antsApplyTransforms +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/ants/run_ants_docker.sh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/freesurfer/mri_binarize +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/freesurfer/mri_mc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/freesurfer/mri_pretess +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/freesurfer/mris_convert +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/freesurfer/run_freesurfer_docker.sh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/fsl/applywarp +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/fsl/flirt +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/fsl/img2imgcoord +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/fsl/std2imgcoord +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/run_conda.bash +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/run_conda.zsh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/run_venv.bash +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/run_venv.zsh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/tests/test_decorators.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/tests/test_functions.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/cli.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/parser.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/tests/data/gmd_mean.yaml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/tests/data/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/tests/test_cli.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/tests/test_cli_utils.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/utils.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/conftest.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/_dispatch.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/coordinates/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/coordinates/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/coordinates/_ants_coordinates_warper.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/coordinates/_coordinates.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/coordinates/_fsl_coordinates_warper.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/coordinates/tests/test_coordinates.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/coordinates/tests/test_coordinates_names.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/maps/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/maps/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/maps/_ants_maps_warper.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/maps/_fsl_maps_warper.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/maps/_maps.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/maps/tests/test_maps.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/masks/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/masks/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/masks/_ants_mask_warper.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/masks/_fsl_mask_warper.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/masks/_masks.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/masks/tests/test_masks.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/parcellations/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/parcellations/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/parcellations/_ants_parcellation_warper.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/parcellations/_fsl_parcellation_warper.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/parcellations/_parcellations.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/parcellations/tests/test_parcellations.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/pipeline_data_registry_base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/template_spaces.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/tests/test_data_utils.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/tests/test_dispatch.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/tests/test_template_spaces.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/utils.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/_types.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/id1000.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/piop1.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/piop2.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/datalad_base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/dmcc13_benchmark.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/hcp1200/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/hcp1200/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/hcp1200/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/multiple.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/pattern.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/pattern_datalad.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/pattern_validation_mixin.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/tests/test_base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/tests/test_multiple.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/tests/test_pattern.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/tests/test_pattern_validation_mixin.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datareader/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datareader/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datareader/default.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datareader/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datareader/tests/test_default_reader.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.codecov.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.codespellignore +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/documentation.md +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/questions-help-support.md +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/dependabot.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/workflows/build.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/workflows/code-style.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/workflows/doc.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/workflows/publish.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/workflows/pytest.yml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.gitignore +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/LICENSE +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/README.md +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/_version.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/asymmetry.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/brainprint.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/cli/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/cli/help_text.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/cli/parser.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/cli/utils.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/commands/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/commands/sys_info.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/surfaces.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/utils/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/utils/_config.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/utils/tests/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/utils/tests/test_config.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/utils/utils.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/Makefile +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/_static/.gitkeep +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/_templates/autosummary/class.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/_templates/autosummary/function.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/_templates/autosummary/module.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/api/index.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/conf.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/index.rst +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/links.inc +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/make.bat +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/references.bib +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/pyproject.toml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/setup.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/nilearn/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/nilearn/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/nilearn/junifer_connectivity_measure.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/nilearn/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/brainprint.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/complexity_base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/hurst_exponent.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/perm_entropy.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/range_entropy.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/range_entropy_auc.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/sample_entropy.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_complexity_registry.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/ets_rss.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/tests/test_falff_maps.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/edge_functional_connectivity_maps.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/functional_connectivity_maps.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_maps.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_maps.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/maps_aggregation.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/parcel_aggregation.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/_afni_reho.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/_junifer_reho.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/reho_maps.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/reho_parcels.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/reho_spheres.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/tests/test_junifer_reho.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/tests/test_reho_maps.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/sphere_aggregation.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/temporal_snr_maps.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/tests/test_temporal_snr_maps.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/tests/test_brainprint.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/tests/test_ets_rss.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/tests/test_lost_regions.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/tests/test_maps_aggregation.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/tests/test_markers_base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/onthefly/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/onthefly/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/onthefly/_brainprint.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/onthefly/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/onthefly/read_transform.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/onthefly/tests/test_read_transform.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/_data_object_dumper.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/marker_collection.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/pipeline_component_registry.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/pipeline_step_mixin.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/tests/test_data_object_dumper.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/tests/test_marker_collection.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/tests/test_pipeline_component_registry.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/update_meta_mixin.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/utils.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/confounds/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/confounds/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/confounds/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/smoothing/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/smoothing/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/smoothing/_afni_smoothing.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/smoothing/_fsl_smoothing.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/smoothing/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/smoothing/smoothing.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/tests/test_preprocess_base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/_ants_warper.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/_fsl_warper.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/_utils.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/space_warper.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/tests/test_space_warper.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/tests/test_warping_utils.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/stats.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/hdf5.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/pandas_base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/sqlite.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/tests/data/collected_h5io_fork.hdf5 +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/tests/test_hdf5.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/tests/test_pandas_base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/tests/test_repeated_storage.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/tests/test_sqlite.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/tests/test_storage_base.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/tests/test_utils.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/utils.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/datagrabbers.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/registry.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/tests/test_adhdtesting_datagrabber.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/tests/test_testing_registry.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/tests/test_testing_utils.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/tests/test_uclacnpvbmtesting_datagrabber.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/utils.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/tests/test_main.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/tests/test_stats.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/typing/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/typing/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/typing/_typing.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/typing/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/__init__.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/__init__.pyi +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/_config.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/_yaml.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/fs.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/helpers.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/logging.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/py.typed +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/singleton.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/tests/test_config.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/tests/test_fs.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/tests/test_helpers.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/tests/test_logging.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer.egg-info/dependency_links.txt +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer.egg-info/entry_points.txt +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer.egg-info/requires.txt +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer.egg-info/top_level.txt +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/justfile +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/pyproject.toml +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/scripts/start.sh +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/setup.cfg +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/setup.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/tools/create_aomic1000_example_dataset.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/tools/create_aomicpiop1_example_dataset.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/tools/create_aomicpiop2_example_dataset.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/tools/create_bids_example_dataset.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/tools/create_bids_example_dataset_sessions.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/tools/create_hcp1200_example_dataset.py +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/tox.ini +0 -0
- {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: junifer
|
|
3
|
-
Version: 0.0.8.
|
|
3
|
+
Version: 0.0.8.dev339
|
|
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
|
+
Restrict the ALFF and fALFF computation of :class:`.ALFFParcels`, :class:`.ALFFSpheres` and :class:`.ALFFMaps` to the voxels in their ``masks`` (with ``-mask`` for AFNI's ``3dRSFC``), as for ReHo, reducing the memory and time (e.g., from 14.5 GB to 9.4 GB and from 7 to 1 minutes for 1200 volumes with AFNI), and do not write the bandpassed time series with ``3dRSFC`` (``-no_rs_out``), as only the parameters are used by `Fede Raimondo`_
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Keep the data of :class:`.fMRIPrepConfoundRemover`, :class:`.TemporalFilter`, :class:`.TemporalSlicer` and :class:`.Smoothing` (with nilearn) in the saved file (memory-mapped) instead of in memory, as for the other preprocessors, releasing its memory during the next steps of the pipeline (e.g., 5 GB for 1200 volumes while running AFNI) by `Fede Raimondo`_
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.0.8.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 0, 8, '
|
|
21
|
+
__version__ = version = '0.0.8.dev339'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 0, 8, 'dev339')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gd12ff17f7'
|
|
@@ -57,6 +57,7 @@ class AFNIALFF(metaclass=Singleton):
|
|
|
57
57
|
highpass: float,
|
|
58
58
|
lowpass: float,
|
|
59
59
|
tr: float | None,
|
|
60
|
+
mask_path: Path | None = None,
|
|
60
61
|
) -> tuple["Nifti1Image", "Nifti1Image", Path, Path]:
|
|
61
62
|
"""Compute ALFF + fALFF map.
|
|
62
63
|
|
|
@@ -70,6 +71,10 @@ class AFNIALFF(metaclass=Singleton):
|
|
|
70
71
|
Lowpass cutoff frequency.
|
|
71
72
|
tr : positive float, optional
|
|
72
73
|
The Repetition Time of the BOLD data.
|
|
74
|
+
mask_path : pathlib.Path, optional
|
|
75
|
+
Path to the mask to restrict the computation to. The voxels
|
|
76
|
+
outside the mask are set to 0. If None, all the voxels are used
|
|
77
|
+
(default None).
|
|
73
78
|
|
|
74
79
|
Returns
|
|
75
80
|
-------
|
|
@@ -90,18 +95,23 @@ class AFNIALFF(metaclass=Singleton):
|
|
|
90
95
|
prefix="afni_lff"
|
|
91
96
|
)
|
|
92
97
|
|
|
93
|
-
# Set 3dRSFC command
|
|
98
|
+
# Set 3dRSFC command; only the parameters are needed, not the
|
|
99
|
+
# bandpassed time series (-no_rs_out)
|
|
94
100
|
lff_out_path_prefix = element_tempdir / "output"
|
|
95
101
|
bp_cmd = [
|
|
96
102
|
"3dRSFC",
|
|
97
103
|
f"-prefix {lff_out_path_prefix.resolve()}",
|
|
98
104
|
f"-input {input_path.resolve()}",
|
|
99
105
|
f"-band {highpass} {lowpass}",
|
|
100
|
-
"-no_rsfa -nosat -nodetrend",
|
|
106
|
+
"-no_rsfa -nosat -nodetrend -no_rs_out",
|
|
101
107
|
]
|
|
102
108
|
# Check tr
|
|
103
109
|
if tr is not None:
|
|
104
110
|
bp_cmd.append(f"-dt {tr}")
|
|
111
|
+
# Restrict the computation to the mask, which reduces the memory and
|
|
112
|
+
# time used by 3dRSFC
|
|
113
|
+
if mask_path is not None:
|
|
114
|
+
bp_cmd.append(f"-mask {mask_path.resolve()}")
|
|
105
115
|
# Call 3dRSFC
|
|
106
116
|
run_ext_cmd(name="3dRSFC", cmd=bp_cmd)
|
|
107
117
|
|
|
@@ -50,6 +50,7 @@ class JuniferALFF(metaclass=Singleton):
|
|
|
50
50
|
highpass: float,
|
|
51
51
|
lowpass: float,
|
|
52
52
|
tr: float | None,
|
|
53
|
+
mask_path: Path | None = None,
|
|
53
54
|
) -> tuple["Nifti1Image", "Nifti1Image", Path, Path]:
|
|
54
55
|
"""Compute ALFF + fALFF map.
|
|
55
56
|
|
|
@@ -63,6 +64,10 @@ class JuniferALFF(metaclass=Singleton):
|
|
|
63
64
|
Lowpass cutoff frequency.
|
|
64
65
|
tr : positive float, optional
|
|
65
66
|
The Repetition Time of the BOLD data.
|
|
67
|
+
mask_path : pathlib.Path, optional
|
|
68
|
+
Path to the mask to restrict the computation to. The voxels
|
|
69
|
+
outside the mask are set to 0. If None, all the voxels are used
|
|
70
|
+
(default None).
|
|
66
71
|
|
|
67
72
|
Returns
|
|
68
73
|
-------
|
|
@@ -102,15 +107,22 @@ class JuniferALFF(metaclass=Singleton):
|
|
|
102
107
|
f"nyquist = {fft_freqs[-1]}"
|
|
103
108
|
)
|
|
104
109
|
|
|
105
|
-
# Process voxels in
|
|
110
|
+
# Process voxels (only the ones in the mask, if any) in chunks to
|
|
111
|
+
# bound FFT memory
|
|
106
112
|
flat = niimg_data.reshape(-1, n_timepoints)
|
|
107
|
-
|
|
108
|
-
|
|
113
|
+
if mask_path is not None:
|
|
114
|
+
mask_data = np.squeeze(np.asarray(nib.load(mask_path).dataobj))
|
|
115
|
+
voxels = np.flatnonzero(mask_data.reshape(-1) != 0)
|
|
116
|
+
else:
|
|
117
|
+
voxels = np.arange(flat.shape[0])
|
|
118
|
+
numerator = np.zeros(flat.shape[0])
|
|
119
|
+
denominator = np.zeros(flat.shape[0])
|
|
109
120
|
chunk = 20_000
|
|
110
|
-
for start in range(0,
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
121
|
+
for start in range(0, len(voxels), chunk):
|
|
122
|
+
t_voxels = voxels[start : start + chunk]
|
|
123
|
+
amp = np.abs(sp.fft.rfft(flat[t_voxels], axis=-1))
|
|
124
|
+
denominator[t_voxels] = amp @ weights
|
|
125
|
+
numerator[t_voxels] = amp @ band_weights
|
|
114
126
|
spatial_shape = niimg_data.shape[:-1]
|
|
115
127
|
numerator = numerator.reshape(spatial_shape)
|
|
116
128
|
denominator = denominator.reshape(spatial_shape)
|
|
@@ -17,11 +17,13 @@ from typing import (
|
|
|
17
17
|
|
|
18
18
|
from pydantic import BeforeValidator, PositiveFloat
|
|
19
19
|
|
|
20
|
+
from ...data import get_data
|
|
20
21
|
from ...datagrabber import DataType
|
|
21
22
|
from ...storage import StorageType
|
|
22
23
|
from ...typing import ConditionalDependencies, MarkerInOutMappings
|
|
23
24
|
from ...utils import ensure_list_or_none
|
|
24
25
|
from ..base import BaseMarker, logger
|
|
26
|
+
from ..utils import _save_mask
|
|
25
27
|
from ._afni_falff import AFNIALFF
|
|
26
28
|
from ._junifer_falff import JuniferALFF
|
|
27
29
|
|
|
@@ -66,8 +68,10 @@ class ALFFBase(BaseMarker):
|
|
|
66
68
|
The parameters to pass to the aggregation function.
|
|
67
69
|
See :func:`.get_aggfunc_by_name` for options (default None).
|
|
68
70
|
masks : str, dict, list of them or None, optional
|
|
69
|
-
The specification of the masks to apply
|
|
70
|
-
|
|
71
|
+
The specification of the masks to apply. The ALFF and fALFF
|
|
72
|
+
computation is restricted to the voxels in the mask, and the mask is
|
|
73
|
+
also applied to regions before extracting signals. Check
|
|
74
|
+
:ref:`Using Masks <using_masks>` for more details.
|
|
71
75
|
If None, will not apply any mask (default None).
|
|
72
76
|
name : str or None, optional
|
|
73
77
|
The name of the marker.
|
|
@@ -115,6 +119,7 @@ class ALFFBase(BaseMarker):
|
|
|
115
119
|
def _compute(
|
|
116
120
|
self,
|
|
117
121
|
input_data: dict[str, Any],
|
|
122
|
+
extra_input: dict[str, Any] | None = None,
|
|
118
123
|
) -> tuple["Nifti1Image", "Nifti1Image", Path, Path]:
|
|
119
124
|
"""Compute ALFF and fALFF.
|
|
120
125
|
|
|
@@ -123,7 +128,8 @@ class ALFFBase(BaseMarker):
|
|
|
123
128
|
input_data : dict
|
|
124
129
|
The input to the marker.
|
|
125
130
|
extra_input : dict, optional
|
|
126
|
-
The other fields in the pipeline data object
|
|
131
|
+
The other fields in the pipeline data object. Used to compute
|
|
132
|
+
the mask in the space of ``input_data`` (default None).
|
|
127
133
|
|
|
128
134
|
Returns
|
|
129
135
|
-------
|
|
@@ -144,12 +150,26 @@ class ALFFBase(BaseMarker):
|
|
|
144
150
|
estimator = AFNIALFF()
|
|
145
151
|
elif self.using == "junifer":
|
|
146
152
|
estimator = JuniferALFF()
|
|
153
|
+
# Get mask in the space of the input data
|
|
154
|
+
mask_path = None
|
|
155
|
+
if self.masks is not None:
|
|
156
|
+
logger.debug(f"Masking with {self.masks}")
|
|
157
|
+
mask_path = _save_mask(
|
|
158
|
+
get_data(
|
|
159
|
+
kind="mask",
|
|
160
|
+
names=self.masks,
|
|
161
|
+
target_data=input_data,
|
|
162
|
+
extra_input=extra_input,
|
|
163
|
+
),
|
|
164
|
+
prefix="alff_mask",
|
|
165
|
+
)
|
|
147
166
|
# Compute ALFF + fALFF
|
|
148
167
|
alff, falff, alff_path, falff_path = estimator.compute( # type: ignore
|
|
149
168
|
input_path=input_data["path"],
|
|
150
169
|
highpass=self.highpass,
|
|
151
170
|
lowpass=self.lowpass,
|
|
152
171
|
tr=self.tr,
|
|
172
|
+
mask_path=mask_path,
|
|
153
173
|
)
|
|
154
174
|
|
|
155
175
|
# If the input data space is native already, the original path should
|
|
@@ -92,7 +92,7 @@ class ALFFMaps(ALFFBase):
|
|
|
92
92
|
|
|
93
93
|
# Compute ALFF + fALFF
|
|
94
94
|
alff_output, falff_output, alff_output_path, falff_output_path = (
|
|
95
|
-
self._compute(input_data=input)
|
|
95
|
+
self._compute(input_data=input, extra_input=extra_input)
|
|
96
96
|
)
|
|
97
97
|
|
|
98
98
|
# Perform aggregation on ALFF + fALFF
|
|
@@ -104,7 +104,7 @@ class ALFFParcels(ALFFBase):
|
|
|
104
104
|
|
|
105
105
|
# Compute ALFF + fALFF
|
|
106
106
|
alff_output, falff_output, alff_output_path, falff_output_path = (
|
|
107
|
-
self._compute(input_data=input)
|
|
107
|
+
self._compute(input_data=input, extra_input=extra_input)
|
|
108
108
|
)
|
|
109
109
|
|
|
110
110
|
# Perform aggregation on ALFF + fALFF
|
|
@@ -113,7 +113,7 @@ class ALFFSpheres(ALFFBase):
|
|
|
113
113
|
|
|
114
114
|
# Compute ALFF + fALFF
|
|
115
115
|
alff_output, falff_output, alff_output_path, falff_output_path = (
|
|
116
|
-
self._compute(input_data=input)
|
|
116
|
+
self._compute(input_data=input, extra_input=extra_input)
|
|
117
117
|
)
|
|
118
118
|
|
|
119
119
|
# Perform aggregation on ALFF / fALFF
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"""Provide tests for the ALFF and fALFF computation with masks."""
|
|
2
|
+
|
|
3
|
+
# Authors: Federico Raimondo <f.raimondo@fz-juelich.de>
|
|
4
|
+
# License: AGPL
|
|
5
|
+
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
import nibabel as nib
|
|
9
|
+
import numpy as np
|
|
10
|
+
import pytest
|
|
11
|
+
from numpy.testing import assert_allclose, assert_array_equal
|
|
12
|
+
|
|
13
|
+
from junifer.markers.falff._afni_falff import AFNIALFF
|
|
14
|
+
from junifer.markers.falff._junifer_falff import JuniferALFF
|
|
15
|
+
from junifer.pipeline import WorkDirManager
|
|
16
|
+
from junifer.pipeline.utils import _check_afni
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _save(data: np.ndarray, path: Path, tr: float = 2.0) -> Path:
|
|
20
|
+
"""Save data as NIfTI, with the TR in the header for 4D data."""
|
|
21
|
+
img = nib.Nifti1Image(data, np.eye(4))
|
|
22
|
+
if data.ndim == 4:
|
|
23
|
+
img.header.set_zooms((1.0, 1.0, 1.0, tr))
|
|
24
|
+
nib.save(img, path)
|
|
25
|
+
return path
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _data(tmp_path: Path) -> tuple[Path, Path, np.ndarray]:
|
|
29
|
+
"""Create BOLD data and a mask of half of the voxels."""
|
|
30
|
+
data = np.random.default_rng(0).normal(size=(6, 6, 6, 100)) + 100
|
|
31
|
+
bold_path = _save(data.astype(np.float32), tmp_path / "bold.nii")
|
|
32
|
+
mask = np.zeros((6, 6, 6), dtype=np.uint8)
|
|
33
|
+
mask[3:] = 1
|
|
34
|
+
mask_path = _save(mask, tmp_path / "mask.nii")
|
|
35
|
+
return bold_path, mask_path, mask.astype(bool)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@pytest.mark.parametrize(
|
|
39
|
+
"estimator",
|
|
40
|
+
[
|
|
41
|
+
JuniferALFF,
|
|
42
|
+
pytest.param(
|
|
43
|
+
AFNIALFF,
|
|
44
|
+
marks=pytest.mark.skipif(
|
|
45
|
+
_check_afni() is False, reason="requires AFNI to be in PATH"
|
|
46
|
+
),
|
|
47
|
+
),
|
|
48
|
+
],
|
|
49
|
+
)
|
|
50
|
+
def test_ALFF_mask(
|
|
51
|
+
estimator: type[JuniferALFF | AFNIALFF], tmp_path: Path
|
|
52
|
+
) -> None:
|
|
53
|
+
"""Test the ALFF and fALFF computation is restricted to the mask.
|
|
54
|
+
|
|
55
|
+
The values are computed for each voxel, so inside the mask they are the
|
|
56
|
+
same as without mask, and outside the mask they are 0.
|
|
57
|
+
|
|
58
|
+
Parameters
|
|
59
|
+
----------
|
|
60
|
+
estimator : JuniferALFF or AFNIALFF
|
|
61
|
+
The ALFF estimator to test.
|
|
62
|
+
tmp_path : pathlib.Path
|
|
63
|
+
The path to the test directory.
|
|
64
|
+
|
|
65
|
+
"""
|
|
66
|
+
WorkDirManager().workdir = tmp_path
|
|
67
|
+
bold_path, mask_path, mask = _data(tmp_path)
|
|
68
|
+
kwargs = {"highpass": 0.01, "lowpass": 0.1, "tr": 2.0}
|
|
69
|
+
masked = estimator().compute(bold_path, mask_path=mask_path, **kwargs)
|
|
70
|
+
unmasked = estimator().compute(bold_path, **kwargs)
|
|
71
|
+
for i_map in range(2): # ALFF and fALFF
|
|
72
|
+
t_masked = masked[i_map].get_fdata()
|
|
73
|
+
t_unmasked = unmasked[i_map].get_fdata()
|
|
74
|
+
assert_array_equal(t_masked[~mask], 0)
|
|
75
|
+
assert (t_masked[mask] > 0).all()
|
|
76
|
+
assert_allclose(t_masked[mask], t_unmasked[mask], rtol=1e-6)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@pytest.mark.skipif(
|
|
80
|
+
_check_afni() is False, reason="requires AFNI to be in PATH"
|
|
81
|
+
)
|
|
82
|
+
def test_AFNIALFF_no_time_series(tmp_path: Path) -> None:
|
|
83
|
+
"""Test 3dRSFC does not output the bandpassed time series.
|
|
84
|
+
|
|
85
|
+
Parameters
|
|
86
|
+
----------
|
|
87
|
+
tmp_path : pathlib.Path
|
|
88
|
+
The path to the test directory.
|
|
89
|
+
|
|
90
|
+
"""
|
|
91
|
+
WorkDirManager().workdir = tmp_path
|
|
92
|
+
bold_path, mask_path, _ = _data(tmp_path)
|
|
93
|
+
alff_path = AFNIALFF().compute(
|
|
94
|
+
bold_path, highpass=0.01, lowpass=0.1, tr=2.0, mask_path=mask_path
|
|
95
|
+
)[2]
|
|
96
|
+
# Only the parameters (ALFF, fALFF and mALFF) are in the output directory
|
|
97
|
+
outputs = {x.name for x in alff_path.parent.iterdir()}
|
|
98
|
+
assert not any("_LFF+" in x for x in outputs)
|
|
99
|
+
assert any("_ALFF+" in x for x in outputs)
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
# Authors: Synchon Mandal <s.mandal@fz-juelich.de>
|
|
4
4
|
# License: AGPL
|
|
5
5
|
|
|
6
|
-
import hashlib
|
|
7
6
|
from enum import StrEnum
|
|
8
7
|
from pathlib import Path
|
|
9
8
|
from typing import (
|
|
@@ -13,17 +12,15 @@ from typing import (
|
|
|
13
12
|
ClassVar,
|
|
14
13
|
)
|
|
15
14
|
|
|
16
|
-
import nibabel as nib
|
|
17
|
-
import numpy as np
|
|
18
15
|
from pydantic import BeforeValidator
|
|
19
16
|
|
|
20
17
|
from ...data import get_data
|
|
21
18
|
from ...datagrabber import DataType
|
|
22
|
-
from ...pipeline import WorkDirManager
|
|
23
19
|
from ...storage import StorageType
|
|
24
20
|
from ...typing import ConditionalDependencies, MarkerInOutMappings
|
|
25
21
|
from ...utils import ensure_list_or_none
|
|
26
22
|
from ..base import BaseMarker, logger
|
|
23
|
+
from ..utils import _save_mask
|
|
27
24
|
from ._afni_reho import AFNIReHo
|
|
28
25
|
from ._junifer_reho import JuniferReHo
|
|
29
26
|
|
|
@@ -199,7 +196,8 @@ class ReHoBase(BaseMarker):
|
|
|
199
196
|
names=self.masks,
|
|
200
197
|
target_data=input_data,
|
|
201
198
|
extra_input=extra_input,
|
|
202
|
-
)
|
|
199
|
+
),
|
|
200
|
+
prefix="reho_mask",
|
|
203
201
|
)
|
|
204
202
|
# Compute reho
|
|
205
203
|
reho_map, reho_map_path = estimator.compute( # type: ignore
|
|
@@ -217,38 +215,3 @@ class ReHoBase(BaseMarker):
|
|
|
217
215
|
return reho_map, input_data["path"]
|
|
218
216
|
|
|
219
217
|
return reho_map, reho_map_path
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
def _save_mask(mask_img: "Nifti1Image") -> Path:
|
|
223
|
-
"""Save mask to the working directory, named by its content.
|
|
224
|
-
|
|
225
|
-
The same mask always gets the same path, so that the cached ReHo
|
|
226
|
-
computation can be reused by markers using the same mask.
|
|
227
|
-
|
|
228
|
-
Parameters
|
|
229
|
-
----------
|
|
230
|
-
mask_img : Niimg-like object
|
|
231
|
-
The mask to save.
|
|
232
|
-
|
|
233
|
-
Returns
|
|
234
|
-
-------
|
|
235
|
-
pathlib.Path
|
|
236
|
-
The path to the saved mask.
|
|
237
|
-
|
|
238
|
-
"""
|
|
239
|
-
mask_data = np.squeeze(np.asarray(mask_img.dataobj)) != 0
|
|
240
|
-
digest = hashlib.sha256()
|
|
241
|
-
digest.update(str(mask_data.shape).encode())
|
|
242
|
-
digest.update(np.packbits(mask_data).tobytes())
|
|
243
|
-
digest.update(mask_img.affine.tobytes())
|
|
244
|
-
mask_path = (
|
|
245
|
-
WorkDirManager().workdir / f"reho_mask_{digest.hexdigest()[:16]}.nii"
|
|
246
|
-
)
|
|
247
|
-
if not mask_path.exists():
|
|
248
|
-
nib.save(
|
|
249
|
-
nib.Nifti1Image(
|
|
250
|
-
mask_data.astype(np.uint8), mask_img.affine, mask_img.header
|
|
251
|
-
),
|
|
252
|
-
mask_path,
|
|
253
|
-
)
|
|
254
|
-
return mask_path
|
|
@@ -6,10 +6,14 @@
|
|
|
6
6
|
# Synchon Mandal <s.mandal@fz-juelich.de>
|
|
7
7
|
# License: AGPL
|
|
8
8
|
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
import nibabel as nib
|
|
9
12
|
import numpy as np
|
|
10
13
|
import pytest
|
|
11
14
|
|
|
12
|
-
from junifer.markers.utils import _ets
|
|
15
|
+
from junifer.markers.utils import _ets, _save_mask
|
|
16
|
+
from junifer.pipeline import WorkDirManager
|
|
13
17
|
|
|
14
18
|
|
|
15
19
|
def test_ets() -> None:
|
|
@@ -48,3 +52,38 @@ def test_ets_incorrect_label_list() -> None:
|
|
|
48
52
|
ValueError, match="List of roi names does not correspond"
|
|
49
53
|
):
|
|
50
54
|
_ets(bold_ts, roi_labels)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def test_save_mask(tmp_path: Path) -> None:
|
|
58
|
+
"""Test saving masks in the element directory, named by their content.
|
|
59
|
+
|
|
60
|
+
Parameters
|
|
61
|
+
----------
|
|
62
|
+
tmp_path : pathlib.Path
|
|
63
|
+
The path to the test directory.
|
|
64
|
+
|
|
65
|
+
"""
|
|
66
|
+
workdir_mgr = WorkDirManager()
|
|
67
|
+
workdir_mgr.workdir = tmp_path
|
|
68
|
+
data = np.zeros((3, 4, 5), dtype=np.int8)
|
|
69
|
+
data[1, 1:3, 2:4] = 1
|
|
70
|
+
mask = nib.Nifti1Image(data, np.eye(4))
|
|
71
|
+
path = _save_mask(mask, prefix="test_mask")
|
|
72
|
+
# In the element directory, with the voxels in the mask
|
|
73
|
+
assert path.parent == workdir_mgr.elementdir
|
|
74
|
+
assert path.name.startswith("test_mask_")
|
|
75
|
+
assert np.array_equal(np.asarray(nib.load(path).dataobj), data)
|
|
76
|
+
# The same mask (another image) has the same path, a different one not
|
|
77
|
+
assert (
|
|
78
|
+
_save_mask(nib.Nifti1Image(data.copy(), np.eye(4)), prefix="test_mask")
|
|
79
|
+
== path
|
|
80
|
+
)
|
|
81
|
+
other = data.copy()
|
|
82
|
+
other[0, 0, 0] = 1
|
|
83
|
+
assert (
|
|
84
|
+
_save_mask(nib.Nifti1Image(other, np.eye(4)), prefix="test_mask")
|
|
85
|
+
!= path
|
|
86
|
+
)
|
|
87
|
+
# Deleted with the element directory
|
|
88
|
+
workdir_mgr.cleanup_elementdir()
|
|
89
|
+
assert not path.exists()
|
|
@@ -8,18 +8,62 @@
|
|
|
8
8
|
# Amir Omidvarnia <a.omidvarnia@fz-juelich.de>
|
|
9
9
|
# License: AGPL
|
|
10
10
|
|
|
11
|
+
import hashlib
|
|
11
12
|
import zlib
|
|
12
13
|
from collections.abc import Callable
|
|
14
|
+
from pathlib import Path
|
|
13
15
|
from typing import Any
|
|
14
16
|
|
|
17
|
+
import nibabel as nib
|
|
15
18
|
import numpy as np
|
|
16
19
|
import pandas as pd
|
|
17
20
|
from nibabel.spatialimages import SpatialImage
|
|
18
21
|
from scipy.stats import zscore
|
|
19
22
|
|
|
23
|
+
from ..pipeline import WorkDirManager
|
|
20
24
|
from ..utils import raise_error
|
|
21
25
|
|
|
22
26
|
|
|
27
|
+
def _save_mask(mask_img: SpatialImage, prefix: str) -> Path:
|
|
28
|
+
"""Save mask to the element directory, named by its content.
|
|
29
|
+
|
|
30
|
+
The same mask always gets the same path within an element, so that the
|
|
31
|
+
cached computations (e.g., ReHo or ALFF) can be reused by markers using
|
|
32
|
+
the same mask. The element directory is deleted after the element is
|
|
33
|
+
processed.
|
|
34
|
+
|
|
35
|
+
Parameters
|
|
36
|
+
----------
|
|
37
|
+
mask_img : Niimg-like object
|
|
38
|
+
The mask to save.
|
|
39
|
+
prefix : str
|
|
40
|
+
The prefix of the file name.
|
|
41
|
+
|
|
42
|
+
Returns
|
|
43
|
+
-------
|
|
44
|
+
pathlib.Path
|
|
45
|
+
The path to the saved mask.
|
|
46
|
+
|
|
47
|
+
"""
|
|
48
|
+
mask_data = np.squeeze(np.asarray(mask_img.dataobj)) != 0
|
|
49
|
+
digest = hashlib.sha256()
|
|
50
|
+
digest.update(str(mask_data.shape).encode())
|
|
51
|
+
digest.update(np.packbits(mask_data).tobytes())
|
|
52
|
+
digest.update(mask_img.affine.tobytes())
|
|
53
|
+
mask_path = (
|
|
54
|
+
WorkDirManager().get_elementdir()
|
|
55
|
+
/ f"{prefix}_{digest.hexdigest()[:16]}.nii"
|
|
56
|
+
)
|
|
57
|
+
if not mask_path.exists():
|
|
58
|
+
nib.save(
|
|
59
|
+
nib.Nifti1Image(
|
|
60
|
+
mask_data.astype(np.uint8), mask_img.affine, mask_img.header
|
|
61
|
+
),
|
|
62
|
+
mask_path,
|
|
63
|
+
)
|
|
64
|
+
return mask_path
|
|
65
|
+
|
|
66
|
+
|
|
23
67
|
def _has_data(data: np.ndarray) -> np.ndarray:
|
|
24
68
|
"""Get the columns with data.
|
|
25
69
|
|
{junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/tests/test_workdir_manager.py
RENAMED
|
@@ -95,6 +95,30 @@ def test_workdir_manager_cleanup_elementdir(
|
|
|
95
95
|
assert workdir_mgr.elementdir is None
|
|
96
96
|
|
|
97
97
|
|
|
98
|
+
def test_workdir_manager_get_elementdir(tmp_path: Path) -> None:
|
|
99
|
+
"""Test WorkDirManager gets the element directory correctly.
|
|
100
|
+
|
|
101
|
+
Parameters
|
|
102
|
+
----------
|
|
103
|
+
tmp_path : pathlib.Path
|
|
104
|
+
The path to the test directory.
|
|
105
|
+
|
|
106
|
+
"""
|
|
107
|
+
workdir_mgr = WorkDirManager()
|
|
108
|
+
workdir_mgr.workdir = tmp_path
|
|
109
|
+
assert workdir_mgr.elementdir is None
|
|
110
|
+
# Created on the first call, and the same afterwards
|
|
111
|
+
elementdir = workdir_mgr.get_elementdir()
|
|
112
|
+
assert elementdir.is_dir()
|
|
113
|
+
assert elementdir.parent == tmp_path
|
|
114
|
+
assert workdir_mgr.get_elementdir() == elementdir
|
|
115
|
+
# The element temporary directories are in it
|
|
116
|
+
assert workdir_mgr.get_element_tempdir().parent == elementdir
|
|
117
|
+
workdir_mgr.cleanup_elementdir()
|
|
118
|
+
assert not elementdir.exists()
|
|
119
|
+
assert workdir_mgr.elementdir is None
|
|
120
|
+
|
|
121
|
+
|
|
98
122
|
def test_workdir_manager_get_and_delete_tempdir(tmp_path: Path) -> None:
|
|
99
123
|
"""Test WorkDirManager gets and deletes temporary directories correctly.
|
|
100
124
|
|
|
@@ -128,6 +128,26 @@ class WorkDirManager(metaclass=Singleton):
|
|
|
128
128
|
"""Get element directory."""
|
|
129
129
|
return self._elementdir # type: ignore
|
|
130
130
|
|
|
131
|
+
def get_elementdir(self) -> Path:
|
|
132
|
+
"""Get the element directory, creating it if needed.
|
|
133
|
+
|
|
134
|
+
This directory should be available only for the lifetime of an
|
|
135
|
+
element.
|
|
136
|
+
|
|
137
|
+
Returns
|
|
138
|
+
-------
|
|
139
|
+
pathlib.Path
|
|
140
|
+
The path to the element directory.
|
|
141
|
+
|
|
142
|
+
"""
|
|
143
|
+
if self._elementdir is None:
|
|
144
|
+
logger.debug(
|
|
145
|
+
"Setting up element directory under "
|
|
146
|
+
f"{self._workdir.resolve()!s}" # type: ignore
|
|
147
|
+
)
|
|
148
|
+
self._elementdir = Path(tempfile.mkdtemp(dir=self._workdir))
|
|
149
|
+
return self._elementdir
|
|
150
|
+
|
|
131
151
|
def get_element_tempdir(
|
|
132
152
|
self, prefix: str | None = None, suffix: str | None = None
|
|
133
153
|
) -> Path:
|
|
@@ -151,22 +171,12 @@ class WorkDirManager(metaclass=Singleton):
|
|
|
151
171
|
The path to the temporary directory.
|
|
152
172
|
|
|
153
173
|
"""
|
|
154
|
-
|
|
155
|
-
if self._elementdir is None:
|
|
156
|
-
logger.debug(
|
|
157
|
-
"Setting up element directory under "
|
|
158
|
-
f"{self._workdir.resolve()!s}" # type: ignore
|
|
159
|
-
)
|
|
160
|
-
self._elementdir = Path(tempfile.mkdtemp(dir=self._workdir))
|
|
161
|
-
|
|
174
|
+
elementdir = self.get_elementdir()
|
|
162
175
|
logger.debug(
|
|
163
|
-
"Creating element temporary directory at "
|
|
164
|
-
f"{self._elementdir.resolve()!s}"
|
|
176
|
+
f"Creating element temporary directory at {elementdir.resolve()!s}"
|
|
165
177
|
)
|
|
166
178
|
return Path(
|
|
167
|
-
tempfile.mkdtemp(
|
|
168
|
-
dir=self._elementdir, prefix=prefix, suffix=suffix
|
|
169
|
-
)
|
|
179
|
+
tempfile.mkdtemp(dir=elementdir, prefix=prefix, suffix=suffix)
|
|
170
180
|
)
|
|
171
181
|
|
|
172
182
|
def delete_element_tempdir(self, tempdir: Path) -> None:
|
|
@@ -201,8 +201,10 @@ class TemporalFilter(BasePreprocessor):
|
|
|
201
201
|
{
|
|
202
202
|
# Update path to sync with "data"
|
|
203
203
|
"path": filtered_data_path,
|
|
204
|
-
# Update data
|
|
205
|
-
|
|
204
|
+
# Update data, loaded from the file to not keep the
|
|
205
|
+
# in-memory image (memory-mapped, as the file is not
|
|
206
|
+
# compressed)
|
|
207
|
+
"data": nib.load(filtered_data_path),
|
|
206
208
|
}
|
|
207
209
|
)
|
|
208
210
|
|
|
@@ -159,8 +159,10 @@ class TemporalSlicer(BasePreprocessor):
|
|
|
159
159
|
{
|
|
160
160
|
# Update path to sync with "data"
|
|
161
161
|
"path": sliced_img_path,
|
|
162
|
-
# Update data
|
|
163
|
-
|
|
162
|
+
# Update data, loaded from the file to not keep the
|
|
163
|
+
# in-memory image (memory-mapped, as the file is not
|
|
164
|
+
# compressed)
|
|
165
|
+
"data": nib.load(sliced_img_path),
|
|
164
166
|
}
|
|
165
167
|
)
|
|
166
168
|
|
|
@@ -694,8 +694,10 @@ class fMRIPrepConfoundRemover(BasePreprocessor):
|
|
|
694
694
|
{
|
|
695
695
|
# Update path to sync with "data"
|
|
696
696
|
"path": deconfounded_img_path,
|
|
697
|
-
# Update data
|
|
698
|
-
|
|
697
|
+
# Update data, loaded from the file to not keep the
|
|
698
|
+
# in-memory image (memory-mapped, as the file is not
|
|
699
|
+
# compressed)
|
|
700
|
+
"data": nib.load(deconfounded_img_path),
|
|
699
701
|
}
|
|
700
702
|
)
|
|
701
703
|
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
# Synchon Mandal <s.mandal@fz-juelich.de>
|
|
6
6
|
# License: AGPL
|
|
7
7
|
|
|
8
|
+
import nibabel as nib
|
|
8
9
|
import numpy as np
|
|
9
10
|
import pandas as pd
|
|
10
11
|
import pytest
|
|
@@ -498,6 +499,9 @@ def test_fMRIPrepConfoundRemover_fit_transform() -> None:
|
|
|
498
499
|
# Fit-transform
|
|
499
500
|
output = confound_remover.fit_transform(element_data)
|
|
500
501
|
output_img = output["BOLD"]["data"]
|
|
502
|
+
# The data is loaded from the saved file, not kept in memory
|
|
503
|
+
assert nib.is_proxy(output_img.dataobj)
|
|
504
|
+
assert output_img.get_filename() == str(output["BOLD"]["path"])
|
|
501
505
|
output_bold = output_img.get_fdata()
|
|
502
506
|
output_tr = output_img.header.get_zooms()[3]
|
|
503
507
|
|
|
@@ -554,6 +558,9 @@ def test_fMRIPrepConfoundRemover_fit_transform_masks() -> None:
|
|
|
554
558
|
# Fit-transform
|
|
555
559
|
output = confound_remover.fit_transform(element_data)
|
|
556
560
|
output_img = output["BOLD"]["data"]
|
|
561
|
+
# The data is loaded from the saved file, not kept in memory
|
|
562
|
+
assert nib.is_proxy(output_img.dataobj)
|
|
563
|
+
assert output_img.get_filename() == str(output["BOLD"]["path"])
|
|
557
564
|
output_bold = output_img.get_fdata()
|
|
558
565
|
output_tr = output_img.header.get_zooms()[3]
|
|
559
566
|
|