junifer 0.0.8.dev311__tar.gz → 0.0.8.dev314__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.dev311/junifer.egg-info → junifer-0.0.8.dev314}/PKG-INFO +1 -1
- junifer-0.0.8.dev314/docs/changes/newsfragments/525.bugfix +1 -0
- junifer-0.0.8.dev314/docs/changes/newsfragments/525.bugfix.1 +1 -0
- junifer-0.0.8.dev314/docs/changes/newsfragments/525.change +1 -0
- junifer-0.0.8.dev314/docs/changes/newsfragments/525.change.1 +1 -0
- junifer-0.0.8.dev314/docs/changes/newsfragments/525.change.2 +1 -0
- junifer-0.0.8.dev314/docs/changes/newsfragments/525.change.3 +1 -0
- junifer-0.0.8.dev314/docs/changes/newsfragments/525.change.4 +1 -0
- junifer-0.0.8.dev314/docs/changes/newsfragments/525.doc +1 -0
- junifer-0.0.8.dev314/docs/changes/newsfragments/525.enh +1 -0
- junifer-0.0.8.dev314/docs/changes/newsfragments/525.feature +1 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/extending/datagrabber.rst +41 -12
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/index.rst +1 -0
- junifer-0.0.8.dev314/docs/internals.rst +169 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/understanding/storage.rst +8 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/_version.py +3 -3
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/tests/test_functions.py +126 -3
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/base.py +28 -7
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/multiple.py +24 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/pattern.py +28 -12
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/tests/test_multiple.py +8 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/tests/test_pattern.py +10 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/pipeline/update_meta_mixin.py +9 -1
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/base.py +3 -2
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +2 -2
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/tests/test_preprocess_base.py +14 -4
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/storage/base.py +62 -6
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/storage/hdf5.py +104 -8
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/storage/pandas_base.py +32 -2
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/storage/sqlite.py +62 -10
- junifer-0.0.8.dev314/junifer/storage/tests/test_repeated_storage.py +293 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/storage/tests/test_sqlite.py +2 -2
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/storage/tests/test_storage_base.py +4 -2
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/storage/tests/test_utils.py +67 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/storage/utils.py +27 -7
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314/junifer.egg-info}/PKG-INFO +1 -1
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer.egg-info/SOURCES.txt +12 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer.egg-info/scm_file_list.json +12 -0
- junifer-0.0.8.dev314/junifer.egg-info/scm_version.json +8 -0
- junifer-0.0.8.dev311/junifer.egg-info/scm_version.json +0 -8
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.dockerignore +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.github/dependabot.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.github/pull_request_template.md +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.github/workflows/check-stale.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.github/workflows/ci.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.github/workflows/docker-publish.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.github/workflows/docs-preview.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.github/workflows/docs.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.github/workflows/lint.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.github/workflows/publish.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.gitignore +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.gitmodules +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.pre-commit-config.yaml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/.python-version +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/AUTHORS.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/Dockerfile +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/Dockerfile-ci +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/LICENSE.md +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/README.md +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/codecov.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/conda-env.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/Makefile +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/_static/css/custom.css +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/_static/css/version_selector.css +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/_static/js/custom.js +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/_templates/versions.html +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/api/api.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/api/cli.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/api/configs.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/api/data.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/api/datagrabbers.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/api/datareaders.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/api/index.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/api/markers.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/api/nilearn.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/api/onthefly.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/api/pipeline.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/api/preprocessing.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/api/stats.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/api/storage.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/api/testing.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/api/utils.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/builtin.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/contributors.inc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/.gitignore +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/239.enh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/364.doc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/364.enh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/364.feature +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/474.misc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/482.bugfix +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/492.bugfix +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/499.enh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/502.bugfix +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/503.enh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/504.bugfix +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/504.misc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/509.enh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/510.bugfix +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/511.bugfix +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/511.bugfix.1 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/511.change +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/511.enh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/511.enh.1 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/511.feature +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/511.misc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/511.misc.1 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/513.doc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/513.misc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/514.bugfix +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/514.bugfix.1 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/514.enh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/515.doc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/515.enh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/515.enh.1 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/515.misc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/515.misc.1 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/516.bugfix +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/516.bugfix.1 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/516.bugfix.2 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/516.change +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/516.change.1 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/516.misc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.bugfix +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.bugfix.1 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.bugfix.2 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.bugfix.3 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.bugfix.4 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.bugfix.5 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.bugfix.6 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.change +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.doc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.misc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.misc.1 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.misc.2 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.misc.3 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.removal +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/521.bugfix +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/522.bugfix +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/522.enh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/523.misc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/524.bugfix +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/524.bugfix.1 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/524.change +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/524.change.1 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/524.change.2 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/524.doc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/524.enh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/524.feature +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/changes/newsfragments/524.feature.1 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/conf.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/contribution.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/extending/confounds_format.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/extending/coordinates.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/extending/data_dump_asset.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/extending/data_registries.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/extending/data_types.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/extending/dependencies.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/extending/extension.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/extending/index.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/extending/logging.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/extending/maps.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/extending/marker.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/extending/masks.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/extending/parcellations.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/extending/plugins.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/extending/preprocessor.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/faq.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/help.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/images/junifer_logo.png +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/installation.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/links.inc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/maintaining.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/poly.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/poly_files/patches/version_banner.html +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/poly_files/patches/versions.html +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/poly_files/templates/index.html +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/starting.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/understanding/data.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/understanding/datagrabber.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/understanding/datareader.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/understanding/index.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/understanding/marker.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/understanding/pipeline.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/understanding/preprocess.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/using/codeless.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/using/configuring.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/using/dumping.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/using/index.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/using/masks.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/using/queueing.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/using/running.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/docs/whats_new.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/examples/README.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/examples/norun_hcpfc_pearson.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/examples/norun_ukbvm_gmd.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/examples/run_compute_parcel_mean.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/examples/run_datagrabber_bids_datalad.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/examples/run_ets_rss_marker.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/examples/run_junifer_julearn.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/examples/run_run_gmd_mean.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/examples/yamls/gmd_mean.yaml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/examples/yamls/partly_cloudy_agg_mean_tian.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/examples/yamls/ukb_gmd_mean.yaml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/ignore_words.txt +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/decorators.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/functions.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/queue_context/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/queue_context/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/queue_context/gnu_parallel_local_adapter.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/queue_context/htcondor_adapter.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/queue_context/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/queue_context/queue_context_adapter.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/queue_context/tests/test_htcondor_adapter.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/afni/3dRSFC +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/afni/3dReHo +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/afni/afni +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/afni/run_afni_docker.sh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/ants/ResampleImage +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/ants/antsApplyTransforms +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/ants/run_ants_docker.sh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/freesurfer/mri_binarize +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/freesurfer/mri_mc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/freesurfer/mri_pretess +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/freesurfer/mris_convert +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/freesurfer/run_freesurfer_docker.sh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/fsl/applywarp +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/fsl/flirt +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/fsl/img2imgcoord +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/fsl/std2imgcoord +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/run_conda.bash +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/run_conda.zsh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/run_venv.bash +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/res/run_venv.zsh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/api/tests/test_decorators.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/cli/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/cli/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/cli/cli.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/cli/parser.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/cli/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/cli/tests/data/gmd_mean.yaml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/cli/tests/data/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/cli/tests/test_cli.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/cli/tests/test_cli_utils.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/cli/utils.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/juseless/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/juseless/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/juseless/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/configs/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/conftest.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/_dispatch.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/coordinates/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/coordinates/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/coordinates/_ants_coordinates_warper.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/coordinates/_coordinates.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/coordinates/_fsl_coordinates_warper.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/coordinates/tests/test_coordinates.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/coordinates/tests/test_coordinates_names.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/maps/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/maps/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/maps/_ants_maps_warper.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/maps/_fsl_maps_warper.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/maps/_maps.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/maps/tests/test_maps.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/masks/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/masks/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/masks/_ants_mask_warper.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/masks/_fsl_mask_warper.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/masks/_masks.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/masks/tests/test_masks.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/parcellations/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/parcellations/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/parcellations/_ants_parcellation_warper.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/parcellations/_fsl_parcellation_warper.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/parcellations/_parcellations.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/parcellations/tests/test_parcellations.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/pipeline_data_registry_base.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/template_spaces.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/tests/test_data_utils.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/tests/test_dispatch.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/tests/test_template_spaces.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/data/utils.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/_types.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/id1000.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/piop1.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/piop2.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/datalad_base.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/dmcc13_benchmark.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/hcp1200/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/hcp1200/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/hcp1200/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/pattern_datalad.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/pattern_validation_mixin.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/tests/test_base.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datagrabber/tests/test_pattern_validation_mixin.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datareader/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datareader/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datareader/default.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datareader/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/datareader/tests/test_default_reader.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.codecov.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.codespellignore +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/documentation.md +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/questions-help-support.md +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/dependabot.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/workflows/build.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/workflows/code-style.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/workflows/doc.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/workflows/publish.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/workflows/pytest.yml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.gitignore +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/LICENSE +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/README.md +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/_version.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/asymmetry.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/brainprint.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/cli/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/cli/help_text.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/cli/parser.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/cli/utils.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/commands/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/commands/sys_info.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/surfaces.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/utils/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/utils/_config.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/utils/tests/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/utils/tests/test_config.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/utils/utils.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/Makefile +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/_static/.gitkeep +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/_templates/autosummary/class.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/_templates/autosummary/function.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/_templates/autosummary/module.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/api/index.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/conf.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/index.rst +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/links.inc +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/make.bat +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/references.bib +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/pyproject.toml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/setup.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/nilearn/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/nilearn/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/nilearn/junifer_connectivity_measure.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/nilearn/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/external/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/base.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/brainprint.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/complexity_base.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/hurst_exponent.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/perm_entropy.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/range_entropy.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/range_entropy_auc.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/sample_entropy.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/ets_rss.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/falff/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/falff/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/falff/_afni_falff.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/falff/_junifer_falff.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/falff/falff_base.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/falff/falff_maps.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/falff/falff_parcels.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/falff/falff_spheres.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/falff/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/falff/tests/test_falff_maps.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/edge_functional_connectivity_maps.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/functional_connectivity_maps.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_maps.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_maps.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/maps_aggregation.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/parcel_aggregation.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/reho/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/reho/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/reho/_afni_reho.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/reho/_junifer_reho.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/reho/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/reho/reho_base.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/reho/reho_maps.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/reho/reho_parcels.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/reho/reho_spheres.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/reho/tests/test_junifer_reho.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/reho/tests/test_reho_maps.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/sphere_aggregation.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/temporal_snr_maps.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/tests/test_temporal_snr_maps.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/tests/test_brainprint.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/tests/test_ets_rss.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/tests/test_lost_regions.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/tests/test_maps_aggregation.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/tests/test_marker_utils.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/tests/test_markers_base.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/markers/utils.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/onthefly/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/onthefly/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/onthefly/_brainprint.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/onthefly/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/onthefly/read_transform.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/onthefly/tests/test_read_transform.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/pipeline/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/pipeline/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/pipeline/_data_object_dumper.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/pipeline/marker_collection.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/pipeline/pipeline_component_registry.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/pipeline/pipeline_step_mixin.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/pipeline/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/pipeline/tests/test_data_object_dumper.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/pipeline/tests/test_marker_collection.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/pipeline/tests/test_pipeline_component_registry.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/pipeline/tests/test_workdir_manager.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/pipeline/utils.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/pipeline/workdir_manager.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/_temporal_filter.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/_temporal_slicer.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/confounds/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/confounds/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/confounds/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/smoothing/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/smoothing/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/smoothing/_afni_smoothing.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/smoothing/_fsl_smoothing.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/smoothing/_nilearn_smoothing.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/smoothing/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/smoothing/smoothing.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/smoothing/tests/test_smoothing.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/tests/test_temporal_filter.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/tests/test_temporal_slicer.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/warping/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/warping/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/warping/_ants_warper.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/warping/_fsl_warper.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/warping/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/warping/space_warper.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/preprocess/warping/tests/test_space_warper.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/stats.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/storage/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/storage/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/storage/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/storage/tests/data/collected_h5io_fork.hdf5 +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/storage/tests/test_hdf5.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/storage/tests/test_pandas_base.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/testing/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/testing/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/testing/datagrabbers.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/testing/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/testing/registry.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/testing/tests/test_adhdtesting_datagrabber.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/testing/tests/test_testing_registry.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/testing/tests/test_testing_utils.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/testing/tests/test_uclacnpvbmtesting_datagrabber.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/testing/utils.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/tests/test_main.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/tests/test_stats.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/typing/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/typing/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/typing/_typing.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/typing/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/utils/__init__.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/utils/__init__.pyi +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/utils/_config.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/utils/_yaml.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/utils/fs.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/utils/helpers.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/utils/logging.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/utils/py.typed +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/utils/singleton.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/utils/tests/test_config.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/utils/tests/test_fs.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/utils/tests/test_helpers.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer/utils/tests/test_logging.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer.egg-info/dependency_links.txt +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer.egg-info/entry_points.txt +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer.egg-info/requires.txt +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/junifer.egg-info/top_level.txt +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/justfile +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/pyproject.toml +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/scripts/start.sh +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/setup.cfg +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/setup.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/tools/create_aomic1000_example_dataset.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/tools/create_aomicpiop1_example_dataset.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/tools/create_aomicpiop2_example_dataset.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/tools/create_bids_example_dataset.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/tools/create_bids_example_dataset_sessions.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/tools/create_hcp1200_example_dataset.py +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/tox.ini +0 -0
- {junifer-0.0.8.dev311 → junifer-0.0.8.dev314}/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.dev314
|
|
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
|
+
Fix the same features being stored more than once: for each value of the element keys that the data does not depend on (e.g., the VBM features of a subject once per task), when running an element again, and when collecting again (:class:`.SQLiteFeatureStorage` also collected its own output file) by `Fede Raimondo`_
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Fix the metadata of the preprocessors being replaced by the one of the last preprocessor by `Fede Raimondo`_
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Add the ``processed_element`` argument to the ``store_*`` methods of :class:`.BaseFeatureStorage`, the element being processed, so the concrete storages can name the file of each element; custom storages must accept it by `Fede Raimondo`_
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Store the metadata of the preprocessors as a list, in order, in ``meta["preprocess"]`` by `Fede Raimondo`_
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Use ``upsert="ignore"`` by default in :class:`.SQLiteFeatureStorage`, so the elements already stored are not stored again by `Fede Raimondo`_
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Add the version of ``junifer`` to the MD5 of the features, as for the dependencies of the markers and steps, for reproducibility: features computed with different versions of ``junifer`` are different features, so the differences between features (e.g., between datasets) can only come from the data. Running again with a new version stores the features again, with the same name, next to the ones computed with the previous version by `Fede Raimondo`_
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Raise an error in the ``collect`` method of :class:`.HDF5FeatureStorage` and :class:`.SQLiteFeatureStorage` if a file to collect has more than one element, as ``collect`` only compacts the files of single elements by `Fede Raimondo`_
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Add the "Implementation details" page with the elements, the fields of the metadata and the storage, and document the data types with different element keys when extending DataGrabbers by `Fede Raimondo`_
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Store the features for the element with only the keys that the data type depends on (e.g., only ``subject`` for VBM data, when the elements also have ``task``), and skip the elements already stored by `Fede Raimondo`_
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Add :meth:`.BaseDataGrabber.get_type_element_keys` to get the element keys that the data of a data type depends on by `Fede Raimondo`_
|
|
@@ -478,7 +478,13 @@ need to implement the following methods:
|
|
|
478
478
|
|
|
479
479
|
- ``get_item``: to get a single item from the dataset.
|
|
480
480
|
- ``get_elements``: to get the list of all elements present in the dataset
|
|
481
|
-
- ``get_element_keys``: to get the keys of the elements in the dataset.
|
|
481
|
+
- ``get_element_keys``: to get the keys of the elements in the dataset. They
|
|
482
|
+
also give the order of the values in each element, which must match the
|
|
483
|
+
parameters of ``get_item``.
|
|
484
|
+
|
|
485
|
+
Optionally, if the data of some data types does not depend on all the keys of
|
|
486
|
+
the element, we can also implement ``get_type_element_keys`` (see
|
|
487
|
+
:ref:`extending_datagrabbers_type_keys`).
|
|
482
488
|
|
|
483
489
|
.. note::
|
|
484
490
|
|
|
@@ -517,17 +523,15 @@ need to remember that for session *ses-03* there is no BOLD data.
|
|
|
517
523
|
from itertools import product
|
|
518
524
|
|
|
519
525
|
|
|
520
|
-
def get_elements(self) -> list[str]:
|
|
526
|
+
def get_elements(self) -> list[tuple[str, str]]:
|
|
521
527
|
subjects = ["sub-01", "sub-02", "sub-03"]
|
|
522
528
|
sessions = ["ses-01", "ses-02"]
|
|
523
529
|
|
|
524
530
|
# If we are not working on BOLD data, we can add "ses-03"
|
|
525
531
|
if "BOLD" not in self.types:
|
|
526
532
|
sessions.append("ses-03")
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
elements.append({"subject": subject, "session": session})
|
|
530
|
-
return elements
|
|
533
|
+
# The values of each element, in the order of the element keys
|
|
534
|
+
return list(product(subjects, sessions))
|
|
531
535
|
|
|
532
536
|
|
|
533
537
|
And finally, we can implement the ``get_element_keys`` method. This method needs
|
|
@@ -540,11 +544,39 @@ method, in the same order.
|
|
|
540
544
|
def get_element_keys(self) -> list[str]:
|
|
541
545
|
return ["subject", "session"]
|
|
542
546
|
|
|
547
|
+
.. _extending_datagrabbers_type_keys:
|
|
548
|
+
|
|
549
|
+
Data types with different keys
|
|
550
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
551
|
+
|
|
552
|
+
By default, the data of every data type depends on all the element keys. If
|
|
553
|
+
the data of a data type only depends on some of them, the DataGrabber can say
|
|
554
|
+
so by implementing ``get_type_element_keys``, which returns the element keys
|
|
555
|
+
that the data of a data type depends on. For example, if the ``T1w`` image of
|
|
556
|
+
our dataset was acquired once for each subject, instead of once for each
|
|
557
|
+
session:
|
|
558
|
+
|
|
559
|
+
.. code-block:: python
|
|
560
|
+
|
|
561
|
+
def get_type_element_keys(self, data_type: str) -> list[str]:
|
|
562
|
+
if data_type == "T1w":
|
|
563
|
+
return ["subject"]
|
|
564
|
+
return ["subject", "session"]
|
|
565
|
+
|
|
566
|
+
Then, the ``T1w`` data (and the features computed from it) is stored once for
|
|
567
|
+
each subject, instead of once for each session (see :ref:`internals`). The
|
|
568
|
+
element keys must still be all the keys that the data types to grab depend on:
|
|
569
|
+
if only ``T1w`` was grabbed, ``get_element_keys`` should return
|
|
570
|
+
``["subject"]`` (and ``get_elements`` and ``get_item`` should only use the
|
|
571
|
+
subject).
|
|
572
|
+
|
|
543
573
|
|
|
544
574
|
So, to summarise, our DataGrabber will look like this:
|
|
545
575
|
|
|
546
576
|
.. code-block:: python
|
|
547
577
|
|
|
578
|
+
from itertools import product
|
|
579
|
+
|
|
548
580
|
from junifer.api.decorators import register_datagrabber
|
|
549
581
|
from junifer.datagrabber import BaseDataGrabber
|
|
550
582
|
|
|
@@ -566,18 +598,15 @@ So, to summarise, our DataGrabber will look like this:
|
|
|
566
598
|
}
|
|
567
599
|
return out
|
|
568
600
|
|
|
569
|
-
def get_elements(self) -> list[str]:
|
|
601
|
+
def get_elements(self) -> list[tuple[str, str]]:
|
|
570
602
|
subjects = ["sub-01", "sub-02", "sub-03"]
|
|
571
603
|
sessions = ["ses-01", "ses-02"]
|
|
572
604
|
|
|
573
605
|
# If we are not working on BOLD data, we can add "ses-03"
|
|
574
606
|
if "BOLD" not in self.types:
|
|
575
607
|
sessions.append("ses-03")
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
for session in sessions:
|
|
579
|
-
elements.append({"subject": subject, "session": session})
|
|
580
|
-
return elements
|
|
608
|
+
# The values of each element, in the order of the element keys
|
|
609
|
+
return list(product(subjects, sessions))
|
|
581
610
|
|
|
582
611
|
def get_element_keys(self) -> list[str]:
|
|
583
612
|
return ["subject", "session"]
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
.. include:: links.inc
|
|
2
|
+
|
|
3
|
+
.. _internals:
|
|
4
|
+
|
|
5
|
+
Implementation details
|
|
6
|
+
======================
|
|
7
|
+
|
|
8
|
+
This section describes some of the assumptions and technical details of
|
|
9
|
+
``junifer``, for developers. See the docstrings of the mentioned functions and
|
|
10
|
+
classes for more details.
|
|
11
|
+
|
|
12
|
+
Elements
|
|
13
|
+
--------
|
|
14
|
+
|
|
15
|
+
* The keys of the elements of a :class:`.PatternDataGrabber`
|
|
16
|
+
(:meth:`.PatternDataGrabber.get_element_keys`) are the replacements used by
|
|
17
|
+
the patterns (including the nested ones) of the data types to grab, in the
|
|
18
|
+
order of ``replacements``.
|
|
19
|
+
* :meth:`.PatternDataGrabber.get_elements` finds the elements of each pattern
|
|
20
|
+
in the files (translating the Unix-like path expansion directives of the
|
|
21
|
+
patterns to a regular expression) and joins the elements of the patterns on
|
|
22
|
+
their common keys (``_join_elements``), so an element is available if it has
|
|
23
|
+
the files of all the data types, regardless of their order.
|
|
24
|
+
* The values of the replacements to grab (:meth:`.PatternDataGrabber.get_replacement_values`)
|
|
25
|
+
are given by ``replacements`` (as a dictionary) or by the fields linked to
|
|
26
|
+
the replacements in ``_REPLACEMENT_FIELDS``, but not both. They filter the
|
|
27
|
+
elements found in the files, and grabbing an element with other values
|
|
28
|
+
raises an error (``_check_element``, called by
|
|
29
|
+
``BaseDataGrabber.__getitem__``).
|
|
30
|
+
* :meth:`.BaseDataGrabber.select_elements` selects the elements to run: the
|
|
31
|
+
selectors must have the same number of values. If they have a value for
|
|
32
|
+
each element key, they are the elements (the dataset is not searched),
|
|
33
|
+
otherwise they select the elements of the dataset that have their values.
|
|
34
|
+
* :class:`.MultipleDataGrabber` joins the elements of its DataGrabbers on
|
|
35
|
+
their common keys, and grabs an element with each DataGrabber using its
|
|
36
|
+
keys. Each data type is grabbed by one DataGrabber, except for the nested
|
|
37
|
+
data types grabbed by a DataGrabber without the main file of the data type,
|
|
38
|
+
which replace the ones of the other DataGrabber.
|
|
39
|
+
|
|
40
|
+
Metadata
|
|
41
|
+
--------
|
|
42
|
+
|
|
43
|
+
The ``meta`` of each data type in the :ref:`data object <data_object>` is
|
|
44
|
+
built by the steps of the pipeline. Each step adds an entry with its class and
|
|
45
|
+
parameters (``UpdateMetaMixin.update_meta``) and its dependencies:
|
|
46
|
+
|
|
47
|
+
.. list-table::
|
|
48
|
+
:widths: auto
|
|
49
|
+
:header-rows: 1
|
|
50
|
+
|
|
51
|
+
* - Key
|
|
52
|
+
- Added by
|
|
53
|
+
- Content
|
|
54
|
+
- In the MD5
|
|
55
|
+
* - ``datagrabber``
|
|
56
|
+
- DataGrabber
|
|
57
|
+
- The class and parameters of the DataGrabber, e.g., ``types``,
|
|
58
|
+
``patterns`` and ``replacements``. For the DataLad-based ones, also the
|
|
59
|
+
dataset ID and commit, and whether the dataset has local changes
|
|
60
|
+
(``datalad_id``, ``datalad_commit_id`` and ``datalad_dirty``), so
|
|
61
|
+
different versions of the dataset give different hashes. For :class:`.MultipleDataGrabber`, also
|
|
62
|
+
``datagrabbers`` with the entries of its DataGrabbers.
|
|
63
|
+
- Yes, except ``datadir`` for the DataLad-based DataGrabbers (which is
|
|
64
|
+
removed from the stored metadata too)
|
|
65
|
+
* - ``element``
|
|
66
|
+
- DataGrabber
|
|
67
|
+
- The element being processed (see below).
|
|
68
|
+
- No
|
|
69
|
+
* - ``_element_keys``
|
|
70
|
+
- DataGrabber
|
|
71
|
+
- The keys of the element that the data depends on (see below).
|
|
72
|
+
- Yes
|
|
73
|
+
* - ``datareader``
|
|
74
|
+
- DataReader
|
|
75
|
+
- The class and parameters of the DataReader.
|
|
76
|
+
- Yes
|
|
77
|
+
* - ``preprocess``
|
|
78
|
+
- Preprocessors
|
|
79
|
+
- The list of the classes and parameters of the preprocessors that
|
|
80
|
+
processed the data, in order.
|
|
81
|
+
- Yes
|
|
82
|
+
* - ``type``
|
|
83
|
+
- Marker
|
|
84
|
+
- The data type, e.g., ``BOLD``.
|
|
85
|
+
- Yes
|
|
86
|
+
* - ``marker``
|
|
87
|
+
- Marker
|
|
88
|
+
- The class and parameters of the marker, with ``name`` as the name of
|
|
89
|
+
the marker followed by the name of the feature, e.g., ``mean_mean``.
|
|
90
|
+
- Yes
|
|
91
|
+
* - ``dependencies``
|
|
92
|
+
- All the steps
|
|
93
|
+
- The names of the dependencies of the steps (their ``_DEPENDENCIES``).
|
|
94
|
+
When storing, they are replaced by their versions, with the version of
|
|
95
|
+
``junifer``, e.g., ``{'junifer': '0.0.8', 'nilearn': '0.14.1'}``.
|
|
96
|
+
- Yes (the versions)
|
|
97
|
+
* - ``name``
|
|
98
|
+
- Storage (``process_meta``)
|
|
99
|
+
- The name of the feature: the data type and the marker name, e.g.,
|
|
100
|
+
``BOLD_mean_mean``.
|
|
101
|
+
- Yes
|
|
102
|
+
|
|
103
|
+
The DataGrabber adds two keys about the element to the ``meta`` of each data
|
|
104
|
+
type (``BaseDataGrabber.__getitem__``):
|
|
105
|
+
|
|
106
|
+
* ``element``: the element being processed, with all its keys. It is the same
|
|
107
|
+
for all the data types of the element.
|
|
108
|
+
* ``_element_keys``: the keys of the element that the data of the data type
|
|
109
|
+
depends on (:meth:`.BaseDataGrabber.get_type_element_keys`).
|
|
110
|
+
For a :class:`.PatternDataGrabber`, the replacements in the patterns of the
|
|
111
|
+
data type.
|
|
112
|
+
|
|
113
|
+
For example, with ``BOLD`` data for each subject and task, and ``VBM_GM`` data
|
|
114
|
+
for each subject, the element ``(sub-01, rest)`` gives:
|
|
115
|
+
|
|
116
|
+
.. code-block::
|
|
117
|
+
|
|
118
|
+
{'BOLD': {'meta': {'_element_keys': ['subject', 'task'],
|
|
119
|
+
'element': {'subject': 'sub-01', 'task': 'rest'},
|
|
120
|
+
...},
|
|
121
|
+
...},
|
|
122
|
+
'VBM_GM': {'meta': {'_element_keys': ['subject'],
|
|
123
|
+
'element': {'subject': 'sub-01', 'task': 'rest'},
|
|
124
|
+
...},
|
|
125
|
+
...}}
|
|
126
|
+
|
|
127
|
+
When storing the output of a marker, ``process_meta`` (in ``junifer.storage.utils``):
|
|
128
|
+
|
|
129
|
+
* Removes ``element`` from the metadata and returns the element of the data,
|
|
130
|
+
with only the keys in ``_element_keys`` (all the keys of ``element`` if it
|
|
131
|
+
is not set).
|
|
132
|
+
* Computes the MD5 hash of the metadata, which identifies the feature. It
|
|
133
|
+
includes ``_element_keys`` and the versions of the dependencies of the
|
|
134
|
+
steps and of ``junifer``, but not ``element``: the data of all the elements
|
|
135
|
+
of a feature have the same hash, and the features computed with different
|
|
136
|
+
versions of ``junifer`` (or of the dependencies) have different hashes.
|
|
137
|
+
This is by design, for reproducibility: the differences between features
|
|
138
|
+
with the same hash can only come from the data, not from different
|
|
139
|
+
versions of the algorithms. A feature computed again with another version
|
|
140
|
+
is a new feature, with the same name, so it must be read by its MD5.
|
|
141
|
+
|
|
142
|
+
Storage
|
|
143
|
+
-------
|
|
144
|
+
|
|
145
|
+
* The data is stored for the element of the data (the element with only the
|
|
146
|
+
keys in ``_element_keys``), so the data that does not depend on a key (e.g.,
|
|
147
|
+
the ``VBM_GM`` data for the tasks of a subject) is stored once.
|
|
148
|
+
* :meth:`.BaseFeatureStorage.store` passes the element being processed to
|
|
149
|
+
the methods storing the metadata and the data (``store_metadata``,
|
|
150
|
+
``store_vector``, etc.) as ``processed_element``, besides the element of the
|
|
151
|
+
data (``element``). The storages that write a file for each element (with
|
|
152
|
+
``single_output=False``) name it after the element being processed, e.g.,
|
|
153
|
+
``element_sub-01_rest_out.hdf5``, so that the processes running different
|
|
154
|
+
elements in parallel never write to the same file. The storages without
|
|
155
|
+
files (e.g., databases) can ignore it, but their methods must accept it.
|
|
156
|
+
* The data already stored for an element is not stored again (the storages
|
|
157
|
+
skip the existing elements, :class:`.SQLiteFeatureStorage` with
|
|
158
|
+
``upsert="ignore"`` by default).
|
|
159
|
+
* ``collect`` only collects the files of single elements (one element for
|
|
160
|
+
each feature, as written for each element with ``single_output=False``),
|
|
161
|
+
and raises an error otherwise. The data of an element can be in the files
|
|
162
|
+
of several elements being processed (e.g., the ``VBM_GM`` data of
|
|
163
|
+
``sub-01`` in the files of each of its tasks), and it is only collected
|
|
164
|
+
once.
|
|
165
|
+
* :meth:`.HDF5FeatureStorage.collect` works in two passes: the first one reads
|
|
166
|
+
the metadata and the elements of each file, to know which files to collect
|
|
167
|
+
for each feature (one for each element), and the second one collects the
|
|
168
|
+
data of each feature from these files, in chunks. Each file is read once in
|
|
169
|
+
the first pass, and once for each of its features in the second one.
|
|
@@ -30,6 +30,14 @@ your own ``Storage`` by providing a concrete implementation of
|
|
|
30
30
|
:class:`.BaseFeatureStorage` or open an issue on `junifer Github`_ and we can
|
|
31
31
|
help you out.
|
|
32
32
|
|
|
33
|
+
The data of each element is stored only once: running the same elements again
|
|
34
|
+
with the same configuration (e.g., after trying a few elements and then running
|
|
35
|
+
all of them), or collecting the files of the elements again, does not change
|
|
36
|
+
the data already stored, which is not stored again. The data that does not
|
|
37
|
+
depend on all the keys of the element (e.g., the ``VBM_GM`` data of a subject,
|
|
38
|
+
for elements with the subject and the task) is stored once for its keys (see
|
|
39
|
+
:ref:`internals`).
|
|
40
|
+
|
|
33
41
|
.. _storage_types:
|
|
34
42
|
|
|
35
43
|
Storage Types
|
|
@@ -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.dev314'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 0, 8, 'dev314')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g968a03e78'
|
|
@@ -9,23 +9,30 @@ import logging
|
|
|
9
9
|
import sys
|
|
10
10
|
import tempfile
|
|
11
11
|
from contextlib import AbstractContextManager, nullcontext
|
|
12
|
+
from copy import deepcopy
|
|
12
13
|
from pathlib import Path
|
|
13
|
-
from typing import Any
|
|
14
|
+
from typing import Any, ClassVar
|
|
14
15
|
|
|
16
|
+
import nibabel as nib
|
|
17
|
+
import numpy as np
|
|
15
18
|
import pytest
|
|
16
19
|
from nibabel.filebasedimages import ImageFileError
|
|
17
20
|
from ruamel.yaml import YAML
|
|
18
21
|
|
|
19
22
|
import junifer.testing.registry # noqa: F401
|
|
20
23
|
from junifer.api import collect, list_elements, parse_yaml, queue, reset, run
|
|
21
|
-
from junifer.
|
|
24
|
+
from junifer.api.decorators import register_marker
|
|
25
|
+
from junifer.datagrabber import DataType, PatternDataGrabber
|
|
22
26
|
from junifer.datagrabber.base import BaseDataGrabber
|
|
27
|
+
from junifer.markers import BaseMarker
|
|
23
28
|
from junifer.pipeline import (
|
|
24
29
|
MarkerCollection,
|
|
25
30
|
PipelineComponentRegistry,
|
|
26
31
|
WorkDirManager,
|
|
27
32
|
)
|
|
28
|
-
from junifer.
|
|
33
|
+
from junifer.storage import StorageType
|
|
34
|
+
from junifer.storage.base import BaseFeatureStorage
|
|
35
|
+
from junifer.typing import Dependencies, Elements, MarkerInOutMappings
|
|
29
36
|
|
|
30
37
|
|
|
31
38
|
pytestmark = pytest.mark.external
|
|
@@ -1460,3 +1467,119 @@ def _run_selectors(
|
|
|
1460
1467
|
elements=elements,
|
|
1461
1468
|
)
|
|
1462
1469
|
return n_searches
|
|
1470
|
+
|
|
1471
|
+
|
|
1472
|
+
@register_marker
|
|
1473
|
+
class _ImageMean(BaseMarker):
|
|
1474
|
+
"""Marker storing the mean of an image, for BOLD and VBM_GM."""
|
|
1475
|
+
|
|
1476
|
+
_DEPENDENCIES: ClassVar[Dependencies] = {"numpy"}
|
|
1477
|
+
_MARKER_INOUT_MAPPINGS: ClassVar[MarkerInOutMappings] = {
|
|
1478
|
+
DataType.BOLD: {"mean": StorageType.Vector},
|
|
1479
|
+
DataType.VBM_GM: {"mean": StorageType.Vector},
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
def compute(self, input: dict, extra_input: dict | None = None) -> dict:
|
|
1483
|
+
data = np.asarray(input["data"].dataobj, dtype=float)
|
|
1484
|
+
return {
|
|
1485
|
+
"mean": {"data": np.array([[data.mean()]]), "col_names": ["mean"]}
|
|
1486
|
+
}
|
|
1487
|
+
|
|
1488
|
+
|
|
1489
|
+
@pytest.mark.parametrize("single_output", [True, False])
|
|
1490
|
+
@pytest.mark.parametrize(
|
|
1491
|
+
"storage_kind", ["HDF5FeatureStorage", "SQLiteFeatureStorage"]
|
|
1492
|
+
)
|
|
1493
|
+
def test_run_data_types_element_keys(
|
|
1494
|
+
tmp_path: Path, storage_kind: str, single_output: bool
|
|
1495
|
+
) -> None:
|
|
1496
|
+
"""Test run function storing data types with different element keys.
|
|
1497
|
+
|
|
1498
|
+
The BOLD data depends on the subject and the task, and the VBM data only
|
|
1499
|
+
on the subject, so it is stored once for each subject. The elements are
|
|
1500
|
+
run twice, as when trying a few elements and then running all of them.
|
|
1501
|
+
|
|
1502
|
+
Parameters
|
|
1503
|
+
----------
|
|
1504
|
+
tmp_path : pathlib.Path
|
|
1505
|
+
The path to the test directory.
|
|
1506
|
+
storage_kind : str
|
|
1507
|
+
The parametrized storage.
|
|
1508
|
+
single_output : bool
|
|
1509
|
+
The parametrized storage in a single file.
|
|
1510
|
+
|
|
1511
|
+
"""
|
|
1512
|
+
datadir = tmp_path / "data"
|
|
1513
|
+
# BOLD: 10 * subject + task (1: rest, 2: movie); VBM: subject
|
|
1514
|
+
for i, subject in enumerate(("sub-01", "sub-02"), start=1):
|
|
1515
|
+
(datadir / subject).mkdir(parents=True)
|
|
1516
|
+
nib.save(
|
|
1517
|
+
nib.Nifti1Image(np.full((2, 2, 2), float(i)), np.eye(4)),
|
|
1518
|
+
datadir / subject / f"{subject}_GM.nii",
|
|
1519
|
+
)
|
|
1520
|
+
for j, task in enumerate(("rest", "movie"), start=1):
|
|
1521
|
+
nib.save(
|
|
1522
|
+
nib.Nifti1Image(
|
|
1523
|
+
np.full((2, 2, 2, 3), 10.0 * i + j), np.eye(4)
|
|
1524
|
+
),
|
|
1525
|
+
datadir / subject / f"{subject}_task-{task}_bold.nii",
|
|
1526
|
+
)
|
|
1527
|
+
datagrabber = {
|
|
1528
|
+
"kind": "PatternDataGrabber",
|
|
1529
|
+
"datadir": str(datadir),
|
|
1530
|
+
"types": ["BOLD", "VBM_GM"],
|
|
1531
|
+
"patterns": {
|
|
1532
|
+
"BOLD": {
|
|
1533
|
+
"pattern": "{subject}/{subject}_task-{task}_bold.nii",
|
|
1534
|
+
"space": "native",
|
|
1535
|
+
},
|
|
1536
|
+
"VBM_GM": {
|
|
1537
|
+
"pattern": "{subject}/{subject}_GM.nii",
|
|
1538
|
+
"space": "native",
|
|
1539
|
+
},
|
|
1540
|
+
},
|
|
1541
|
+
"replacements": ["subject", "task"],
|
|
1542
|
+
}
|
|
1543
|
+
uri = tmp_path / "out" / "features.db"
|
|
1544
|
+
storage = {
|
|
1545
|
+
"kind": storage_kind,
|
|
1546
|
+
"uri": str(uri),
|
|
1547
|
+
"single_output": single_output,
|
|
1548
|
+
}
|
|
1549
|
+
# A few elements, and then all of them
|
|
1550
|
+
for elements in ([("sub-01", "rest")], None):
|
|
1551
|
+
run(
|
|
1552
|
+
workdir=tmp_path / "workdir",
|
|
1553
|
+
datagrabber=deepcopy(datagrabber),
|
|
1554
|
+
markers=[{"kind": "_ImageMean", "name": "mean"}],
|
|
1555
|
+
storage=deepcopy(storage),
|
|
1556
|
+
elements=elements,
|
|
1557
|
+
)
|
|
1558
|
+
if not single_output:
|
|
1559
|
+
collect(deepcopy(storage))
|
|
1560
|
+
|
|
1561
|
+
reader = PipelineComponentRegistry().build_component_instance(
|
|
1562
|
+
step="storage",
|
|
1563
|
+
name=storage_kind,
|
|
1564
|
+
baseclass=BaseFeatureStorage,
|
|
1565
|
+
init_params={"uri": uri},
|
|
1566
|
+
)
|
|
1567
|
+
features = {
|
|
1568
|
+
meta["name"]: md5 for md5, meta in reader.list_features().items()
|
|
1569
|
+
}
|
|
1570
|
+
bold = reader.read_df(feature_md5=features["BOLD_mean_mean"])
|
|
1571
|
+
vbm = reader.read_df(feature_md5=features["VBM_GM_mean_mean"])
|
|
1572
|
+
assert sorted(bold.index) == [
|
|
1573
|
+
("sub-01", "movie"),
|
|
1574
|
+
("sub-01", "rest"),
|
|
1575
|
+
("sub-02", "movie"),
|
|
1576
|
+
("sub-02", "rest"),
|
|
1577
|
+
]
|
|
1578
|
+
assert sorted(bold["mean"]) == [11, 12, 21, 22]
|
|
1579
|
+
# Once for each subject
|
|
1580
|
+
assert vbm.index.names == ["subject"]
|
|
1581
|
+
assert sorted(vbm.index.get_level_values("subject")) == [
|
|
1582
|
+
"sub-01",
|
|
1583
|
+
"sub-02",
|
|
1584
|
+
]
|
|
1585
|
+
assert sorted(vbm["mean"]) == [1, 2]
|
|
@@ -183,18 +183,39 @@ class BaseDataGrabber(BaseModel, ABC, UpdateMetaMixin):
|
|
|
183
183
|
self._check_element(named_element)
|
|
184
184
|
# Fetch element
|
|
185
185
|
out = self.get_item(**named_element)
|
|
186
|
-
# Update metadata
|
|
187
|
-
|
|
186
|
+
# Update metadata: the element being processed and the keys of the
|
|
187
|
+
# element that the data of each data type depends on
|
|
188
|
+
for t_type, t_val in out.items():
|
|
188
189
|
self.update_meta(t_val, "datagrabber")
|
|
190
|
+
element_keys = self.get_type_element_keys(t_type)
|
|
189
191
|
# Conditional for list dtype vals like Warp
|
|
190
|
-
if isinstance(t_val, list):
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
else:
|
|
194
|
-
t_val["meta"]["element"] = named_element
|
|
192
|
+
for entry in t_val if isinstance(t_val, list) else [t_val]:
|
|
193
|
+
entry["meta"]["element"] = named_element
|
|
194
|
+
entry["meta"]["_element_keys"] = element_keys
|
|
195
195
|
|
|
196
196
|
return out
|
|
197
197
|
|
|
198
|
+
def get_type_element_keys(self, data_type: str) -> list[str]:
|
|
199
|
+
"""Get the element keys that the data of a data type depends on.
|
|
200
|
+
|
|
201
|
+
The element keys (see :meth:`.get_element_keys`) are the keys that
|
|
202
|
+
the data types to grab depend on.
|
|
203
|
+
|
|
204
|
+
Parameters
|
|
205
|
+
----------
|
|
206
|
+
data_type : str
|
|
207
|
+
The data type.
|
|
208
|
+
|
|
209
|
+
Returns
|
|
210
|
+
-------
|
|
211
|
+
list of str
|
|
212
|
+
The element keys, all of them unless a subclass knows which ones
|
|
213
|
+
the data type depends on (e.g., only the subject for data that is
|
|
214
|
+
the same for all the tasks of a subject).
|
|
215
|
+
|
|
216
|
+
"""
|
|
217
|
+
return self.get_element_keys()
|
|
218
|
+
|
|
198
219
|
def _check_element(self, element: dict) -> None:
|
|
199
220
|
"""Check the element can be grabbed.
|
|
200
221
|
|
|
@@ -190,12 +190,36 @@ class MultipleDataGrabber(BaseDataGrabber):
|
|
|
190
190
|
to_update = out[kind]
|
|
191
191
|
if not isinstance(to_update, list):
|
|
192
192
|
to_update = [to_update]
|
|
193
|
+
element_keys = self.get_type_element_keys(kind)
|
|
193
194
|
for t_kind in to_update:
|
|
194
195
|
self.update_meta(t_kind, "datagrabber")
|
|
195
196
|
t_kind["meta"]["datagrabber"]["datagrabbers"] = metas
|
|
196
197
|
t_kind["meta"]["element"] = named_element
|
|
198
|
+
t_kind["meta"]["_element_keys"] = element_keys
|
|
197
199
|
return out
|
|
198
200
|
|
|
201
|
+
def get_type_element_keys(self, data_type: str) -> list[str]:
|
|
202
|
+
"""Get the element keys that the data of a data type depends on.
|
|
203
|
+
|
|
204
|
+
Parameters
|
|
205
|
+
----------
|
|
206
|
+
data_type : str
|
|
207
|
+
The data type.
|
|
208
|
+
|
|
209
|
+
Returns
|
|
210
|
+
-------
|
|
211
|
+
list of str
|
|
212
|
+
The element keys that the data of the data type depends on in all
|
|
213
|
+
the DataGrabbers grabbing it (e.g., the one grabbing the main file
|
|
214
|
+
and the one grabbing only its nested data types).
|
|
215
|
+
|
|
216
|
+
"""
|
|
217
|
+
keys = set()
|
|
218
|
+
for dg in self.datagrabbers:
|
|
219
|
+
if data_type in dg.get_types():
|
|
220
|
+
keys.update(dg.get_type_element_keys(data_type))
|
|
221
|
+
return [k for k in self.get_element_keys() if k in keys]
|
|
222
|
+
|
|
199
223
|
def __enter__(self) -> "MultipleDataGrabber":
|
|
200
224
|
"""Implement context entry."""
|
|
201
225
|
for dg in self.datagrabbers:
|
|
@@ -414,31 +414,47 @@ class PatternDataGrabber(BaseDataGrabber, PatternValidationMixin):
|
|
|
414
414
|
)
|
|
415
415
|
return patterns
|
|
416
416
|
|
|
417
|
-
def
|
|
418
|
-
"""Get element keys.
|
|
417
|
+
def get_type_element_keys(self, data_type: str) -> list[str]:
|
|
418
|
+
"""Get the element keys that the data of a data type depends on.
|
|
419
419
|
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
420
|
+
Parameters
|
|
421
|
+
----------
|
|
422
|
+
data_type : str
|
|
423
|
+
The data type.
|
|
424
424
|
|
|
425
425
|
Returns
|
|
426
426
|
-------
|
|
427
427
|
list of str
|
|
428
|
-
The
|
|
428
|
+
The replacements in the patterns of the data type (including the
|
|
429
|
+
nested ones), in the order of ``replacements``.
|
|
429
430
|
|
|
430
431
|
"""
|
|
431
|
-
patterns =
|
|
432
|
-
pattern
|
|
433
|
-
for t_type in self.get_types()
|
|
434
|
-
for pattern in self._get_type_patterns(t_type)
|
|
435
|
-
]
|
|
432
|
+
patterns = self._get_type_patterns(data_type)
|
|
436
433
|
return [
|
|
437
434
|
x
|
|
438
435
|
for x in self.replacements
|
|
439
436
|
if any(f"{{{x}}}" in pattern for pattern in patterns)
|
|
440
437
|
]
|
|
441
438
|
|
|
439
|
+
def get_element_keys(self) -> list[str]:
|
|
440
|
+
"""Get element keys.
|
|
441
|
+
|
|
442
|
+
For each item in the "element" tuple, this functions returns the
|
|
443
|
+
corresponding key: the replacements in the patterns of the data
|
|
444
|
+
types to grab (see :meth:`.get_type_element_keys`), e.g., without
|
|
445
|
+
``task`` if only anatomical data types are grabbed.
|
|
446
|
+
|
|
447
|
+
Returns
|
|
448
|
+
-------
|
|
449
|
+
list of str
|
|
450
|
+
The element keys, in the order of ``replacements``.
|
|
451
|
+
|
|
452
|
+
"""
|
|
453
|
+
keys = {
|
|
454
|
+
k for t in self.get_types() for k in self.get_type_element_keys(t)
|
|
455
|
+
}
|
|
456
|
+
return [x for x in self.replacements if x in keys]
|
|
457
|
+
|
|
442
458
|
def get_replacement_values(self) -> dict[str, list[str]]:
|
|
443
459
|
"""Get the values of the replacements to grab.
|
|
444
460
|
|
|
@@ -578,3 +578,11 @@ def test_MultipleDataGrabber_three_datasets(tmp_path: Path) -> None:
|
|
|
578
578
|
tmp_path / "confounds/sub-02"
|
|
579
579
|
)
|
|
580
580
|
assert out["VBM_GM"]["path"].parent == tmp_path / "cat/sub-02/mri"
|
|
581
|
+
# The element being processed, and the keys that the data depends on
|
|
582
|
+
for data_type in ("BOLD", "VBM_GM"):
|
|
583
|
+
assert out[data_type]["meta"]["element"] == {
|
|
584
|
+
"subject": "sub-02",
|
|
585
|
+
"task": "rest",
|
|
586
|
+
}
|
|
587
|
+
assert out["BOLD"]["meta"]["_element_keys"] == ["subject", "task"]
|
|
588
|
+
assert out["VBM_GM"]["meta"]["_element_keys"] == ["subject"]
|