junifer 0.0.8.dev339__tar.gz → 0.0.8.dev346__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.dev339/junifer.egg-info → junifer-0.0.8.dev346}/PKG-INFO +1 -1
- junifer-0.0.8.dev346/docs/changes/newsfragments/534.enh +1 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/using/configuring.rst +7 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/_version.py +3 -3
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +196 -46
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +218 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/maps_aggregation.py +2 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/parcel_aggregation.py +3 -1
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346/junifer.egg-info}/PKG-INFO +1 -1
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer.egg-info/SOURCES.txt +1 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer.egg-info/scm_file_list.json +1 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer.egg-info/scm_version.json +2 -2
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.dockerignore +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/dependabot.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/pull_request_template.md +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/workflows/check-stale.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/workflows/ci.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/workflows/docker-publish.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/workflows/docs-preview.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/workflows/docs.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/workflows/lint.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/workflows/publish.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.gitignore +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.gitmodules +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.pre-commit-config.yaml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.python-version +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/AUTHORS.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/Dockerfile +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/Dockerfile-ci +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/LICENSE.md +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/README.md +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/codecov.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/conda-env.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/Makefile +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/_static/css/custom.css +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/_static/css/version_selector.css +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/_static/js/custom.js +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/_templates/versions.html +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/api.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/cli.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/configs.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/data.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/datagrabbers.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/datareaders.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/index.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/markers.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/nilearn.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/onthefly.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/pipeline.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/preprocessing.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/stats.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/storage.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/testing.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/utils.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/builtin.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/contributors.inc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/.gitignore +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/239.enh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/364.doc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/364.enh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/364.feature +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/474.misc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/482.bugfix +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/492.bugfix +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/499.enh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/502.bugfix +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/503.enh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/504.bugfix +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/504.misc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/509.enh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/510.bugfix +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/511.bugfix +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/511.bugfix.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/511.change +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/511.enh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/511.enh.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/511.feature +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/511.misc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/511.misc.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/513.doc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/513.misc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/514.bugfix +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/514.bugfix.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/514.enh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/515.doc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/515.enh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/515.enh.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/515.misc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/515.misc.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/516.bugfix +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/516.bugfix.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/516.bugfix.2 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/516.change +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/516.change.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/516.misc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.bugfix +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.bugfix.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.bugfix.2 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.bugfix.3 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.bugfix.4 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.bugfix.5 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.bugfix.6 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.change +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.doc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.misc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.misc.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.misc.2 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.misc.3 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.removal +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/521.bugfix +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/522.bugfix +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/522.enh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/523.misc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.bugfix +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.bugfix.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.change +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.change.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.change.2 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.doc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.enh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.feature +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.feature.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.bugfix +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.bugfix.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.change +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.change.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.change.2 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.change.3 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.change.4 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.doc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.enh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.feature +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/528.bugfix +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/528.change +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/528.doc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/529.bugfix +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/529.bugfix.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/529.bugfix.2 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/529.bugfix.3 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/529.doc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/529.enh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/530.change +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/530.enh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/530.enh.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/531.enh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/533.enh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/533.enh.1 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/conf.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/contribution.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/confounds_format.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/coordinates.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/data_dump_asset.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/data_registries.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/data_types.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/datagrabber.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/dependencies.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/extension.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/index.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/logging.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/maps.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/marker.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/masks.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/parcellations.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/plugins.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/preprocessor.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/faq.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/help.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/images/junifer_logo.png +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/index.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/installation.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/internals.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/links.inc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/maintaining.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/poly.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/poly_files/patches/version_banner.html +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/poly_files/patches/versions.html +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/poly_files/templates/index.html +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/starting.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/understanding/data.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/understanding/datagrabber.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/understanding/datareader.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/understanding/index.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/understanding/marker.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/understanding/pipeline.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/understanding/preprocess.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/understanding/storage.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/using/codeless.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/using/dumping.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/using/index.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/using/masks.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/using/queueing.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/using/running.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/whats_new.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/README.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/norun_hcpfc_pearson.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/norun_ukbvm_gmd.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/run_compute_parcel_mean.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/run_datagrabber_bids_datalad.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/run_ets_rss_marker.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/run_junifer_julearn.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/run_run_gmd_mean.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/yamls/gmd_mean.yaml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/yamls/partly_cloudy_agg_mean_tian.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/yamls/ukb_gmd_mean.yaml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/ignore_words.txt +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/decorators.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/functions.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/queue_context/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/queue_context/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/queue_context/gnu_parallel_local_adapter.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/queue_context/htcondor_adapter.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/queue_context/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/queue_context/queue_context_adapter.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/queue_context/tests/test_htcondor_adapter.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/afni/3dRSFC +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/afni/3dReHo +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/afni/afni +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/afni/run_afni_docker.sh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/ants/ResampleImage +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/ants/antsApplyTransforms +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/ants/run_ants_docker.sh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/freesurfer/mri_binarize +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/freesurfer/mri_mc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/freesurfer/mri_pretess +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/freesurfer/mris_convert +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/freesurfer/run_freesurfer_docker.sh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/fsl/applywarp +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/fsl/flirt +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/fsl/img2imgcoord +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/fsl/std2imgcoord +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/run_conda.bash +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/run_conda.zsh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/run_venv.bash +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/run_venv.zsh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/tests/test_decorators.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/tests/test_functions.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/cli.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/parser.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/tests/data/gmd_mean.yaml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/tests/data/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/tests/test_cli.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/tests/test_cli_utils.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/utils.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/conftest.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/_dispatch.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/coordinates/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/coordinates/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/coordinates/_ants_coordinates_warper.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/coordinates/_coordinates.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/coordinates/_fsl_coordinates_warper.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/coordinates/tests/test_coordinates.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/coordinates/tests/test_coordinates_names.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/maps/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/maps/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/maps/_ants_maps_warper.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/maps/_fsl_maps_warper.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/maps/_maps.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/maps/tests/test_maps.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/masks/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/masks/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/masks/_ants_mask_warper.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/masks/_fsl_mask_warper.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/masks/_masks.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/masks/tests/test_masks.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/parcellations/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/parcellations/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/parcellations/_ants_parcellation_warper.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/parcellations/_fsl_parcellation_warper.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/parcellations/_parcellations.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/parcellations/tests/test_parcellations.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/pipeline_data_registry_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/template_spaces.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/tests/test_data_utils.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/tests/test_dispatch.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/tests/test_template_spaces.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/utils.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/_types.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/id1000.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/piop1.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/piop2.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/datalad_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/dmcc13_benchmark.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/hcp1200/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/hcp1200/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/hcp1200/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/multiple.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/pattern.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/pattern_datalad.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/pattern_validation_mixin.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/tests/test_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/tests/test_multiple.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/tests/test_pattern.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/tests/test_pattern_validation_mixin.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datareader/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datareader/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datareader/default.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datareader/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datareader/tests/test_default_reader.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.codecov.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.codespellignore +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/documentation.md +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/questions-help-support.md +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/dependabot.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/workflows/build.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/workflows/code-style.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/workflows/doc.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/workflows/publish.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/workflows/pytest.yml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.gitignore +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/LICENSE +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/README.md +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/_version.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/asymmetry.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/brainprint.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/cli/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/cli/help_text.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/cli/parser.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/cli/utils.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/commands/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/commands/sys_info.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/surfaces.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/utils/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/utils/_config.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/utils/tests/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/utils/tests/test_config.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/utils/utils.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/Makefile +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/_static/.gitkeep +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/_templates/autosummary/class.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/_templates/autosummary/function.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/_templates/autosummary/module.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/api/index.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/conf.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/index.rst +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/links.inc +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/make.bat +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/references.bib +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/pyproject.toml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/setup.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/nilearn/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/nilearn/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/nilearn/junifer_connectivity_measure.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/nilearn/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/brainprint.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/complexity_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/hurst_exponent.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/perm_entropy.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/range_entropy.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/range_entropy_auc.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/sample_entropy.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_complexity_registry.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/ets_rss.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/_afni_falff.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/_junifer_falff.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/falff_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/falff_maps.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/falff_parcels.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/falff_spheres.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/tests/test_falff_maps.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/tests/test_falff_mask.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/edge_functional_connectivity_maps.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/functional_connectivity_maps.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_maps.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_maps.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/_afni_reho.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/_junifer_reho.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/reho_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/reho_maps.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/reho_parcels.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/reho_spheres.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/tests/test_junifer_reho.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/tests/test_reho_maps.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/sphere_aggregation.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/temporal_snr_maps.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/tests/test_temporal_snr_maps.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/tests/test_brainprint.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/tests/test_ets_rss.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/tests/test_lost_regions.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/tests/test_maps_aggregation.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/tests/test_marker_utils.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/tests/test_markers_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/utils.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/onthefly/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/onthefly/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/onthefly/_brainprint.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/onthefly/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/onthefly/read_transform.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/onthefly/tests/test_read_transform.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/_data_object_dumper.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/marker_collection.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/pipeline_component_registry.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/pipeline_step_mixin.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/tests/test_data_object_dumper.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/tests/test_marker_collection.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/tests/test_pipeline_component_registry.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/tests/test_workdir_manager.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/update_meta_mixin.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/utils.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/workdir_manager.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/_temporal_filter.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/_temporal_slicer.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/confounds/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/confounds/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/confounds/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/smoothing/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/smoothing/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/smoothing/_afni_smoothing.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/smoothing/_fsl_smoothing.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/smoothing/_nilearn_smoothing.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/smoothing/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/smoothing/smoothing.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/smoothing/tests/test_smoothing.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/tests/test_preprocess_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/tests/test_temporal_filter.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/tests/test_temporal_slicer.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/_ants_warper.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/_fsl_warper.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/_utils.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/space_warper.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/tests/test_space_warper.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/tests/test_warping_utils.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/stats.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/hdf5.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/pandas_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/sqlite.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/tests/data/collected_h5io_fork.hdf5 +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/tests/test_hdf5.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/tests/test_pandas_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/tests/test_repeated_storage.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/tests/test_sqlite.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/tests/test_storage_base.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/tests/test_utils.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/utils.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/datagrabbers.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/registry.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/tests/test_adhdtesting_datagrabber.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/tests/test_testing_registry.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/tests/test_testing_utils.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/tests/test_uclacnpvbmtesting_datagrabber.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/utils.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/tests/test_main.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/tests/test_stats.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/typing/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/typing/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/typing/_typing.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/typing/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/__init__.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/__init__.pyi +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/_config.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/_yaml.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/fs.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/helpers.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/logging.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/py.typed +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/singleton.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/tests/test_config.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/tests/test_fs.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/tests/test_helpers.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/tests/test_logging.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer.egg-info/dependency_links.txt +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer.egg-info/entry_points.txt +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer.egg-info/requires.txt +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer.egg-info/top_level.txt +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/justfile +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/pyproject.toml +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/scripts/start.sh +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/setup.cfg +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/setup.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/tools/create_aomic1000_example_dataset.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/tools/create_aomicpiop1_example_dataset.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/tools/create_aomicpiop2_example_dataset.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/tools/create_bids_example_dataset.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/tools/create_bids_example_dataset_sessions.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/tools/create_hcp1200_example_dataset.py +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/tox.ini +0 -0
- {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/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.dev346
|
|
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
|
+
Read only the signals of the voxels of the spheres, in chunks of ``markers.spheres.chunksize`` volumes (default 100), in :class:`.JuniferNiftiSpheresMasker`, instead of loading the whole 4D data, reducing the memory used by the sphere-based markers (e.g., :class:`.SphereAggregation` and :class:`.FunctionalConnectivitySpheres`) on BOLD data, with the same results, and do not change the input data when it has NaN values by `Fede Raimondo`_
|
|
@@ -69,3 +69,10 @@ Available Configurations
|
|
|
69
69
|
- | Number of volumes of 4D data to warp at once with
|
|
70
70
|
| :class:`.SpaceWarper` (default 100). The memory used by ANTs and FSL
|
|
71
71
|
| grows with the number of volumes, so smaller chunks use less memory
|
|
72
|
+
* - ``JUNIFER_MARKERS_SPHERES_CHUNKSIZE``
|
|
73
|
+
- ``markers.spheres.chunksize``
|
|
74
|
+
- int
|
|
75
|
+
- | Number of volumes of 4D data to read at once to extract the signals
|
|
76
|
+
| of spheres (e.g., :class:`.SphereAggregation`) (default 100). Only
|
|
77
|
+
| the signals of the voxels of the spheres are kept, so the whole data
|
|
78
|
+
| is never in memory, and smaller chunks use less memory
|
|
@@ -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.dev346'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 0, 8, 'dev346')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g936d23c84'
|
|
@@ -15,7 +15,7 @@ from nilearn.maskers.base_masker import filter_and_extract
|
|
|
15
15
|
from sklearn import neighbors
|
|
16
16
|
from sklearn.utils.validation import check_is_fitted
|
|
17
17
|
|
|
18
|
-
from ...utils import raise_error, warn_with_log
|
|
18
|
+
from ...utils import config, raise_error, warn_with_log
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
if TYPE_CHECKING:
|
|
@@ -24,6 +24,7 @@ if TYPE_CHECKING:
|
|
|
24
24
|
from nibabel import Nifti1Image, Nifti2Image
|
|
25
25
|
from numpy.typing import ArrayLike, DTypeLike
|
|
26
26
|
from pandas import DataFrame
|
|
27
|
+
from scipy.sparse import lil_matrix
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
__all__ = ["JuniferNiftiSpheresMasker"]
|
|
@@ -62,14 +63,40 @@ __all__ = ["JuniferNiftiSpheresMasker"]
|
|
|
62
63
|
# DAMAGE.
|
|
63
64
|
|
|
64
65
|
|
|
65
|
-
def
|
|
66
|
+
def _get_chunk_size() -> int:
|
|
67
|
+
"""Get the number of volumes to read at once.
|
|
68
|
+
|
|
69
|
+
Returns
|
|
70
|
+
-------
|
|
71
|
+
int
|
|
72
|
+
The value of ``markers.spheres.chunksize`` (default 100).
|
|
73
|
+
|
|
74
|
+
Raises
|
|
75
|
+
------
|
|
76
|
+
ValueError
|
|
77
|
+
If ``markers.spheres.chunksize`` is not a positive integer.
|
|
78
|
+
|
|
79
|
+
"""
|
|
80
|
+
chunk_size = config.get("markers.spheres.chunksize", 100)
|
|
81
|
+
if (
|
|
82
|
+
isinstance(chunk_size, bool)
|
|
83
|
+
or not isinstance(chunk_size, int)
|
|
84
|
+
or chunk_size < 1
|
|
85
|
+
):
|
|
86
|
+
raise_error(
|
|
87
|
+
"`markers.spheres.chunksize` must be a positive integer, "
|
|
88
|
+
f"but is {chunk_size}"
|
|
89
|
+
)
|
|
90
|
+
return chunk_size
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def _get_sphere_voxels(
|
|
66
94
|
seeds, niimg, radius, allow_overlap, mask_img=None
|
|
67
|
-
):
|
|
68
|
-
"""
|
|
95
|
+
) -> tuple[np.ndarray, "lil_matrix"]:
|
|
96
|
+
"""Get the voxels of the spheres at given seed locations.
|
|
69
97
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
target_shape space.
|
|
98
|
+
The voxels only depend on the geometry (and the mask), so the data of
|
|
99
|
+
``niimg`` is not read.
|
|
73
100
|
|
|
74
101
|
Parameters
|
|
75
102
|
----------
|
|
@@ -79,8 +106,6 @@ def _apply_mask_and_get_affinity(
|
|
|
79
106
|
niimg : 3D/4D Niimg-like object
|
|
80
107
|
See :ref:`extracting_data`.
|
|
81
108
|
Images to process.
|
|
82
|
-
If a 3D niimg is provided, a singleton dimension will be added to
|
|
83
|
-
the output to represent the single scan in the niimg.
|
|
84
109
|
radius : float
|
|
85
110
|
Indicates, in millimeters, the radius for the sphere around the seed.
|
|
86
111
|
allow_overlap : boolean
|
|
@@ -92,9 +117,9 @@ def _apply_mask_and_get_affinity(
|
|
|
92
117
|
|
|
93
118
|
Returns
|
|
94
119
|
-------
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
120
|
+
voxels : 1D numpy.ndarray
|
|
121
|
+
The flat (C order) index in ``niimg`` of each voxel (column of ``A``):
|
|
122
|
+
the voxels in the mask or all the voxels if there is no mask.
|
|
98
123
|
A : scipy.sparse.lil_matrix
|
|
99
124
|
Contains the boolean indices for each sphere.
|
|
100
125
|
shape: (number of seeds, number of voxels)
|
|
@@ -102,54 +127,38 @@ def _apply_mask_and_get_affinity(
|
|
|
102
127
|
Raises
|
|
103
128
|
------
|
|
104
129
|
ValueError
|
|
105
|
-
If ``niimg`` and ``mask_img`` are both provided or
|
|
130
|
+
If ``niimg`` and ``mask_img`` are both not provided or
|
|
106
131
|
if overlap is detected between spheres.
|
|
107
132
|
|
|
108
|
-
Warns
|
|
109
|
-
-----
|
|
110
|
-
RuntimeWarning
|
|
111
|
-
If the provided images contain NaN, they will be converted to zeroes.
|
|
112
|
-
|
|
113
133
|
"""
|
|
114
134
|
seeds = list(seeds)
|
|
115
|
-
|
|
116
135
|
# Compute world coordinates of all in-mask voxels.
|
|
117
136
|
if niimg is None:
|
|
137
|
+
if mask_img is None:
|
|
138
|
+
raise_error("Either a niimg or a mask_img must be provided.")
|
|
118
139
|
mask, affine = masking.load_mask_img(mask_img)
|
|
140
|
+
shape = mask.shape
|
|
119
141
|
# Get coordinate for all voxels inside of mask
|
|
120
142
|
mask_coords = np.asarray(np.nonzero(mask)).T.tolist()
|
|
121
|
-
X = None
|
|
122
|
-
|
|
123
143
|
elif mask_img is not None:
|
|
124
144
|
affine = niimg.affine
|
|
145
|
+
shape = niimg.shape[:3]
|
|
125
146
|
mask_img = check_niimg_3d(mask_img)
|
|
126
147
|
mask_img = image.resample_img(
|
|
127
148
|
mask_img,
|
|
128
149
|
target_affine=affine,
|
|
129
|
-
target_shape=
|
|
150
|
+
target_shape=shape,
|
|
130
151
|
interpolation="nearest",
|
|
131
152
|
)
|
|
132
153
|
mask, _ = masking.load_mask_img(mask_img)
|
|
133
154
|
mask_coords = list(zip(*np.where(mask != 0), strict=False))
|
|
134
|
-
|
|
135
|
-
X = masking.apply_mask_fmri(niimg, mask_img)
|
|
136
|
-
|
|
137
|
-
elif niimg is not None:
|
|
138
|
-
affine = niimg.affine
|
|
139
|
-
if np.isnan(np.sum(safe_get_data(niimg))):
|
|
140
|
-
warn_with_log(
|
|
141
|
-
"The imgs you have fed into fit_transform() contains NaN "
|
|
142
|
-
"values which will be converted to zeroes."
|
|
143
|
-
)
|
|
144
|
-
X = safe_get_data(niimg, True).reshape([-1, niimg.shape[3]]).T
|
|
145
|
-
else:
|
|
146
|
-
X = safe_get_data(niimg).reshape([-1, niimg.shape[3]]).T
|
|
147
|
-
|
|
148
|
-
mask_coords = list(np.ndindex(niimg.shape[:3]))
|
|
149
|
-
|
|
150
155
|
else:
|
|
151
|
-
|
|
152
|
-
|
|
156
|
+
affine = niimg.affine
|
|
157
|
+
shape = niimg.shape[:3]
|
|
158
|
+
mask_coords = list(np.ndindex(shape))
|
|
159
|
+
voxels = np.ravel_multi_index(
|
|
160
|
+
tuple(np.asarray(mask_coords, dtype=int).reshape(-1, 3).T), shape
|
|
161
|
+
)
|
|
153
162
|
# For each seed, get coordinates of nearest voxel
|
|
154
163
|
nearests = []
|
|
155
164
|
for sx, sy, sz in seeds:
|
|
@@ -190,6 +199,132 @@ def _apply_mask_and_get_affinity(
|
|
|
190
199
|
if (not allow_overlap) and np.any(A.sum(axis=0) >= 2):
|
|
191
200
|
raise_error("Overlap detected between spheres")
|
|
192
201
|
|
|
202
|
+
return voxels, A
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def _read_signals(niimg, voxels, masked) -> np.ndarray:
|
|
206
|
+
"""Read the signals of some voxels, a few volumes at a time.
|
|
207
|
+
|
|
208
|
+
The data is read in chunks of ``markers.spheres.chunksize`` volumes and
|
|
209
|
+
only the signals of ``voxels`` are kept, so the whole data is never in
|
|
210
|
+
memory. The values are the same as extracting the signals from the whole
|
|
211
|
+
data with :func:`nilearn.masking.apply_mask_fmri` (``masked``) or
|
|
212
|
+
:func:`nilearn._utils.niimg.safe_get_data` (not ``masked``).
|
|
213
|
+
|
|
214
|
+
Parameters
|
|
215
|
+
----------
|
|
216
|
+
niimg : 4D Niimg-like object
|
|
217
|
+
The image to read.
|
|
218
|
+
voxels : 1D numpy.ndarray
|
|
219
|
+
The flat (C order) indices of the voxels to read.
|
|
220
|
+
masked : bool
|
|
221
|
+
Whether the voxels are the ones of a mask: as
|
|
222
|
+
:func:`nilearn.masking.apply_mask_fmri` does, the signals are then
|
|
223
|
+
float32 if the data is not floating point, and the non-finite values
|
|
224
|
+
are set to 0. Otherwise, the signals keep the data type of the image
|
|
225
|
+
and the non-finite values are set to 0 only if the image has NaN
|
|
226
|
+
values, with a warning.
|
|
227
|
+
|
|
228
|
+
Returns
|
|
229
|
+
-------
|
|
230
|
+
numpy.ndarray of shape (number of scans, number of voxels)
|
|
231
|
+
The signals of the voxels.
|
|
232
|
+
|
|
233
|
+
"""
|
|
234
|
+
n_scans = niimg.shape[3]
|
|
235
|
+
chunk_size = _get_chunk_size()
|
|
236
|
+
signals = None
|
|
237
|
+
has_nan = False
|
|
238
|
+
for start in range(0, n_scans, chunk_size):
|
|
239
|
+
chunk = np.asanyarray(niimg.dataobj[..., start : start + chunk_size])
|
|
240
|
+
if not masked and not has_nan:
|
|
241
|
+
has_nan = bool(np.isnan(np.sum(chunk)))
|
|
242
|
+
chunk = chunk.reshape(-1, chunk.shape[-1])[voxels].T
|
|
243
|
+
if masked and chunk.dtype.kind != "f":
|
|
244
|
+
chunk = chunk.astype(np.float32)
|
|
245
|
+
if signals is None:
|
|
246
|
+
signals = np.empty((n_scans, len(voxels)), dtype=chunk.dtype)
|
|
247
|
+
signals[start : start + chunk.shape[0]] = chunk
|
|
248
|
+
if masked or has_nan:
|
|
249
|
+
if has_nan:
|
|
250
|
+
warn_with_log(
|
|
251
|
+
"The imgs you have fed into fit_transform() contains NaN "
|
|
252
|
+
"values which will be converted to zeroes."
|
|
253
|
+
)
|
|
254
|
+
signals[~np.isfinite(signals)] = 0
|
|
255
|
+
return signals
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
def _apply_mask_and_get_affinity(
|
|
259
|
+
seeds, niimg, radius, allow_overlap, mask_img=None
|
|
260
|
+
):
|
|
261
|
+
"""Apply mask and get affinity matrix for given seeds.
|
|
262
|
+
|
|
263
|
+
Utility function to get only the rows which are occupied by sphere at
|
|
264
|
+
given seed locations and the provided radius. Rows are in target_affine and
|
|
265
|
+
target_shape space.
|
|
266
|
+
|
|
267
|
+
Parameters
|
|
268
|
+
----------
|
|
269
|
+
seeds : List of triplets of coordinates in native space
|
|
270
|
+
Seed definitions. List of coordinates of the seeds in the same space
|
|
271
|
+
as target_affine.
|
|
272
|
+
niimg : 3D/4D Niimg-like object
|
|
273
|
+
See :ref:`extracting_data`.
|
|
274
|
+
Images to process.
|
|
275
|
+
If a 3D niimg is provided, a singleton dimension will be added to
|
|
276
|
+
the output to represent the single scan in the niimg.
|
|
277
|
+
radius : float
|
|
278
|
+
Indicates, in millimeters, the radius for the sphere around the seed.
|
|
279
|
+
allow_overlap : boolean
|
|
280
|
+
If False, a ValueError is raised if VOIs overlap
|
|
281
|
+
mask_img : Niimg-like object, optional
|
|
282
|
+
Mask to apply to regions before extracting signals. If niimg is None,
|
|
283
|
+
mask_img is used as a reference space in which the spheres 'indices are
|
|
284
|
+
placed.
|
|
285
|
+
|
|
286
|
+
Returns
|
|
287
|
+
-------
|
|
288
|
+
X : 2D numpy.ndarray
|
|
289
|
+
Signal for each brain voxel in the (masked) niimgs.
|
|
290
|
+
shape: (number of scans, number of voxels)
|
|
291
|
+
A : scipy.sparse.lil_matrix
|
|
292
|
+
Contains the boolean indices for each sphere.
|
|
293
|
+
shape: (number of seeds, number of voxels)
|
|
294
|
+
|
|
295
|
+
Raises
|
|
296
|
+
------
|
|
297
|
+
ValueError
|
|
298
|
+
If ``niimg`` and ``mask_img`` are both provided or
|
|
299
|
+
if overlap is detected between spheres.
|
|
300
|
+
|
|
301
|
+
Warns
|
|
302
|
+
-----
|
|
303
|
+
RuntimeWarning
|
|
304
|
+
If the provided images contain NaN, they will be converted to zeroes.
|
|
305
|
+
|
|
306
|
+
"""
|
|
307
|
+
_, A = _get_sphere_voxels(
|
|
308
|
+
seeds, niimg, radius, allow_overlap, mask_img=mask_img
|
|
309
|
+
)
|
|
310
|
+
X = None
|
|
311
|
+
if niimg is not None and mask_img is not None:
|
|
312
|
+
mask_img = image.resample_img(
|
|
313
|
+
check_niimg_3d(mask_img),
|
|
314
|
+
target_affine=niimg.affine,
|
|
315
|
+
target_shape=niimg.shape[:3],
|
|
316
|
+
interpolation="nearest",
|
|
317
|
+
)
|
|
318
|
+
X = masking.apply_mask_fmri(niimg, mask_img)
|
|
319
|
+
elif niimg is not None:
|
|
320
|
+
if np.isnan(np.sum(safe_get_data(niimg))):
|
|
321
|
+
warn_with_log(
|
|
322
|
+
"The imgs you have fed into fit_transform() contains NaN "
|
|
323
|
+
"values which will be converted to zeroes."
|
|
324
|
+
)
|
|
325
|
+
X = safe_get_data(niimg, True).reshape([-1, niimg.shape[3]]).T
|
|
326
|
+
else:
|
|
327
|
+
X = safe_get_data(niimg).reshape([-1, niimg.shape[3]]).T
|
|
193
328
|
return X, A
|
|
194
329
|
|
|
195
330
|
|
|
@@ -198,16 +333,17 @@ def _iter_signals_from_spheres(
|
|
|
198
333
|
):
|
|
199
334
|
"""Iterate over spheres.
|
|
200
335
|
|
|
336
|
+
Only the signals of the voxels of the spheres are read, a few volumes at
|
|
337
|
+
a time (see :func:`_read_signals`), so the whole data is never in memory.
|
|
338
|
+
|
|
201
339
|
Parameters
|
|
202
340
|
----------
|
|
203
341
|
seeds : :obj:`list` of triplets of coordinates in native space
|
|
204
342
|
Seed definitions. List of coordinates of the seeds in the same space
|
|
205
343
|
as the images (typically MNI or TAL).
|
|
206
|
-
niimg :
|
|
344
|
+
niimg : 4D Niimg-like object
|
|
207
345
|
See :ref:`extracting_data`.
|
|
208
346
|
Images to process.
|
|
209
|
-
If a 3D niimg is provided, a singleton dimension will be added to
|
|
210
|
-
the output to represent the single scan in the niimg.
|
|
211
347
|
radius: float
|
|
212
348
|
Indicates, in millimeters, the radius for the sphere around the seed.
|
|
213
349
|
allow_overlap: boolean
|
|
@@ -218,11 +354,17 @@ def _iter_signals_from_spheres(
|
|
|
218
354
|
Mask to apply to regions before extracting signals.
|
|
219
355
|
|
|
220
356
|
"""
|
|
221
|
-
|
|
357
|
+
voxels, A = _get_sphere_voxels(
|
|
222
358
|
seeds, niimg, radius, allow_overlap, mask_img=mask_img
|
|
223
359
|
)
|
|
224
|
-
for row in A.rows
|
|
225
|
-
|
|
360
|
+
rows = [np.asarray(row, dtype=int) for row in A.rows]
|
|
361
|
+
# The voxels of any sphere, and their position in the signals read
|
|
362
|
+
used = np.unique(np.concatenate([np.zeros(0, dtype=int), *rows]))
|
|
363
|
+
position = np.full(len(voxels), -1, dtype=int)
|
|
364
|
+
position[used] = np.arange(len(used))
|
|
365
|
+
signals = _read_signals(niimg, voxels[used], masked=mask_img is not None)
|
|
366
|
+
for row in rows:
|
|
367
|
+
yield signals[:, position[row]]
|
|
226
368
|
|
|
227
369
|
|
|
228
370
|
class _JuniferExtractionFunctor:
|
|
@@ -321,6 +463,11 @@ class JuniferNiftiSpheresMasker(NiftiSpheresMasker):
|
|
|
321
463
|
* it allows to pass any callable as the ``agg_func`` parameter.
|
|
322
464
|
* empty spheres do not create an error. Instead, ``agg_func`` is applied to
|
|
323
465
|
an empty array and the result is passed.
|
|
466
|
+
* only the signals of the voxels of the spheres are read, a few volumes at
|
|
467
|
+
a time (``markers.spheres.chunksize``), so the whole data is never in
|
|
468
|
+
memory.
|
|
469
|
+
* ``reports`` is False by default, as the data for the reports (e.g., the
|
|
470
|
+
middle volume of the resampled images) needs the whole data in memory.
|
|
324
471
|
|
|
325
472
|
Parameters
|
|
326
473
|
----------
|
|
@@ -359,6 +506,9 @@ class JuniferNiftiSpheresMasker(NiftiSpheresMasker):
|
|
|
359
506
|
self.agg_func = agg_func
|
|
360
507
|
# nilearn's default (False) is deprecated, use the new equivalent
|
|
361
508
|
kwargs.setdefault("standardize", None)
|
|
509
|
+
# The reports are not used, and computing their data at fit time
|
|
510
|
+
# loads (and resamples) the whole data
|
|
511
|
+
kwargs.setdefault("reports", False)
|
|
362
512
|
super().__init__(
|
|
363
513
|
seeds=seeds,
|
|
364
514
|
radius=radius,
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
# Authors: Synchon Mandal <s.mandal@fz-juelich.de>
|
|
4
4
|
# License: AGPL
|
|
5
5
|
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
6
8
|
import nibabel
|
|
7
9
|
import numpy as np
|
|
8
10
|
import pytest
|
|
@@ -12,6 +14,12 @@ from nilearn.maskers import NiftiSpheresMasker
|
|
|
12
14
|
from numpy.testing import assert_array_equal
|
|
13
15
|
|
|
14
16
|
from junifer.external.nilearn import JuniferNiftiSpheresMasker
|
|
17
|
+
from junifer.external.nilearn.junifer_nifti_spheres_masker import (
|
|
18
|
+
_apply_mask_and_get_affinity,
|
|
19
|
+
_get_sphere_voxels,
|
|
20
|
+
_iter_signals_from_spheres,
|
|
21
|
+
)
|
|
22
|
+
from junifer.testing import config_override
|
|
15
23
|
|
|
16
24
|
|
|
17
25
|
# New BSD License
|
|
@@ -397,3 +405,213 @@ def test_junifer_and_nilearn_mean_agg_are_equal(
|
|
|
397
405
|
# Checks
|
|
398
406
|
assert junifer_output.shape == nilearn_output.shape
|
|
399
407
|
np.testing.assert_almost_equal(junifer_output, nilearn_output)
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
def _spheres_data(
|
|
411
|
+
tmp_path: Path, dtype: str = "float32", with_nan: bool = True
|
|
412
|
+
) -> tuple[nibabel.Nifti1Image, nibabel.Nifti1Image, list]:
|
|
413
|
+
"""Create a file-backed 4D image, a mask and seeds for the spheres."""
|
|
414
|
+
rng = np.random.default_rng(42)
|
|
415
|
+
affine = np.diag([3.0, 3.0, 3.0, 1.0])
|
|
416
|
+
affine[:3, 3] = -30
|
|
417
|
+
data = rng.normal(100, 10, size=(21, 21, 21, 23))
|
|
418
|
+
if with_nan:
|
|
419
|
+
data[10, 10, 10, 3] = np.nan
|
|
420
|
+
nibabel.save(
|
|
421
|
+
nibabel.Nifti1Image(data.astype(dtype), affine), tmp_path / "data.nii"
|
|
422
|
+
)
|
|
423
|
+
mask = np.zeros((21, 21, 21), dtype="int8")
|
|
424
|
+
mask[4:17, 3:18, 5:16] = 1
|
|
425
|
+
mask_img = nibabel.Nifti1Image(mask, affine)
|
|
426
|
+
# The last seed is outside the image, so its sphere is empty
|
|
427
|
+
seeds = [(0, 0, 0), (12, -9, 6), (-24, 24, 24), (100, 100, 100)]
|
|
428
|
+
return nibabel.load(tmp_path / "data.nii"), mask_img, seeds
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
@pytest.mark.parametrize("chunk_size", [1, 5, 23, 100])
|
|
432
|
+
@pytest.mark.parametrize("masked", [True, False])
|
|
433
|
+
@pytest.mark.parametrize(
|
|
434
|
+
"dtype, with_nan",
|
|
435
|
+
[
|
|
436
|
+
("float32", True),
|
|
437
|
+
("float32", False),
|
|
438
|
+
("float64", True),
|
|
439
|
+
("int16", False),
|
|
440
|
+
],
|
|
441
|
+
)
|
|
442
|
+
def test_iter_signals_from_spheres_chunks(
|
|
443
|
+
tmp_path: Path, chunk_size: int, masked: bool, dtype: str, with_nan: bool
|
|
444
|
+
) -> None:
|
|
445
|
+
"""Test the signals of the spheres read in chunks of volumes.
|
|
446
|
+
|
|
447
|
+
They are the same as the ones extracted from the whole data.
|
|
448
|
+
|
|
449
|
+
Parameters
|
|
450
|
+
----------
|
|
451
|
+
tmp_path : pathlib.Path
|
|
452
|
+
The path to the test directory.
|
|
453
|
+
chunk_size : int
|
|
454
|
+
The parametrized number of volumes to read at once.
|
|
455
|
+
masked : bool
|
|
456
|
+
The parametrized use of a mask.
|
|
457
|
+
dtype : str
|
|
458
|
+
The parametrized data type.
|
|
459
|
+
with_nan : bool
|
|
460
|
+
The parametrized presence of a NaN value in the data.
|
|
461
|
+
|
|
462
|
+
"""
|
|
463
|
+
img, mask_img, seeds = _spheres_data(tmp_path, dtype, with_nan)
|
|
464
|
+
mask_img = mask_img if masked else None
|
|
465
|
+
X, A = _apply_mask_and_get_affinity(
|
|
466
|
+
seeds, img, radius=4.0, allow_overlap=True, mask_img=mask_img
|
|
467
|
+
)
|
|
468
|
+
with config_override("markers.spheres.chunksize", chunk_size):
|
|
469
|
+
signals = list(
|
|
470
|
+
_iter_signals_from_spheres(
|
|
471
|
+
seeds, img, radius=4.0, allow_overlap=True, mask_img=mask_img
|
|
472
|
+
)
|
|
473
|
+
)
|
|
474
|
+
assert len(signals) == len(seeds)
|
|
475
|
+
assert signals[-1].shape == (23, 0)
|
|
476
|
+
for row, t_signals in zip(A.rows, signals, strict=True):
|
|
477
|
+
assert t_signals.dtype == X.dtype
|
|
478
|
+
assert_array_equal(t_signals, X[:, row])
|
|
479
|
+
|
|
480
|
+
|
|
481
|
+
def test_JuniferNiftiSpheresMasker_input_unchanged(tmp_path: Path) -> None:
|
|
482
|
+
"""Test the masker does not change the input data.
|
|
483
|
+
|
|
484
|
+
Parameters
|
|
485
|
+
----------
|
|
486
|
+
tmp_path : pathlib.Path
|
|
487
|
+
The path to the test directory.
|
|
488
|
+
|
|
489
|
+
"""
|
|
490
|
+
img, _, seeds = _spheres_data(tmp_path)
|
|
491
|
+
data = np.asarray(img.dataobj).copy()
|
|
492
|
+
in_memory = nibabel.Nifti1Image(data.copy(), img.affine)
|
|
493
|
+
with pytest.warns(RuntimeWarning, match="NaN values"):
|
|
494
|
+
JuniferNiftiSpheresMasker(
|
|
495
|
+
seeds=seeds, radius=4.0, allow_overlap=True
|
|
496
|
+
).fit_transform(in_memory)
|
|
497
|
+
# The NaN is still there
|
|
498
|
+
assert_array_equal(np.asarray(in_memory.dataobj), data)
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
@pytest.mark.parametrize("chunk_size", [0, -1, 1.5, True, "10"])
|
|
502
|
+
def test_JuniferNiftiSpheresMasker_chunk_size_error(
|
|
503
|
+
tmp_path: Path, chunk_size: object
|
|
504
|
+
) -> None:
|
|
505
|
+
"""Test the masker with an invalid number of volumes to read at once.
|
|
506
|
+
|
|
507
|
+
Parameters
|
|
508
|
+
----------
|
|
509
|
+
tmp_path : pathlib.Path
|
|
510
|
+
The path to the test directory.
|
|
511
|
+
chunk_size : object
|
|
512
|
+
The parametrized invalid number of volumes.
|
|
513
|
+
|
|
514
|
+
"""
|
|
515
|
+
img, _, seeds = _spheres_data(tmp_path)
|
|
516
|
+
with config_override("markers.spheres.chunksize", chunk_size):
|
|
517
|
+
with pytest.raises(ValueError, match="must be a positive integer"):
|
|
518
|
+
JuniferNiftiSpheresMasker(seeds=seeds, radius=4.0).fit_transform(
|
|
519
|
+
img
|
|
520
|
+
)
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
def test_JuniferNiftiSpheresMasker_reports() -> None:
|
|
524
|
+
"""Test the reports are disabled by default, as they load the data."""
|
|
525
|
+
assert JuniferNiftiSpheresMasker(seeds=[(1, 1, 1)]).reports is False
|
|
526
|
+
masker = JuniferNiftiSpheresMasker(seeds=[(1, 1, 1)], reports=True)
|
|
527
|
+
assert masker.reports is True
|
|
528
|
+
|
|
529
|
+
|
|
530
|
+
def test_get_sphere_voxels_mask_only(tmp_path: Path) -> None:
|
|
531
|
+
"""Test the voxels of the spheres with only a mask, without an image.
|
|
532
|
+
|
|
533
|
+
Parameters
|
|
534
|
+
----------
|
|
535
|
+
tmp_path : pathlib.Path
|
|
536
|
+
The path to the test directory.
|
|
537
|
+
|
|
538
|
+
"""
|
|
539
|
+
img, mask_img, seeds = _spheres_data(tmp_path)
|
|
540
|
+
voxels, A = _get_sphere_voxels(
|
|
541
|
+
seeds, img, radius=4.0, allow_overlap=True, mask_img=mask_img
|
|
542
|
+
)
|
|
543
|
+
mask_voxels, mask_A = _get_sphere_voxels(
|
|
544
|
+
seeds, None, radius=4.0, allow_overlap=True, mask_img=mask_img
|
|
545
|
+
)
|
|
546
|
+
assert_array_equal(mask_voxels, voxels)
|
|
547
|
+
assert mask_A.rows.tolist() == A.rows.tolist()
|
|
548
|
+
# No signals without an image
|
|
549
|
+
X, _ = _apply_mask_and_get_affinity(
|
|
550
|
+
seeds, None, radius=4.0, allow_overlap=True, mask_img=mask_img
|
|
551
|
+
)
|
|
552
|
+
assert X is None
|
|
553
|
+
with pytest.raises(ValueError, match="Either a niimg or a mask_img"):
|
|
554
|
+
_get_sphere_voxels(seeds, None, radius=4.0, allow_overlap=True)
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
@pytest.mark.parametrize("dtype", ["auto", "float64"])
|
|
558
|
+
def test_JuniferNiftiSpheresMasker_dtype(tmp_path: Path, dtype: str) -> None:
|
|
559
|
+
"""Test the data type of the signals is the same as with nilearn.
|
|
560
|
+
|
|
561
|
+
Parameters
|
|
562
|
+
----------
|
|
563
|
+
tmp_path : pathlib.Path
|
|
564
|
+
The path to the test directory.
|
|
565
|
+
dtype : str
|
|
566
|
+
The parametrized data type of the extraction.
|
|
567
|
+
|
|
568
|
+
"""
|
|
569
|
+
img, _, seeds = _spheres_data(tmp_path, "float32", with_nan=False)
|
|
570
|
+
junifer_signals = JuniferNiftiSpheresMasker(
|
|
571
|
+
seeds=seeds[:3], radius=4.0, allow_overlap=True, dtype=dtype
|
|
572
|
+
).fit_transform(img)
|
|
573
|
+
nilearn_signals = NiftiSpheresMasker(
|
|
574
|
+
seeds=seeds[:3], radius=4.0, allow_overlap=True, dtype=dtype
|
|
575
|
+
).fit_transform(img)
|
|
576
|
+
assert junifer_signals.dtype == nilearn_signals.dtype
|
|
577
|
+
np.testing.assert_allclose(junifer_signals, nilearn_signals, rtol=1e-6)
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
@pytest.mark.parametrize("chunk_size", [5, 100])
|
|
581
|
+
@pytest.mark.parametrize("masked", [True, False])
|
|
582
|
+
@pytest.mark.parametrize("with_nan", [True, False])
|
|
583
|
+
def test_junifer_and_nilearn_spheres_are_equal(
|
|
584
|
+
tmp_path: Path, chunk_size: int, masked: bool, with_nan: bool
|
|
585
|
+
) -> None:
|
|
586
|
+
"""Test the signals of the spheres are the same as with nilearn.
|
|
587
|
+
|
|
588
|
+
The signals are read in chunks of volumes from a file-backed image.
|
|
589
|
+
|
|
590
|
+
Parameters
|
|
591
|
+
----------
|
|
592
|
+
tmp_path : pathlib.Path
|
|
593
|
+
The path to the test directory.
|
|
594
|
+
chunk_size : int
|
|
595
|
+
The parametrized number of volumes to read at once.
|
|
596
|
+
masked : bool
|
|
597
|
+
The parametrized use of a mask.
|
|
598
|
+
with_nan : bool
|
|
599
|
+
The parametrized presence of a NaN value in the data.
|
|
600
|
+
|
|
601
|
+
"""
|
|
602
|
+
img, mask_img, seeds = _spheres_data(tmp_path, with_nan=with_nan)
|
|
603
|
+
# Only the seeds with voxels in the mask, as nilearn fails for empty
|
|
604
|
+
# spheres
|
|
605
|
+
params = {
|
|
606
|
+
"seeds": seeds[:2],
|
|
607
|
+
"radius": 4.0,
|
|
608
|
+
"allow_overlap": True,
|
|
609
|
+
"mask_img": mask_img if masked else None,
|
|
610
|
+
}
|
|
611
|
+
with config_override("markers.spheres.chunksize", chunk_size):
|
|
612
|
+
junifer_signals = JuniferNiftiSpheresMasker(**params).fit_transform(
|
|
613
|
+
img
|
|
614
|
+
)
|
|
615
|
+
nilearn_signals = NiftiSpheresMasker(**params).fit_transform(img)
|
|
616
|
+
assert junifer_signals.dtype == nilearn_signals.dtype
|
|
617
|
+
np.testing.assert_allclose(junifer_signals, nilearn_signals, rtol=1e-6)
|
|
@@ -194,6 +194,8 @@ class MapsAggregation(BaseMarker):
|
|
|
194
194
|
mask_img=mask_img,
|
|
195
195
|
resampling_target=None,
|
|
196
196
|
standardize=None,
|
|
197
|
+
# Not used, and computing their data at fit time reads the data
|
|
198
|
+
reports=False,
|
|
197
199
|
)
|
|
198
200
|
# Mask the input data and extract data
|
|
199
201
|
# nilearn maskers return 1D arrays for 3D images, keep 2D
|
|
@@ -220,7 +220,9 @@ class ParcelAggregation(BaseMarker):
|
|
|
220
220
|
# tailored to the input image, so no target affine is needed (it
|
|
221
221
|
# would make nilearn crop and copy the input image)
|
|
222
222
|
logger.debug("Masking")
|
|
223
|
-
|
|
223
|
+
# No reports, as they are not used and computing their data at fit
|
|
224
|
+
# time reads the data
|
|
225
|
+
masker = NiftiMasker(parcellation_bin, standardize=None, reports=False)
|
|
224
226
|
# Mask the input data and the parcellation
|
|
225
227
|
# nilearn maskers return 1D arrays for 3D images, keep 2D
|
|
226
228
|
data = np.atleast_2d(masker.fit_transform(t_input_img))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: junifer
|
|
3
|
-
Version: 0.0.8.
|
|
3
|
+
Version: 0.0.8.dev346
|
|
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>
|
|
@@ -157,6 +157,7 @@ docs/changes/newsfragments/530.enh.1
|
|
|
157
157
|
docs/changes/newsfragments/531.enh
|
|
158
158
|
docs/changes/newsfragments/533.enh
|
|
159
159
|
docs/changes/newsfragments/533.enh.1
|
|
160
|
+
docs/changes/newsfragments/534.enh
|
|
160
161
|
docs/extending/confounds_format.rst
|
|
161
162
|
docs/extending/coordinates.rst
|
|
162
163
|
docs/extending/data_dump_asset.rst
|
|
@@ -141,6 +141,7 @@
|
|
|
141
141
|
"docs/changes/newsfragments/531.enh",
|
|
142
142
|
"docs/changes/newsfragments/533.enh",
|
|
143
143
|
"docs/changes/newsfragments/533.enh.1",
|
|
144
|
+
"docs/changes/newsfragments/534.enh",
|
|
144
145
|
"docs/conf.py",
|
|
145
146
|
"docs/contribution.rst",
|
|
146
147
|
"docs/extending/confounds_format.rst",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|