junifer 0.0.8.dev303__tar.gz → 0.0.8.dev306__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.dev303 → junifer-0.0.8.dev306}/.gitmodules +0 -3
- {junifer-0.0.8.dev303/junifer.egg-info → junifer-0.0.8.dev306}/PKG-INFO +2 -1
- junifer-0.0.8.dev306/docs/changes/newsfragments/504.bugfix +1 -0
- junifer-0.0.8.dev306/docs/changes/newsfragments/504.misc +1 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/_version.py +3 -3
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/tests/test_cli_utils.py +2 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/conftest.py +0 -1
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/hdf5.py +150 -97
- junifer-0.0.8.dev306/junifer/storage/tests/data/collected_h5io_fork.hdf5 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/tests/test_hdf5.py +147 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306/junifer.egg-info}/PKG-INFO +2 -1
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer.egg-info/SOURCES.txt +3 -23
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer.egg-info/requires.txt +1 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer.egg-info/scm_file_list.json +3 -23
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer.egg-info/scm_version.json +2 -2
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/pyproject.toml +2 -4
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/uv.lock +15 -0
- junifer-0.0.8.dev303/junifer/external/h5io/.coveragerc +0 -7
- junifer-0.0.8.dev303/junifer/external/h5io/.gitattributes +0 -1
- junifer-0.0.8.dev303/junifer/external/h5io/.gitignore +0 -16
- junifer-0.0.8.dev303/junifer/external/h5io/.travis.yml +0 -58
- junifer-0.0.8.dev303/junifer/external/h5io/.vscode/launch.json +0 -17
- junifer-0.0.8.dev303/junifer/external/h5io/.vscode/settings.json +0 -8
- junifer-0.0.8.dev303/junifer/external/h5io/LICENSE.txt +0 -24
- junifer-0.0.8.dev303/junifer/external/h5io/MANIFEST.in +0 -2
- junifer-0.0.8.dev303/junifer/external/h5io/Makefile +0 -45
- junifer-0.0.8.dev303/junifer/external/h5io/README.rst +0 -94
- junifer-0.0.8.dev303/junifer/external/h5io/azure-pipelines.yml +0 -39
- junifer-0.0.8.dev303/junifer/external/h5io/h5io/__init__.py +0 -15
- junifer-0.0.8.dev303/junifer/external/h5io/h5io/_h5io.py +0 -767
- junifer-0.0.8.dev303/junifer/external/h5io/h5io/_version.py +0 -1
- junifer-0.0.8.dev303/junifer/external/h5io/h5io/chunked_array.py +0 -94
- junifer-0.0.8.dev303/junifer/external/h5io/h5io/chunked_list.py +0 -65
- junifer-0.0.8.dev303/junifer/external/h5io/h5io/tests/__init__.py +0 -0
- junifer-0.0.8.dev303/junifer/external/h5io/h5io/tests/test_chunked_array.py +0 -82
- junifer-0.0.8.dev303/junifer/external/h5io/h5io/tests/test_chunked_list.py +0 -46
- junifer-0.0.8.dev303/junifer/external/h5io/h5io/tests/test_io.py +0 -312
- junifer-0.0.8.dev303/junifer/external/h5io/setup.cfg +0 -14
- junifer-0.0.8.dev303/junifer/external/h5io/setup.py +0 -63
- junifer-0.0.8.dev303/junifer/external/h5io/versioneer.py +0 -1822
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.dockerignore +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/dependabot.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/pull_request_template.md +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/workflows/check-stale.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/workflows/ci.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/workflows/docker-publish.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/workflows/docs-preview.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/workflows/docs.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/workflows/lint.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/workflows/publish.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.gitignore +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.pre-commit-config.yaml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.python-version +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/AUTHORS.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/Dockerfile +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/Dockerfile-ci +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/LICENSE.md +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/README.md +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/codecov.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/conda-env.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/Makefile +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/_static/css/custom.css +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/_static/css/version_selector.css +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/_static/js/custom.js +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/_templates/versions.html +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/api.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/cli.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/configs.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/data.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/datagrabbers.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/datareaders.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/index.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/markers.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/nilearn.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/onthefly.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/pipeline.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/preprocessing.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/stats.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/storage.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/testing.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/utils.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/builtin.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/contributors.inc +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/.gitignore +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/239.enh +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/364.doc +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/364.enh +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/364.feature +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/474.misc +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/482.bugfix +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/492.bugfix +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/499.enh +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/502.bugfix +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/503.enh +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/509.enh +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/510.bugfix +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/511.bugfix +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/511.bugfix.1 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/511.change +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/511.enh +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/511.enh.1 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/511.feature +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/511.misc +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/511.misc.1 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/513.doc +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/513.misc +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/514.bugfix +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/514.bugfix.1 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/514.enh +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/515.doc +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/515.enh +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/515.enh.1 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/515.misc +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/515.misc.1 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/516.bugfix +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/516.bugfix.1 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/516.bugfix.2 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/516.change +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/516.change.1 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/516.misc +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.bugfix +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.bugfix.1 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.bugfix.2 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.bugfix.3 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.bugfix.4 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.bugfix.5 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.bugfix.6 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.change +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.doc +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.misc +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.misc.1 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.misc.2 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.misc.3 +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.removal +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/521.bugfix +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/522.bugfix +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/522.enh +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/523.misc +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/conf.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/contribution.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/confounds_format.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/coordinates.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/data_dump_asset.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/data_registries.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/data_types.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/datagrabber.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/dependencies.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/extension.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/index.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/logging.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/maps.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/marker.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/masks.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/parcellations.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/plugins.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/preprocessor.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/faq.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/help.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/images/junifer_logo.png +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/index.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/installation.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/links.inc +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/maintaining.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/poly.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/poly_files/patches/version_banner.html +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/poly_files/patches/versions.html +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/poly_files/templates/index.html +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/starting.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/understanding/data.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/understanding/datagrabber.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/understanding/datareader.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/understanding/index.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/understanding/marker.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/understanding/pipeline.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/understanding/preprocess.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/understanding/storage.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/using/codeless.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/using/configuring.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/using/dumping.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/using/index.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/using/masks.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/using/queueing.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/using/running.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/whats_new.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/README.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/norun_hcpfc_pearson.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/norun_ukbvm_gmd.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/run_compute_parcel_mean.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/run_datagrabber_bids_datalad.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/run_ets_rss_marker.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/run_junifer_julearn.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/run_run_gmd_mean.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/yamls/gmd_mean.yaml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/yamls/partly_cloudy_agg_mean_tian.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/yamls/ukb_gmd_mean.yaml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/ignore_words.txt +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/decorators.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/functions.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/queue_context/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/queue_context/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/queue_context/gnu_parallel_local_adapter.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/queue_context/htcondor_adapter.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/queue_context/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/queue_context/queue_context_adapter.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/queue_context/tests/test_htcondor_adapter.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/afni/3dRSFC +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/afni/3dReHo +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/afni/afni +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/afni/run_afni_docker.sh +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/ants/ResampleImage +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/ants/antsApplyTransforms +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/ants/run_ants_docker.sh +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/freesurfer/mri_binarize +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/freesurfer/mri_mc +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/freesurfer/mri_pretess +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/freesurfer/mris_convert +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/freesurfer/run_freesurfer_docker.sh +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/fsl/applywarp +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/fsl/flirt +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/fsl/img2imgcoord +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/fsl/std2imgcoord +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/run_conda.bash +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/run_conda.zsh +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/run_venv.bash +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/run_venv.zsh +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/tests/test_decorators.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/tests/test_functions.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/cli.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/parser.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/tests/data/gmd_mean.yaml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/tests/data/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/tests/test_cli.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/utils.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/_dispatch.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/coordinates/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/coordinates/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/coordinates/_ants_coordinates_warper.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/coordinates/_coordinates.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/coordinates/_fsl_coordinates_warper.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/coordinates/tests/test_coordinates.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/coordinates/tests/test_coordinates_names.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/maps/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/maps/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/maps/_ants_maps_warper.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/maps/_fsl_maps_warper.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/maps/_maps.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/maps/tests/test_maps.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/masks/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/masks/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/masks/_ants_mask_warper.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/masks/_fsl_mask_warper.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/masks/_masks.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/masks/tests/test_masks.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/parcellations/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/parcellations/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/parcellations/_ants_parcellation_warper.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/parcellations/_fsl_parcellation_warper.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/parcellations/_parcellations.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/parcellations/tests/test_parcellations.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/pipeline_data_registry_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/template_spaces.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/tests/test_data_utils.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/tests/test_dispatch.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/tests/test_template_spaces.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/utils.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/_types.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/id1000.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/piop1.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/piop2.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/datalad_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/dmcc13_benchmark.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/hcp1200/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/hcp1200/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/hcp1200/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/multiple.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/pattern.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/pattern_datalad.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/pattern_validation_mixin.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/tests/test_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/tests/test_multiple.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/tests/test_pattern.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/tests/test_pattern_validation_mixin.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datareader/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datareader/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datareader/default.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datareader/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datareader/tests/test_default_reader.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.codecov.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.codespellignore +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/documentation.md +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/questions-help-support.md +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/dependabot.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/workflows/build.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/workflows/code-style.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/workflows/doc.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/workflows/publish.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/workflows/pytest.yml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.gitignore +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/LICENSE +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/README.md +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/_version.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/asymmetry.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/brainprint.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/cli/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/cli/help_text.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/cli/parser.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/cli/utils.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/commands/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/commands/sys_info.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/surfaces.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/utils/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/utils/_config.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/utils/tests/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/utils/tests/test_config.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/utils/utils.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/Makefile +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/_static/.gitkeep +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/_templates/autosummary/class.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/_templates/autosummary/function.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/_templates/autosummary/module.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/api/index.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/conf.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/index.rst +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/links.inc +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/make.bat +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/references.bib +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/pyproject.toml +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/setup.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/nilearn/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/nilearn/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/nilearn/junifer_connectivity_measure.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/nilearn/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/brainprint.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/complexity_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/hurst_exponent.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/perm_entropy.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/range_entropy.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/range_entropy_auc.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/sample_entropy.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/ets_rss.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/_afni_falff.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/_junifer_falff.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/falff_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/falff_maps.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/falff_parcels.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/falff_spheres.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/tests/test_falff_maps.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/edge_functional_connectivity_maps.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/functional_connectivity_maps.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_maps.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_maps.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/maps_aggregation.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/parcel_aggregation.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/_afni_reho.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/_junifer_reho.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/reho_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/reho_maps.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/reho_parcels.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/reho_spheres.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/tests/test_junifer_reho.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/tests/test_reho_maps.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/sphere_aggregation.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/temporal_snr_maps.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/tests/test_temporal_snr_maps.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/tests/test_brainprint.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/tests/test_ets_rss.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/tests/test_lost_regions.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/tests/test_maps_aggregation.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/tests/test_marker_utils.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/tests/test_markers_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/utils.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/onthefly/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/onthefly/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/onthefly/_brainprint.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/onthefly/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/onthefly/read_transform.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/onthefly/tests/test_read_transform.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/_data_object_dumper.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/marker_collection.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/pipeline_component_registry.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/pipeline_step_mixin.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/tests/test_data_object_dumper.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/tests/test_marker_collection.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/tests/test_pipeline_component_registry.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/tests/test_workdir_manager.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/update_meta_mixin.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/utils.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/workdir_manager.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/_temporal_filter.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/_temporal_slicer.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/confounds/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/confounds/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/confounds/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/smoothing/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/smoothing/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/smoothing/_afni_smoothing.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/smoothing/_fsl_smoothing.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/smoothing/_nilearn_smoothing.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/smoothing/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/smoothing/smoothing.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/smoothing/tests/test_smoothing.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/tests/test_preprocess_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/tests/test_temporal_filter.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/tests/test_temporal_slicer.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/warping/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/warping/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/warping/_ants_warper.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/warping/_fsl_warper.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/warping/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/warping/space_warper.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/warping/tests/test_space_warper.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/stats.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/pandas_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/sqlite.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/tests/test_pandas_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/tests/test_sqlite.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/tests/test_storage_base.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/tests/test_utils.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/utils.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/datagrabbers.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/registry.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/tests/test_adhdtesting_datagrabber.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/tests/test_testing_registry.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/tests/test_testing_utils.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/tests/test_uclacnpvbmtesting_datagrabber.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/utils.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/tests/test_main.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/tests/test_stats.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/typing/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/typing/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/typing/_typing.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/typing/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/__init__.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/__init__.pyi +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/_config.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/_yaml.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/fs.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/helpers.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/logging.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/py.typed +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/singleton.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/tests/test_config.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/tests/test_fs.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/tests/test_helpers.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/tests/test_logging.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer.egg-info/dependency_links.txt +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer.egg-info/entry_points.txt +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer.egg-info/top_level.txt +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/justfile +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/scripts/start.sh +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/setup.cfg +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/setup.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/tools/create_aomic1000_example_dataset.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/tools/create_aomicpiop1_example_dataset.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/tools/create_aomicpiop2_example_dataset.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/tools/create_bids_example_dataset.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/tools/create_bids_example_dataset_sessions.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/tools/create_hcp1200_example_dataset.py +0 -0
- {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/tox.ini +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.dev306
|
|
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>
|
|
@@ -37,6 +37,7 @@ Requires-Dist: nilearn<0.15,>=0.14.0
|
|
|
37
37
|
Requires-Dist: sqlalchemy<2.2.0,>=2.0.25
|
|
38
38
|
Requires-Dist: ruamel.yaml<0.20,>=0.17
|
|
39
39
|
Requires-Dist: h5py>=3.10
|
|
40
|
+
Requires-Dist: h5io<0.3,>=0.2.5
|
|
40
41
|
Requires-Dist: tqdm<4.71.0,>=4.66.1
|
|
41
42
|
Requires-Dist: templateflow<26.0.0,>=23.0.0
|
|
42
43
|
Requires-Dist: lapy<2.0.0,>=1.0.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Fix the data collected by :class:`.HDF5FeatureStorage` being stored as ``float32`` when ``force_float32=False`` and the ``h5py`` deprecation warning when collecting by `Fede Raimondo`_
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Use original ``h5io`` instead of junifer's fork, keeping support for reading the features collected with the fork by `Fede Raimondo`_
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.0.8.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 0, 8, '
|
|
21
|
+
__version__ = version = '0.0.8.dev306'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 0, 8, 'dev306')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g442e9f6f1'
|
|
@@ -47,6 +47,7 @@ def test_get_dependency_information_short() -> None:
|
|
|
47
47
|
"templateflow",
|
|
48
48
|
"lapy",
|
|
49
49
|
"h5py",
|
|
50
|
+
"h5io",
|
|
50
51
|
"lazy_loader",
|
|
51
52
|
"looseversion",
|
|
52
53
|
"junifer_data",
|
|
@@ -82,6 +83,7 @@ def test_get_dependency_information_long() -> None:
|
|
|
82
83
|
"templateflow",
|
|
83
84
|
"lapy",
|
|
84
85
|
"h5py",
|
|
86
|
+
"h5io",
|
|
85
87
|
"lazy_loader",
|
|
86
88
|
"looseversion",
|
|
87
89
|
"junifer_data",
|
|
@@ -15,7 +15,6 @@ from junifer.utils.singleton import Singleton
|
|
|
15
15
|
# Vendored packages, whose tests are not collected. Paths are relative to
|
|
16
16
|
# this file, so it also works when testing the installed package.
|
|
17
17
|
_VENDORED = [
|
|
18
|
-
Path(__file__).parent / "external" / "h5io",
|
|
19
18
|
Path(__file__).parent / "external" / "BrainPrint",
|
|
20
19
|
]
|
|
21
20
|
|
|
@@ -4,24 +4,20 @@
|
|
|
4
4
|
# Federico Raimondo <f.raimondo@fz-juelich.de>
|
|
5
5
|
# License: AGPL
|
|
6
6
|
|
|
7
|
+
import io
|
|
7
8
|
from collections import defaultdict
|
|
8
9
|
from collections.abc import Sequence
|
|
9
10
|
from pathlib import Path
|
|
10
11
|
from typing import Any, ClassVar, Literal
|
|
11
12
|
|
|
13
|
+
import h5py
|
|
12
14
|
import numpy as np
|
|
13
15
|
import pandas as pd
|
|
16
|
+
from h5io import read_hdf5, write_hdf5
|
|
14
17
|
from pydantic import PositiveInt
|
|
15
18
|
from tqdm import tqdm
|
|
16
19
|
|
|
17
20
|
from ..api.decorators import register_storage
|
|
18
|
-
from ..external.h5io.h5io import (
|
|
19
|
-
ChunkedArray,
|
|
20
|
-
ChunkedList,
|
|
21
|
-
has_hdf5,
|
|
22
|
-
read_hdf5,
|
|
23
|
-
write_hdf5,
|
|
24
|
-
)
|
|
25
21
|
from ..utils import raise_error
|
|
26
22
|
from .base import BaseFeatureStorage, MatrixKind, StorageType, logger
|
|
27
23
|
from .utils import (
|
|
@@ -36,21 +32,106 @@ from .utils import (
|
|
|
36
32
|
__all__ = ["HDF5FeatureStorage"]
|
|
37
33
|
|
|
38
34
|
|
|
39
|
-
|
|
35
|
+
# Types of the data of collected features in files written with junifer's
|
|
36
|
+
# fork of h5io, and the h5io types they are stored as
|
|
37
|
+
_LEGACY_TYPES = {"chunkedarray": "ndarray", "chunkedlist": "list"}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _node_type(node: h5py.Group | h5py.Dataset) -> str:
|
|
41
|
+
"""Get the h5io type of a node.
|
|
42
|
+
|
|
43
|
+
Parameters
|
|
44
|
+
----------
|
|
45
|
+
node : h5py.Group or h5py.Dataset
|
|
46
|
+
The node.
|
|
47
|
+
|
|
48
|
+
Returns
|
|
49
|
+
-------
|
|
50
|
+
str
|
|
51
|
+
The type.
|
|
52
|
+
|
|
53
|
+
"""
|
|
54
|
+
title = node.attrs["TITLE"]
|
|
55
|
+
return title.decode() if isinstance(title, bytes) else title
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _has_hdf5(fname: str, title: str) -> bool:
|
|
59
|
+
"""Check whether a title is in an HDF5 file.
|
|
60
|
+
|
|
61
|
+
Parameters
|
|
62
|
+
----------
|
|
63
|
+
fname : str
|
|
64
|
+
The HDF5 file.
|
|
65
|
+
title : str
|
|
66
|
+
The title.
|
|
67
|
+
|
|
68
|
+
Returns
|
|
69
|
+
-------
|
|
70
|
+
bool
|
|
71
|
+
Whether the title is in the file.
|
|
72
|
+
|
|
73
|
+
"""
|
|
74
|
+
with h5py.File(fname, mode="r") as fid:
|
|
75
|
+
return title in fid
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def _read_hdf5(fname: str, title: str) -> Any:
|
|
79
|
+
"""Read a title of an HDF5 file.
|
|
80
|
+
|
|
81
|
+
Features collected with junifer's fork of h5io have their data stored with
|
|
82
|
+
types that h5io does not know (see ``_LEGACY_TYPES``). To read them, the
|
|
83
|
+
feature is copied in memory with the h5io types.
|
|
84
|
+
|
|
85
|
+
Parameters
|
|
86
|
+
----------
|
|
87
|
+
fname : str
|
|
88
|
+
The HDF5 file.
|
|
89
|
+
title : str
|
|
90
|
+
The title.
|
|
91
|
+
|
|
92
|
+
Returns
|
|
93
|
+
-------
|
|
94
|
+
Any
|
|
95
|
+
The data.
|
|
96
|
+
|
|
97
|
+
"""
|
|
98
|
+
with h5py.File(fname, mode="r") as fid:
|
|
99
|
+
node = fid.get(title)
|
|
100
|
+
data = node.get("key_data") if isinstance(node, h5py.Group) else None
|
|
101
|
+
if data is not None and _node_type(data) in _LEGACY_TYPES:
|
|
102
|
+
with h5py.File(io.BytesIO(), mode="w") as copy:
|
|
103
|
+
fid.copy(node, copy, name=title)
|
|
104
|
+
copy_data = copy[title]["key_data"]
|
|
105
|
+
copy_data.attrs["TITLE"] = _LEGACY_TYPES[_node_type(data)]
|
|
106
|
+
return read_hdf5(copy, title=title, slash="ignore")
|
|
107
|
+
return read_hdf5(fname, title=title, slash="ignore")
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def _write_chunk(
|
|
111
|
+
fname: str,
|
|
112
|
+
key: str,
|
|
40
113
|
chunk_data: list[np.ndarray],
|
|
41
114
|
kind: StorageType,
|
|
42
115
|
element_count: int,
|
|
43
116
|
chunk_size: int,
|
|
44
117
|
i_chunk: int,
|
|
45
|
-
) ->
|
|
46
|
-
"""
|
|
118
|
+
) -> None:
|
|
119
|
+
"""Write a chunk of the data of the elements.
|
|
120
|
+
|
|
121
|
+
The data is written in a dataset (``ndarray`` in h5io) for vectors and
|
|
122
|
+
matrices, with the elements in the last dimension, or in a group of
|
|
123
|
+
datasets (``list`` in h5io) for the other kinds.
|
|
47
124
|
|
|
48
125
|
Parameters
|
|
49
126
|
----------
|
|
127
|
+
fname : str
|
|
128
|
+
The HDF5 file.
|
|
129
|
+
key : str
|
|
130
|
+
The name of the dataset or group to write to.
|
|
50
131
|
chunk_data : list of numpy.ndarray
|
|
51
|
-
The data
|
|
132
|
+
The data of the elements in the chunk.
|
|
52
133
|
kind : :enum:`.StorageType`
|
|
53
|
-
The kind of data
|
|
134
|
+
The kind of data.
|
|
54
135
|
element_count : int
|
|
55
136
|
The total number of elements.
|
|
56
137
|
chunk_size : int
|
|
@@ -58,37 +139,29 @@ def _create_chunk(
|
|
|
58
139
|
i_chunk : int
|
|
59
140
|
The chunk index.
|
|
60
141
|
|
|
61
|
-
Returns
|
|
62
|
-
-------
|
|
63
|
-
ChunkedArray or ChunkedList
|
|
64
|
-
The chunked array or list.
|
|
65
|
-
|
|
66
142
|
"""
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
offset=i_chunk * chunk_size,
|
|
90
|
-
)
|
|
91
|
-
return out
|
|
143
|
+
offset = i_chunk * chunk_size
|
|
144
|
+
with h5py.File(fname, mode="a") as fid:
|
|
145
|
+
if kind in ["vector", "matrix"]:
|
|
146
|
+
features_data = np.concatenate(chunk_data, axis=-1)
|
|
147
|
+
if key not in fid:
|
|
148
|
+
dataset = fid.create_dataset(
|
|
149
|
+
key,
|
|
150
|
+
shape=(*features_data.shape[:-1], element_count),
|
|
151
|
+
dtype=features_data.dtype,
|
|
152
|
+
chunks=(*features_data.shape[:-1], chunk_size),
|
|
153
|
+
)
|
|
154
|
+
dataset.attrs["TITLE"] = "ndarray"
|
|
155
|
+
n_elements = features_data.shape[-1]
|
|
156
|
+
fid[key][..., offset : offset + n_elements] = features_data
|
|
157
|
+
elif kind in ["timeseries", "scalar_table", "timeseries_2d"]:
|
|
158
|
+
group = fid.require_group(key)
|
|
159
|
+
group.attrs["TITLE"] = "list"
|
|
160
|
+
for i, element_data in enumerate(chunk_data):
|
|
161
|
+
dataset = group.create_dataset(
|
|
162
|
+
f"idx_{offset + i}", data=element_data
|
|
163
|
+
)
|
|
164
|
+
dataset.attrs["TITLE"] = "ndarray"
|
|
92
165
|
|
|
93
166
|
|
|
94
167
|
@register_storage
|
|
@@ -207,7 +280,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
|
207
280
|
)
|
|
208
281
|
|
|
209
282
|
# Check if group is found in the storage
|
|
210
|
-
if not
|
|
283
|
+
if not _has_hdf5(fname=uri, title="meta"):
|
|
211
284
|
raise_error(
|
|
212
285
|
f"Invalid junifer HDF5 file at: {uri}",
|
|
213
286
|
klass=RuntimeError,
|
|
@@ -215,11 +288,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
|
215
288
|
|
|
216
289
|
# Read metadata
|
|
217
290
|
logger.debug(f"Loading HDF5 metadata from: {uri}")
|
|
218
|
-
metadata =
|
|
219
|
-
fname=uri,
|
|
220
|
-
title="meta",
|
|
221
|
-
slash="ignore",
|
|
222
|
-
)
|
|
291
|
+
metadata = _read_hdf5(fname=uri, title="meta")
|
|
223
292
|
logger.debug(f"Loaded HDF5 metadata from: {uri}")
|
|
224
293
|
|
|
225
294
|
return metadata
|
|
@@ -236,11 +305,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
|
236
305
|
|
|
237
306
|
"""
|
|
238
307
|
# Read metadata
|
|
239
|
-
metadata =
|
|
240
|
-
fname=str(self.uri.resolve()),
|
|
241
|
-
title="meta",
|
|
242
|
-
slash="ignore",
|
|
243
|
-
)
|
|
308
|
+
metadata = _read_hdf5(fname=str(self.uri.resolve()), title="meta")
|
|
244
309
|
return metadata
|
|
245
310
|
|
|
246
311
|
def _read_data(
|
|
@@ -280,7 +345,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
|
280
345
|
)
|
|
281
346
|
|
|
282
347
|
# Check if group is found in the storage
|
|
283
|
-
if not
|
|
348
|
+
if not _has_hdf5(fname=uri, title=md5):
|
|
284
349
|
raise_error(
|
|
285
350
|
f"{md5} not found in HDF5 file at: {uri}",
|
|
286
351
|
klass=RuntimeError,
|
|
@@ -288,11 +353,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
|
288
353
|
|
|
289
354
|
# Read data
|
|
290
355
|
logger.debug(f"Loading HDF5 data for {md5} from: {uri}")
|
|
291
|
-
data =
|
|
292
|
-
fname=uri,
|
|
293
|
-
title=md5,
|
|
294
|
-
slash="ignore",
|
|
295
|
-
)
|
|
356
|
+
data = _read_hdf5(fname=uri, title=md5)
|
|
296
357
|
logger.debug(f"Loaded HDF5 data for {md5} from: {uri}")
|
|
297
358
|
|
|
298
359
|
return data
|
|
@@ -345,11 +406,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
|
345
406
|
)
|
|
346
407
|
)
|
|
347
408
|
# Parameter check pass; read metadata
|
|
348
|
-
metadata =
|
|
349
|
-
fname=str(self.uri.resolve()),
|
|
350
|
-
title="meta",
|
|
351
|
-
slash="ignore",
|
|
352
|
-
)
|
|
409
|
+
metadata = _read_hdf5(fname=str(self.uri.resolve()), title="meta")
|
|
353
410
|
# Initialize MD5 variable
|
|
354
411
|
md5: str = ""
|
|
355
412
|
|
|
@@ -397,11 +454,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
|
397
454
|
md5 = feature_name_duplicates_with_different_md5[0]
|
|
398
455
|
|
|
399
456
|
# Read data from HDF5
|
|
400
|
-
hdf_data =
|
|
401
|
-
fname=str(self.uri.resolve()),
|
|
402
|
-
title=md5,
|
|
403
|
-
slash="ignore",
|
|
404
|
-
)
|
|
457
|
+
hdf_data = _read_hdf5(fname=str(self.uri.resolve()), title=md5)
|
|
405
458
|
return hdf_data
|
|
406
459
|
|
|
407
460
|
def read_df(
|
|
@@ -677,7 +730,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
|
677
730
|
|
|
678
731
|
# Check if MD5 exists, then read data else create empty dictionary
|
|
679
732
|
# File should be present here already
|
|
680
|
-
if
|
|
733
|
+
if _has_hdf5(fname=uri, title=meta_md5):
|
|
681
734
|
stored_data = self._read_data(md5=meta_md5, element=element[0])
|
|
682
735
|
else:
|
|
683
736
|
logger.debug(f"Creating new data map for {meta_md5} ...")
|
|
@@ -1078,6 +1131,13 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
|
1078
1131
|
elements = []
|
|
1079
1132
|
static_data = None
|
|
1080
1133
|
kind = None
|
|
1134
|
+
# The data is written in chunks to a temporary key (h5io would
|
|
1135
|
+
# delete the previous chunks), and moved to the feature at the end
|
|
1136
|
+
fname = str(self.uri.resolve())
|
|
1137
|
+
data_key = f"collecting_{feature_md5}"
|
|
1138
|
+
with h5py.File(fname, mode="a") as fid:
|
|
1139
|
+
if data_key in fid:
|
|
1140
|
+
del fid[data_key]
|
|
1081
1141
|
for file_ in tqdm(element_files, desc="file-data"):
|
|
1082
1142
|
logger.debug(
|
|
1083
1143
|
f"Reading feature MD5: '{feature_md5}' "
|
|
@@ -1085,11 +1145,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
|
1085
1145
|
)
|
|
1086
1146
|
|
|
1087
1147
|
# Read the data
|
|
1088
|
-
t_data =
|
|
1089
|
-
fname=str(file_),
|
|
1090
|
-
title=feature_md5,
|
|
1091
|
-
slash="ignore",
|
|
1092
|
-
)
|
|
1148
|
+
t_data = _read_hdf5(fname=str(file_), title=feature_md5)
|
|
1093
1149
|
if i_file == 0:
|
|
1094
1150
|
# Store the "static" data
|
|
1095
1151
|
static_data = {
|
|
@@ -1109,35 +1165,32 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
|
1109
1165
|
i_file += 1
|
|
1110
1166
|
if (i_file % t_chunk_size == 0) or i_file == element_count:
|
|
1111
1167
|
# If we have reached the chunk size or the end of the
|
|
1112
|
-
# elements, write the data
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
# Write data in chunks to avoid memory usage spikes
|
|
1118
|
-
# Start with the case for 2D
|
|
1119
|
-
# Write chunked array
|
|
1120
|
-
to_write["data"] = _create_chunk(
|
|
1168
|
+
# elements, write the data in chunks to avoid memory
|
|
1169
|
+
# usage spikes
|
|
1170
|
+
_write_chunk(
|
|
1171
|
+
fname=fname,
|
|
1172
|
+
key=data_key,
|
|
1121
1173
|
chunk_data=chunk_data,
|
|
1122
1174
|
kind=kind,
|
|
1123
1175
|
element_count=element_count,
|
|
1124
1176
|
chunk_size=t_chunk_size,
|
|
1125
1177
|
i_chunk=i_chunk,
|
|
1126
1178
|
)
|
|
1127
|
-
if i_file == element_count:
|
|
1128
|
-
to_write["element"] = elements
|
|
1129
|
-
|
|
1130
|
-
# Write to HDF5
|
|
1131
|
-
write_hdf5(
|
|
1132
|
-
fname=str(self.uri.resolve()),
|
|
1133
|
-
data=to_write,
|
|
1134
|
-
overwrite="update",
|
|
1135
|
-
compression=0,
|
|
1136
|
-
title=feature_md5,
|
|
1137
|
-
slash="error",
|
|
1138
|
-
use_json=False,
|
|
1139
|
-
)
|
|
1140
1179
|
|
|
1141
1180
|
# Increment counters and data
|
|
1142
1181
|
i_chunk += 1
|
|
1143
1182
|
chunk_data = []
|
|
1183
|
+
|
|
1184
|
+
# Write the feature without the data
|
|
1185
|
+
write_hdf5(
|
|
1186
|
+
fname=fname,
|
|
1187
|
+
data={**static_data, "element": elements},
|
|
1188
|
+
overwrite="update",
|
|
1189
|
+
compression=0,
|
|
1190
|
+
title=feature_md5,
|
|
1191
|
+
slash="error",
|
|
1192
|
+
use_json=False,
|
|
1193
|
+
)
|
|
1194
|
+
# Move the data to the feature (as written by h5io)
|
|
1195
|
+
with h5py.File(fname, mode="a") as fid:
|
|
1196
|
+
fid.move(data_key, f"{feature_md5}/key_data")
|
|
Binary file
|
|
@@ -10,6 +10,7 @@ from pathlib import Path
|
|
|
10
10
|
import h5py
|
|
11
11
|
import numpy as np
|
|
12
12
|
import pytest
|
|
13
|
+
from h5io import read_hdf5
|
|
13
14
|
from numpy.testing import assert_array_equal
|
|
14
15
|
from pandas.testing import assert_frame_equal
|
|
15
16
|
|
|
@@ -1166,3 +1167,149 @@ def test_collect_error_single_output() -> None:
|
|
|
1166
1167
|
):
|
|
1167
1168
|
storage = HDF5FeatureStorage(uri="/tmp", single_output=True)
|
|
1168
1169
|
storage.collect()
|
|
1170
|
+
|
|
1171
|
+
|
|
1172
|
+
def test_read_collected_with_h5io_fork() -> None:
|
|
1173
|
+
"""Test reading features collected with junifer's fork of h5io.
|
|
1174
|
+
|
|
1175
|
+
The file was collected from three elements (``sub-01`` to ``sub-03``),
|
|
1176
|
+
each with a vector, a matrix and a timeseries computed from the element
|
|
1177
|
+
index ``i``.
|
|
1178
|
+
|
|
1179
|
+
"""
|
|
1180
|
+
uri = Path(__file__).parent / "data" / "collected_h5io_fork.hdf5"
|
|
1181
|
+
storage = HDF5FeatureStorage(uri=uri)
|
|
1182
|
+
md5s = {meta["name"]: md5 for md5, meta in storage.list_features().items()}
|
|
1183
|
+
elements = [{"subject": f"sub-0{i}"} for i in range(1, 4)]
|
|
1184
|
+
# The vector data is stored as a "chunkedarray"
|
|
1185
|
+
vector = storage.read(feature_md5=md5s["BOLD_vec"])
|
|
1186
|
+
assert vector["element"] == elements
|
|
1187
|
+
assert vector["data"].dtype == np.float32
|
|
1188
|
+
for i in range(3):
|
|
1189
|
+
assert_array_equal(
|
|
1190
|
+
vector["data"][:, i], np.float32(np.array([0.1, 0.2]) + i)
|
|
1191
|
+
)
|
|
1192
|
+
# The matrix data is stored as a "chunkedarray"
|
|
1193
|
+
matrix = storage.read(feature_md5=md5s["BOLD_mat"])
|
|
1194
|
+
assert matrix["element"] == elements
|
|
1195
|
+
for i in range(3):
|
|
1196
|
+
assert_array_equal(
|
|
1197
|
+
matrix["data"][..., i], np.array([[1.0, 0.5], [0.5, 1.0]]) + i
|
|
1198
|
+
)
|
|
1199
|
+
# The timeseries data is stored as a "chunkedlist"
|
|
1200
|
+
timeseries = storage.read(feature_md5=md5s["BOLD_ts"])
|
|
1201
|
+
assert timeseries["element"] == elements
|
|
1202
|
+
assert len(timeseries["data"]) == 3
|
|
1203
|
+
for i in range(3):
|
|
1204
|
+
assert_array_equal(
|
|
1205
|
+
timeseries["data"][i], np.arange(6.0).reshape(3, 2) + i
|
|
1206
|
+
)
|
|
1207
|
+
assert storage.read_df(feature_md5=md5s["BOLD_ts"]).shape == (9, 2)
|
|
1208
|
+
|
|
1209
|
+
|
|
1210
|
+
def _store_and_collect(uri: Path, force_float32: bool) -> HDF5FeatureStorage:
|
|
1211
|
+
"""Store a vector and a timeseries for three elements and collect them.
|
|
1212
|
+
|
|
1213
|
+
Parameters
|
|
1214
|
+
----------
|
|
1215
|
+
uri : pathlib.Path
|
|
1216
|
+
The path to the collected file.
|
|
1217
|
+
force_float32 : bool
|
|
1218
|
+
Whether to store the data as float32.
|
|
1219
|
+
|
|
1220
|
+
Returns
|
|
1221
|
+
-------
|
|
1222
|
+
HDF5FeatureStorage
|
|
1223
|
+
The storage of the collected file.
|
|
1224
|
+
|
|
1225
|
+
"""
|
|
1226
|
+
storage = HDF5FeatureStorage(
|
|
1227
|
+
uri=uri,
|
|
1228
|
+
single_output=False,
|
|
1229
|
+
force_float32=force_float32,
|
|
1230
|
+
chunk_size=2,
|
|
1231
|
+
)
|
|
1232
|
+
for i in range(3):
|
|
1233
|
+
meta = {
|
|
1234
|
+
"element": {"subject": f"sub-0{i}"},
|
|
1235
|
+
"dependencies": [],
|
|
1236
|
+
"type": "BOLD",
|
|
1237
|
+
}
|
|
1238
|
+
storage.store(
|
|
1239
|
+
kind="vector",
|
|
1240
|
+
meta={**meta, "marker": {"name": "vec"}},
|
|
1241
|
+
data=np.array([[0.1, 0.2]]) + i,
|
|
1242
|
+
col_names=["a", "b"],
|
|
1243
|
+
)
|
|
1244
|
+
storage.store(
|
|
1245
|
+
kind="timeseries",
|
|
1246
|
+
meta={**meta, "marker": {"name": "ts"}},
|
|
1247
|
+
data=np.arange(6.0).reshape(3, 2) + i,
|
|
1248
|
+
col_names=["a", "b"],
|
|
1249
|
+
)
|
|
1250
|
+
storage.collect()
|
|
1251
|
+
return HDF5FeatureStorage(uri=uri)
|
|
1252
|
+
|
|
1253
|
+
|
|
1254
|
+
@pytest.mark.parametrize(
|
|
1255
|
+
"force_float32, dtype", [(True, np.float32), (False, np.float64)]
|
|
1256
|
+
)
|
|
1257
|
+
def test_collect_dtype(
|
|
1258
|
+
tmp_path: Path, force_float32: bool, dtype: np.dtype
|
|
1259
|
+
) -> None:
|
|
1260
|
+
"""Test collected data keeps its dtype.
|
|
1261
|
+
|
|
1262
|
+
Parameters
|
|
1263
|
+
----------
|
|
1264
|
+
tmp_path : pathlib.Path
|
|
1265
|
+
The path to the test directory.
|
|
1266
|
+
force_float32 : bool
|
|
1267
|
+
The parametrized casting of the data to float32.
|
|
1268
|
+
dtype : numpy.dtype
|
|
1269
|
+
The parametrized dtype of the collected data.
|
|
1270
|
+
|
|
1271
|
+
"""
|
|
1272
|
+
storage = _store_and_collect(tmp_path / "out.hdf5", force_float32)
|
|
1273
|
+
md5s = {meta["name"]: md5 for md5, meta in storage.list_features().items()}
|
|
1274
|
+
vector = storage.read(feature_md5=md5s["BOLD_vec"])
|
|
1275
|
+
timeseries = storage.read(feature_md5=md5s["BOLD_ts"])
|
|
1276
|
+
assert vector["data"].dtype == dtype
|
|
1277
|
+
assert all(x.dtype == dtype for x in timeseries["data"])
|
|
1278
|
+
# The elements are collected in any order
|
|
1279
|
+
for i_element, element in enumerate(vector["element"]):
|
|
1280
|
+
i = int(element["subject"][-1])
|
|
1281
|
+
expected = np.array([0.1, 0.2]) + i
|
|
1282
|
+
assert_array_equal(
|
|
1283
|
+
vector["data"][:, i_element], expected.astype(dtype)
|
|
1284
|
+
)
|
|
1285
|
+
|
|
1286
|
+
|
|
1287
|
+
def test_collect_h5io_types(tmp_path: Path) -> None:
|
|
1288
|
+
"""Test collected data is stored with h5io types and can be re-collected.
|
|
1289
|
+
|
|
1290
|
+
Parameters
|
|
1291
|
+
----------
|
|
1292
|
+
tmp_path : pathlib.Path
|
|
1293
|
+
The path to the test directory.
|
|
1294
|
+
|
|
1295
|
+
"""
|
|
1296
|
+
uri = tmp_path / "out.hdf5"
|
|
1297
|
+
storage = _store_and_collect(uri, force_float32=False)
|
|
1298
|
+
collected = {
|
|
1299
|
+
md5: read_hdf5(uri, title=md5) for md5 in storage.list_features()
|
|
1300
|
+
}
|
|
1301
|
+
# The data is only in the features
|
|
1302
|
+
with h5py.File(uri, mode="r") as fid:
|
|
1303
|
+
assert set(fid.keys()) == {"meta", *collected.keys()}
|
|
1304
|
+
# Collect again
|
|
1305
|
+
_store_and_collect(uri, force_float32=False)
|
|
1306
|
+
for md5, feature in collected.items():
|
|
1307
|
+
recollected = read_hdf5(uri, title=md5)
|
|
1308
|
+
assert recollected["element"] == feature["element"]
|
|
1309
|
+
if isinstance(feature["data"], list):
|
|
1310
|
+
for new, old in zip(
|
|
1311
|
+
recollected["data"], feature["data"], strict=True
|
|
1312
|
+
):
|
|
1313
|
+
assert_array_equal(new, old)
|
|
1314
|
+
else:
|
|
1315
|
+
assert_array_equal(recollected["data"], feature["data"])
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: junifer
|
|
3
|
-
Version: 0.0.8.
|
|
3
|
+
Version: 0.0.8.dev306
|
|
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>
|
|
@@ -37,6 +37,7 @@ Requires-Dist: nilearn<0.15,>=0.14.0
|
|
|
37
37
|
Requires-Dist: sqlalchemy<2.2.0,>=2.0.25
|
|
38
38
|
Requires-Dist: ruamel.yaml<0.20,>=0.17
|
|
39
39
|
Requires-Dist: h5py>=3.10
|
|
40
|
+
Requires-Dist: h5io<0.3,>=0.2.5
|
|
40
41
|
Requires-Dist: tqdm<4.71.0,>=4.66.1
|
|
41
42
|
Requires-Dist: templateflow<26.0.0,>=23.0.0
|
|
42
43
|
Requires-Dist: lapy<2.0.0,>=1.0.0
|
|
@@ -76,6 +76,8 @@ docs/changes/newsfragments/492.bugfix
|
|
|
76
76
|
docs/changes/newsfragments/499.enh
|
|
77
77
|
docs/changes/newsfragments/502.bugfix
|
|
78
78
|
docs/changes/newsfragments/503.enh
|
|
79
|
+
docs/changes/newsfragments/504.bugfix
|
|
80
|
+
docs/changes/newsfragments/504.misc
|
|
79
81
|
docs/changes/newsfragments/509.enh
|
|
80
82
|
docs/changes/newsfragments/510.bugfix
|
|
81
83
|
docs/changes/newsfragments/511.bugfix
|
|
@@ -369,29 +371,6 @@ junifer/external/BrainPrint/doc/_templates/autosummary/class.rst
|
|
|
369
371
|
junifer/external/BrainPrint/doc/_templates/autosummary/function.rst
|
|
370
372
|
junifer/external/BrainPrint/doc/_templates/autosummary/module.rst
|
|
371
373
|
junifer/external/BrainPrint/doc/api/index.rst
|
|
372
|
-
junifer/external/h5io/.coveragerc
|
|
373
|
-
junifer/external/h5io/.gitattributes
|
|
374
|
-
junifer/external/h5io/.gitignore
|
|
375
|
-
junifer/external/h5io/.travis.yml
|
|
376
|
-
junifer/external/h5io/LICENSE.txt
|
|
377
|
-
junifer/external/h5io/MANIFEST.in
|
|
378
|
-
junifer/external/h5io/Makefile
|
|
379
|
-
junifer/external/h5io/README.rst
|
|
380
|
-
junifer/external/h5io/azure-pipelines.yml
|
|
381
|
-
junifer/external/h5io/setup.cfg
|
|
382
|
-
junifer/external/h5io/setup.py
|
|
383
|
-
junifer/external/h5io/versioneer.py
|
|
384
|
-
junifer/external/h5io/.vscode/launch.json
|
|
385
|
-
junifer/external/h5io/.vscode/settings.json
|
|
386
|
-
junifer/external/h5io/h5io/__init__.py
|
|
387
|
-
junifer/external/h5io/h5io/_h5io.py
|
|
388
|
-
junifer/external/h5io/h5io/_version.py
|
|
389
|
-
junifer/external/h5io/h5io/chunked_array.py
|
|
390
|
-
junifer/external/h5io/h5io/chunked_list.py
|
|
391
|
-
junifer/external/h5io/h5io/tests/__init__.py
|
|
392
|
-
junifer/external/h5io/h5io/tests/test_chunked_array.py
|
|
393
|
-
junifer/external/h5io/h5io/tests/test_chunked_list.py
|
|
394
|
-
junifer/external/h5io/h5io/tests/test_io.py
|
|
395
374
|
junifer/external/nilearn/__init__.py
|
|
396
375
|
junifer/external/nilearn/__init__.pyi
|
|
397
376
|
junifer/external/nilearn/junifer_connectivity_measure.py
|
|
@@ -555,6 +534,7 @@ junifer/storage/tests/test_pandas_base.py
|
|
|
555
534
|
junifer/storage/tests/test_sqlite.py
|
|
556
535
|
junifer/storage/tests/test_storage_base.py
|
|
557
536
|
junifer/storage/tests/test_utils.py
|
|
537
|
+
junifer/storage/tests/data/collected_h5io_fork.hdf5
|
|
558
538
|
junifer/testing/__init__.py
|
|
559
539
|
junifer/testing/__init__.pyi
|
|
560
540
|
junifer/testing/datagrabbers.py
|