junifer 0.0.6.dev409__tar.gz → 0.0.6.dev418__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.6.dev409 → junifer-0.0.6.dev418}/.github/workflows/ci-docs.yml +3 -1
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.github/workflows/ci.yml +3 -3
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.github/workflows/docker-ci-publish.yml +5 -5
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.github/workflows/docker-docs-publish.yml +5 -5
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.github/workflows/docs.yml +2 -2
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/PKG-INFO +1 -1
- junifer-0.0.6.dev418/docs/changes/newsfragments/422.feature +1 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/_version.py +2 -2
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/storage/base.py +33 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/storage/hdf5.py +74 -13
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/storage/tests/test_hdf5.py +85 -2
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/storage/tests/test_storage_base.py +5 -2
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/storage/tests/test_utils.py +25 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/storage/utils.py +86 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer.egg-info/PKG-INFO +1 -1
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer.egg-info/SOURCES.txt +1 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.dockerignore +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.github/dependabot.yml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.github/pull_request_template.md +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.github/workflows/docs-preview.yml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.github/workflows/lint.yml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.github/workflows/publish.yml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.gitignore +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.gitmodules +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/.pre-commit-config.yaml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/AUTHORS.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/Dockerfile-ci +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/Dockerfile-docs +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/LICENSE.md +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/README.md +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/codecov.yml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/conda-env.yml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/Makefile +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/_static/css/custom.css +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/_static/js/custom.js +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/_templates/versions.html +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/api/api.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/api/cli.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/api/configs.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/api/data.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/api/datagrabbers.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/api/datareaders.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/api/index.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/api/markers.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/api/nilearn.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/api/onthefly.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/api/pipeline.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/api/preprocessing.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/api/stats.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/api/storage.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/api/testing.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/api/utils.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/builtin.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/contributors.inc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/.gitignore +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/319.enh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/335.enh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/354.feature +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/355.misc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/356.bugfix +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/357.enh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/358.doc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/359.doc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/360.bugfix +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/361.misc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/362.feature +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/367.enh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/368.enh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/369.bugfix +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/370.bugfix +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/372.misc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/373.misc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/374.misc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/380.misc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/382.misc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/383.misc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/384.misc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/385.bugfix +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/386.bugfix +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/387.change +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/387.feature +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/388.bugfix +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/389.enh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/390.change +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/390.enh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/391.misc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/392.feature +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/393.misc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/395.enh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/396.misc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/398.bugfix +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/401.feature +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/402.change +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/402.enh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/403.enh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/404.change +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/404.enh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/405.change +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/405.enh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/407.feature +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/408.enh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/408.feature +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/409.bugfix +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/409.enh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/411.change +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/411.enh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/412.change +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/412.feature +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/413.change +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/414.misc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/415.change +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/416.enh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/changes/newsfragments/420.bugfix +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/conf.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/contribution.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/extending/coordinates.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/extending/datagrabber.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/extending/dependencies.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/extending/extension.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/extending/index.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/extending/marker.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/extending/masks.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/extending/parcellations.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/extending/preprocessor.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/faq.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/help.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/images/junifer_logo.png +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/index.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/installation.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/links.inc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/maintaining.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/redirect.html +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/starting.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/understanding/data.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/understanding/datagrabber.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/understanding/datareader.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/understanding/index.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/understanding/marker.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/understanding/pipeline.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/understanding/preprocess.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/understanding/storage.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/using/codeless.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/using/index.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/using/masks.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/using/queueing.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/using/running.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/docs/whats_new.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/examples/README.rst +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/examples/norun_hcpfc_pearson.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/examples/norun_ukbvm_gmd.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/examples/run_compute_parcel_mean.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/examples/run_datagrabber_bids_datalad.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/examples/run_ets_rss_marker.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/examples/run_junifer_julearn.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/examples/run_run_gmd_mean.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/examples/yamls/gmd_mean.yaml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/examples/yamls/partly_cloudy_agg_mean_tian.yml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/examples/yamls/ukb_gmd_mean.yaml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/ignore_words.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/decorators.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/functions.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/queue_context/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/queue_context/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/queue_context/gnu_parallel_local_adapter.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/queue_context/htcondor_adapter.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/queue_context/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/queue_context/queue_context_adapter.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/queue_context/tests/test_htcondor_adapter.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/afni/3dRSFC +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/afni/3dReHo +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/afni/afni +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/afni/run_afni_docker.sh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/ants/ResampleImage +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/ants/antsApplyTransforms +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/ants/run_ants_docker.sh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/freesurfer/mri_binarize +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/freesurfer/mri_mc +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/freesurfer/mri_pretess +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/freesurfer/mris_convert +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/freesurfer/run_freesurfer_docker.sh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/fsl/applywarp +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/fsl/flirt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/fsl/img2imgcoord +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/fsl/std2imgcoord +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/run_conda.bash +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/run_conda.zsh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/run_venv.bash +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/res/run_venv.zsh +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/api/tests/test_functions.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/cli/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/cli/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/cli/cli.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/cli/parser.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/cli/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/cli/tests/data/gmd_mean.yaml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/cli/tests/data/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/cli/tests/test_cli.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/cli/tests/test_cli_utils.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/cli/tests/test_parser.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/cli/utils.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/juseless/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/juseless/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/juseless/datagrabbers/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/juseless/datagrabbers/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/configs/juseless/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/conftest.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/_dispatch.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/AutobiographicalMemory_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/CogAC_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/CogAR_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/DMNBuckner_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/Dosenbach2010_MNI_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/Empathy_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/Motor_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/MultiTask_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/PhysioStress_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/Power2011_MNI_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/Power2013_MNI_VOIs.tsv +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/Rew_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/Somatosensory_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/ToM_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/VigAtt_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/WM_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/eMDN_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/eSAD_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/VOIs/meta/extDMN_VOIs.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/_ants_coordinates_warper.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/_coordinates.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/_fsl_coordinates_warper.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/coordinates/tests/test_coordinates.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/masks/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/masks/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/masks/_ants_mask_warper.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/masks/_fsl_mask_warper.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/masks/_masks.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/masks/tests/test_masks.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/masks/ukb/UKB_15K_GM_template.nii.gz +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/masks/vickery-patil/CAT12_IXI555_MNI152_TMP_GS_GMprob0.2_clean.nii.gz +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/masks/vickery-patil/CAT12_IXI555_MNI152_TMP_GS_GMprob0.2_clean_3mm.nii.gz +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/masks/vickery-patil/GMprob0.2_cortex_3mm_NA_rm.nii.gz +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/parcellations/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/parcellations/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/parcellations/_ants_parcellation_warper.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/parcellations/_fsl_parcellation_warper.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/parcellations/_parcellations.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/parcellations/tests/test_parcellations.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/pipeline_data_registry_base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/template_spaces.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/tests/test_data_utils.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/tests/test_template_spaces.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/data/utils.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/aomic/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/aomic/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/aomic/id1000.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/aomic/piop1.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/aomic/piop2.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/aomic/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/datalad_base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/dmcc13_benchmark.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/hcp1200/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/hcp1200/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/hcp1200/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/multiple.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/pattern.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/pattern_datalad.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/pattern_validation_mixin.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/tests/test_base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/tests/test_multiple.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/tests/test_pattern.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datagrabber/tests/test_pattern_validation_mixin.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datareader/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datareader/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datareader/default.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datareader/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/datareader/tests/test_default_reader.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/BrainPrint/brainprint/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/BrainPrint/brainprint/_version.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/BrainPrint/brainprint/asymmetry.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/BrainPrint/brainprint/brainprint.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/BrainPrint/brainprint/surfaces.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/BrainPrint/brainprint/utils/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/BrainPrint/brainprint/utils/_config.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/BrainPrint/brainprint/utils/utils.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/h5io/h5io/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/h5io/h5io/_h5io.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/h5io/h5io/_version.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/h5io/h5io/chunked_array.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/h5io/h5io/chunked_list.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/nilearn/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/nilearn/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/nilearn/junifer_connectivity_measure.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/nilearn/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/brainprint.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/complexity_base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/hurst_exponent.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/perm_entropy.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/range_entropy.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/range_entropy_auc.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/sample_entropy.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/ets_rss.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/falff/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/falff/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/falff/_afni_falff.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/falff/_junifer_falff.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/falff/falff_base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/falff/falff_parcels.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/falff/falff_spheres.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/falff/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/functional_connectivity/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/functional_connectivity/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/functional_connectivity/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/parcel_aggregation.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/reho/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/reho/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/reho/_afni_reho.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/reho/_junifer_reho.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/reho/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/reho/reho_base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/reho/reho_parcels.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/reho/reho_spheres.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/sphere_aggregation.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/temporal_snr/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/temporal_snr/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/temporal_snr/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/tests/test_brainprint.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/tests/test_ets_rss.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/tests/test_marker_utils.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/tests/test_markers_base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/markers/utils.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/onthefly/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/onthefly/_brainprint.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/onthefly/read_transform.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/onthefly/tests/test_read_transform.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/pipeline/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/pipeline/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/pipeline/marker_collection.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/pipeline/pipeline_component_registry.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/pipeline/pipeline_step_mixin.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/pipeline/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/pipeline/tests/test_marker_collection.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/pipeline/tests/test_pipeline_component_registry.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/pipeline/tests/test_workdir_manager.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/pipeline/update_meta_mixin.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/pipeline/utils.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/pipeline/workdir_manager.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/confounds/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/confounds/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/confounds/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/smoothing/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/smoothing/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/smoothing/_afni_smoothing.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/smoothing/_fsl_smoothing.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/smoothing/_nilearn_smoothing.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/smoothing/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/smoothing/smoothing.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/smoothing/tests/test_smoothing.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/tests/test_preprocess_base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/warping/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/warping/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/warping/_ants_warper.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/warping/_fsl_warper.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/warping/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/warping/space_warper.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/preprocess/warping/tests/test_space_warper.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/stats.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/storage/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/storage/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/storage/pandas_base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/storage/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/storage/sqlite.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/storage/tests/test_pandas_base.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/storage/tests/test_sqlite.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/testing/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/testing/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/testing/datagrabbers.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/testing/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/testing/registry.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/testing/tests/test_testing_registry.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/testing/utils.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/tests/test_main.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/tests/test_stats.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/typing/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/typing/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/typing/_typing.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/utils/__init__.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/utils/__init__.pyi +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/utils/_config.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/utils/_yaml.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/utils/fs.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/utils/helpers.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/utils/logging.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/utils/py.typed +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/utils/singleton.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/utils/tests/test_config.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/utils/tests/test_fs.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/utils/tests/test_helpers.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer/utils/tests/test_logging.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer.egg-info/dependency_links.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer.egg-info/entry_points.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer.egg-info/requires.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/junifer.egg-info/top_level.txt +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/pyproject.toml +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/setup.cfg +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/setup.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/tools/create_aomic1000_example_dataset.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/tools/create_aomicpiop1_example_dataset.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/tools/create_aomicpiop2_example_dataset.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/tools/create_bids_example_dataset.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/tools/create_bids_example_dataset_sessions.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/tools/create_hcp1200_example_dataset.py +0 -0
- {junifer-0.0.6.dev409 → junifer-0.0.6.dev418}/tox.ini +0 -0
@@ -4,10 +4,12 @@ on:
|
|
4
4
|
push:
|
5
5
|
paths-ignore:
|
6
6
|
- 'junifer/**'
|
7
|
+
- 'docs/changes/newsfragments/**'
|
7
8
|
- '.github/workflows/**'
|
8
9
|
pull_request:
|
9
10
|
paths-ignore:
|
10
11
|
- 'junifer/**'
|
12
|
+
- 'docs/changes/newsfragments/**'
|
11
13
|
- '.github/workflows/**'
|
12
14
|
jobs:
|
13
15
|
run-tests:
|
@@ -42,7 +44,7 @@ jobs:
|
|
42
44
|
echo '</coverage>' >> coverage.xml
|
43
45
|
if: matrix.python-version == 3.12
|
44
46
|
- name: Upload mock coverage to Codecov
|
45
|
-
uses: codecov/codecov-action@
|
47
|
+
uses: codecov/codecov-action@v5
|
46
48
|
with:
|
47
49
|
token: ${{ secrets.CODECOV_TOKEN }}
|
48
50
|
# Allow coverage upload failure
|
@@ -33,8 +33,8 @@ jobs:
|
|
33
33
|
- name: Install system dependencies
|
34
34
|
# actions/checkout fails to identify Git as it's not in the CI image
|
35
35
|
run: |
|
36
|
-
|
37
|
-
|
36
|
+
apt-get -qq update
|
37
|
+
apt-get -qq install -y \
|
38
38
|
git \
|
39
39
|
git-annex \
|
40
40
|
make \
|
@@ -65,7 +65,7 @@ jobs:
|
|
65
65
|
git config --system --add safe.directory $(pwd)
|
66
66
|
tox
|
67
67
|
- name: Upload coverage to Codecov
|
68
|
-
uses: codecov/codecov-action@
|
68
|
+
uses: codecov/codecov-action@v5
|
69
69
|
with:
|
70
70
|
token: ${{ secrets.CODECOV_TOKEN }}
|
71
71
|
fail_ci_if_error: true
|
@@ -45,7 +45,7 @@ jobs:
|
|
45
45
|
# https://github.com/sigstore/cosign-installer
|
46
46
|
- name: Install cosign
|
47
47
|
if: github.event_name != 'pull_request'
|
48
|
-
uses: sigstore/cosign-installer@
|
48
|
+
uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da #v3.7.0
|
49
49
|
with:
|
50
50
|
cosign-release: 'v2.2.4'
|
51
51
|
|
@@ -53,13 +53,13 @@ jobs:
|
|
53
53
|
# multi-platform images and export cache
|
54
54
|
# https://github.com/docker/setup-buildx-action
|
55
55
|
- name: Set up Docker Buildx
|
56
|
-
uses: docker/setup-buildx-action@
|
56
|
+
uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0
|
57
57
|
|
58
58
|
# Login against a Docker registry except on PR
|
59
59
|
# https://github.com/docker/login-action
|
60
60
|
- name: Log into registry ${{ env.REGISTRY }}
|
61
61
|
if: github.event_name != 'pull_request'
|
62
|
-
uses: docker/login-action@
|
62
|
+
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
|
63
63
|
with:
|
64
64
|
registry: ${{ env.REGISTRY }}
|
65
65
|
username: ${{ github.actor }}
|
@@ -69,7 +69,7 @@ jobs:
|
|
69
69
|
# https://github.com/docker/metadata-action
|
70
70
|
- name: Extract Docker metadata
|
71
71
|
id: meta
|
72
|
-
uses: docker/metadata-action@
|
72
|
+
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v5.6.1
|
73
73
|
with:
|
74
74
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
75
75
|
|
@@ -77,7 +77,7 @@ jobs:
|
|
77
77
|
# https://github.com/docker/build-push-action
|
78
78
|
- name: Build and push Docker image
|
79
79
|
id: build-and-push
|
80
|
-
uses: docker/build-push-action@
|
80
|
+
uses: docker/build-push-action@b32b51a8eda65d6793cd0494a773d4f6bcef32dc # v6.11.0
|
81
81
|
with:
|
82
82
|
context: .
|
83
83
|
file: Dockerfile-ci
|
@@ -42,7 +42,7 @@ jobs:
|
|
42
42
|
# https://github.com/sigstore/cosign-installer
|
43
43
|
- name: Install cosign
|
44
44
|
if: github.event_name != 'pull_request'
|
45
|
-
uses: sigstore/cosign-installer@
|
45
|
+
uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da #v3.7.0
|
46
46
|
with:
|
47
47
|
cosign-release: 'v2.2.4'
|
48
48
|
|
@@ -50,13 +50,13 @@ jobs:
|
|
50
50
|
# multi-platform images and export cache
|
51
51
|
# https://github.com/docker/setup-buildx-action
|
52
52
|
- name: Set up Docker Buildx
|
53
|
-
uses: docker/setup-buildx-action@
|
53
|
+
uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0
|
54
54
|
|
55
55
|
# Login against a Docker registry except on PR
|
56
56
|
# https://github.com/docker/login-action
|
57
57
|
- name: Log into registry ${{ env.REGISTRY }}
|
58
58
|
if: github.event_name != 'pull_request'
|
59
|
-
uses: docker/login-action@
|
59
|
+
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
|
60
60
|
with:
|
61
61
|
registry: ${{ env.REGISTRY }}
|
62
62
|
username: ${{ github.actor }}
|
@@ -66,7 +66,7 @@ jobs:
|
|
66
66
|
# https://github.com/docker/metadata-action
|
67
67
|
- name: Extract Docker metadata
|
68
68
|
id: meta
|
69
|
-
uses: docker/metadata-action@
|
69
|
+
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v5.6.1
|
70
70
|
with:
|
71
71
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
72
72
|
|
@@ -74,7 +74,7 @@ jobs:
|
|
74
74
|
# https://github.com/docker/build-push-action
|
75
75
|
- name: Build and push Docker image
|
76
76
|
id: build-and-push
|
77
|
-
uses: docker/build-push-action@
|
77
|
+
uses: docker/build-push-action@b32b51a8eda65d6793cd0494a773d4f6bcef32dc # v6.11.0
|
78
78
|
with:
|
79
79
|
context: .
|
80
80
|
file: Dockerfile-docs
|
@@ -22,8 +22,8 @@ jobs:
|
|
22
22
|
- name: Install system dependencies
|
23
23
|
# actions/checkout fails to identify Git as it's not in the CI image
|
24
24
|
run: |
|
25
|
-
|
26
|
-
|
25
|
+
apt-get -qq update
|
26
|
+
apt-get -qq install -y \
|
27
27
|
git \
|
28
28
|
git-annex \
|
29
29
|
make \
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: junifer
|
3
|
-
Version: 0.0.6.
|
3
|
+
Version: 0.0.6.dev418
|
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
|
+
Allow storage of 2D timeseries, currently only supported by HDF5FeatureStorage by `Fede Raimondo`_
|
@@ -12,5 +12,5 @@ __version__: str
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
13
13
|
version_tuple: VERSION_TUPLE
|
14
14
|
|
15
|
-
__version__ = version = '0.0.6.
|
16
|
-
__version_tuple__ = version_tuple = (0, 0, 6, '
|
15
|
+
__version__ = version = '0.0.6.dev418'
|
16
|
+
__version_tuple__ = version_tuple = (0, 0, 6, 'dev418')
|
@@ -226,6 +226,10 @@ class BaseFeatureStorage(ABC):
|
|
226
226
|
self.store_scalar_table(
|
227
227
|
meta_md5=meta_md5, element=t_element, **kwargs
|
228
228
|
)
|
229
|
+
elif kind == "timeseries_2d":
|
230
|
+
self.store_timeseries_2d(
|
231
|
+
meta_md5=meta_md5, element=t_element, **kwargs
|
232
|
+
)
|
229
233
|
|
230
234
|
def store_matrix(
|
231
235
|
self,
|
@@ -321,6 +325,35 @@ class BaseFeatureStorage(ABC):
|
|
321
325
|
klass=NotImplementedError,
|
322
326
|
)
|
323
327
|
|
328
|
+
def store_timeseries_2d(
|
329
|
+
self,
|
330
|
+
meta_md5: str,
|
331
|
+
element: dict,
|
332
|
+
data: np.ndarray,
|
333
|
+
col_names: Optional[Iterable[str]] = None,
|
334
|
+
row_names: Optional[Iterable[str]] = None,
|
335
|
+
) -> None:
|
336
|
+
"""Store 2D timeseries.
|
337
|
+
|
338
|
+
Parameters
|
339
|
+
----------
|
340
|
+
meta_md5 : str
|
341
|
+
The metadata MD5 hash.
|
342
|
+
element : dict
|
343
|
+
The element as a dictionary.
|
344
|
+
data : numpy.ndarray
|
345
|
+
The timeseries data to store.
|
346
|
+
col_names : list or tuple of str, optional
|
347
|
+
The column labels (default None).
|
348
|
+
row_names : list or tuple of str, optional
|
349
|
+
The row labels (default None).
|
350
|
+
|
351
|
+
"""
|
352
|
+
raise_error(
|
353
|
+
msg="Concrete classes need to implement store_timeseries_2d().",
|
354
|
+
klass=NotImplementedError,
|
355
|
+
)
|
356
|
+
|
324
357
|
def store_scalar_table(
|
325
358
|
self,
|
326
359
|
meta_md5: str,
|
@@ -4,7 +4,6 @@
|
|
4
4
|
# Federico Raimondo <f.raimondo@fz-juelich.de>
|
5
5
|
# License: AGPL
|
6
6
|
|
7
|
-
|
8
7
|
from collections import defaultdict
|
9
8
|
from collections.abc import Iterable
|
10
9
|
from pathlib import Path
|
@@ -24,7 +23,13 @@ from ..external.h5io.h5io import (
|
|
24
23
|
)
|
25
24
|
from ..utils import logger, raise_error
|
26
25
|
from .base import BaseFeatureStorage
|
27
|
-
from .utils import
|
26
|
+
from .utils import (
|
27
|
+
element_to_prefix,
|
28
|
+
matrix_to_vector,
|
29
|
+
store_matrix_checks,
|
30
|
+
store_timeseries_2d_checks,
|
31
|
+
timeseries2d_to_vector,
|
32
|
+
)
|
28
33
|
|
29
34
|
|
30
35
|
__all__ = ["HDF5FeatureStorage"]
|
@@ -82,7 +87,7 @@ def _create_chunk(
|
|
82
87
|
chunk_size=tuple(array_chunk_size),
|
83
88
|
n_chunk=i_chunk,
|
84
89
|
)
|
85
|
-
elif kind in ["timeseries", "scalar_table"]:
|
90
|
+
elif kind in ["timeseries", "scalar_table", "timeseries_2d"]:
|
86
91
|
out = ChunkedList(
|
87
92
|
data=chunk_data,
|
88
93
|
size=element_count,
|
@@ -91,8 +96,8 @@ def _create_chunk(
|
|
91
96
|
else:
|
92
97
|
raise_error(
|
93
98
|
f"Invalid kind: {kind}. "
|
94
|
-
"Must be one of ['vector', 'matrix', 'timeseries',"
|
95
|
-
"'scalar_table']."
|
99
|
+
"Must be one of ['vector', 'matrix', 'timeseries', "
|
100
|
+
"'timeseries_2d', 'scalar_table']."
|
96
101
|
)
|
97
102
|
return out
|
98
103
|
|
@@ -196,8 +201,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
196
201
|
if not self.single_output and not element:
|
197
202
|
raise_error(
|
198
203
|
msg=(
|
199
|
-
"`element` must be provided when `single_output` "
|
200
|
-
"is False"
|
204
|
+
"`element` must be provided when `single_output` is False"
|
201
205
|
),
|
202
206
|
klass=RuntimeError,
|
203
207
|
)
|
@@ -514,6 +518,27 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
514
518
|
columns = hdf_data["column_headers"]
|
515
519
|
# Convert data from 3D to 2D
|
516
520
|
reshaped_data = np.concatenate(all_data, axis=0)
|
521
|
+
elif hdf_data["kind"] == "timeseries_2d":
|
522
|
+
# Create dictionary for aggregating index data
|
523
|
+
element_idx = defaultdict(list)
|
524
|
+
all_data = []
|
525
|
+
for idx, element in enumerate(hdf_data["element"]):
|
526
|
+
# Get row count for the element
|
527
|
+
t_data = hdf_data["data"][idx]
|
528
|
+
flat_data, columns = timeseries2d_to_vector(
|
529
|
+
data=t_data,
|
530
|
+
col_names=hdf_data["column_headers"],
|
531
|
+
row_names=hdf_data["row_headers"],
|
532
|
+
)
|
533
|
+
all_data.append(flat_data)
|
534
|
+
n_timepoints = flat_data.shape[0]
|
535
|
+
# Set rows for the index
|
536
|
+
for key, val in element.items():
|
537
|
+
element_idx[key].extend([val] * n_timepoints)
|
538
|
+
# Add extra column for timepoints
|
539
|
+
element_idx["timepoint"].extend(np.arange(n_timepoints))
|
540
|
+
# Convert data from 3D to 2D
|
541
|
+
reshaped_data = np.concatenate(all_data, axis=0)
|
517
542
|
elif hdf_data["kind"] == "scalar_table":
|
518
543
|
# Create dictionary for aggregating index data
|
519
544
|
element_idx = defaultdict(list)
|
@@ -765,7 +790,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
765
790
|
)
|
766
791
|
|
767
792
|
t_data = stored_data["data"]
|
768
|
-
if kind in ["timeseries", "scalar_table"]:
|
793
|
+
if kind in ["timeseries", "scalar_table", "timeseries_2d"]:
|
769
794
|
t_data += data
|
770
795
|
else:
|
771
796
|
t_data = np.concatenate((t_data, data), axis=-1)
|
@@ -947,6 +972,44 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
947
972
|
row_header_column_name="timepoint",
|
948
973
|
)
|
949
974
|
|
975
|
+
def store_timeseries_2d(
|
976
|
+
self,
|
977
|
+
meta_md5: str,
|
978
|
+
element: dict[str, str],
|
979
|
+
data: np.ndarray,
|
980
|
+
col_names: Optional[Iterable[str]] = None,
|
981
|
+
row_names: Optional[Iterable[str]] = None,
|
982
|
+
) -> None:
|
983
|
+
"""Store a 2D timeseries.
|
984
|
+
|
985
|
+
Parameters
|
986
|
+
----------
|
987
|
+
meta_md5 : str
|
988
|
+
The metadata MD5 hash.
|
989
|
+
element : dict
|
990
|
+
The element as dictionary.
|
991
|
+
data : numpy.ndarray
|
992
|
+
The 2D timeseries data to store.
|
993
|
+
col_names : list or tuple of str, optional
|
994
|
+
The column labels (default None).
|
995
|
+
row_names : list or tuple of str, optional
|
996
|
+
The row labels (default None).
|
997
|
+
|
998
|
+
"""
|
999
|
+
store_timeseries_2d_checks(
|
1000
|
+
data_shape=data.shape,
|
1001
|
+
row_names_len=len(row_names), # type: ignore
|
1002
|
+
col_names_len=len(col_names), # type: ignore
|
1003
|
+
)
|
1004
|
+
self._store_data(
|
1005
|
+
kind="timeseries_2d",
|
1006
|
+
meta_md5=meta_md5,
|
1007
|
+
element=[element], # convert to list
|
1008
|
+
data=[data], # convert to list
|
1009
|
+
column_headers=col_names,
|
1010
|
+
row_headers=row_names,
|
1011
|
+
)
|
1012
|
+
|
950
1013
|
def store_scalar_table(
|
951
1014
|
self,
|
952
1015
|
meta_md5: str,
|
@@ -1014,8 +1077,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
1014
1077
|
|
1015
1078
|
# Run loop to collect metadata
|
1016
1079
|
logger.info(
|
1017
|
-
"Collecting metadata from "
|
1018
|
-
f"{self.uri.parent}/*_{self.uri.name}" # type: ignore
|
1080
|
+
f"Collecting metadata from {self.uri.parent}/*_{self.uri.name}" # type: ignore
|
1019
1081
|
)
|
1020
1082
|
# Collect element files per feature MD5
|
1021
1083
|
elements_per_feature_md5 = defaultdict(list)
|
@@ -1046,8 +1108,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
1046
1108
|
|
1047
1109
|
# Run loop to collect data per feature per file
|
1048
1110
|
logger.info(
|
1049
|
-
"Collecting data from "
|
1050
|
-
f"{self.uri.parent}/*_{self.uri.name}" # type: ignore
|
1111
|
+
f"Collecting data from {self.uri.parent}/*_{self.uri.name}" # type: ignore
|
1051
1112
|
)
|
1052
1113
|
logger.info(f"Will collect {len(elements_per_feature_md5)} features.")
|
1053
1114
|
|
@@ -1092,7 +1153,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
1092
1153
|
kind = static_data["kind"]
|
1093
1154
|
|
1094
1155
|
# Append the "dynamic" data
|
1095
|
-
if kind in ["timeseries", "scalar_table"]:
|
1156
|
+
if kind in ["timeseries", "scalar_table", "timeseries_2d"]:
|
1096
1157
|
chunk_data.extend(t_data["data"])
|
1097
1158
|
else:
|
1098
1159
|
chunk_data.append(t_data["data"])
|
@@ -826,6 +826,70 @@ def test_store_timeseries(tmp_path: Path) -> None:
|
|
826
826
|
assert_array_equal(read_df.values, data)
|
827
827
|
|
828
828
|
|
829
|
+
def test_store_timeseries2d(tmp_path: Path) -> None:
|
830
|
+
"""Test 2D timeseries store.
|
831
|
+
|
832
|
+
Parameters
|
833
|
+
----------
|
834
|
+
tmp_path : pathlib.Path
|
835
|
+
The path to the test directory.
|
836
|
+
|
837
|
+
"""
|
838
|
+
uri = tmp_path / "test_store_timeseries_2d.hdf5"
|
839
|
+
storage = HDF5FeatureStorage(uri=uri)
|
840
|
+
# Metadata to store
|
841
|
+
element = {"subject": "test"}
|
842
|
+
meta = {
|
843
|
+
"element": element,
|
844
|
+
"dependencies": ["numpy"],
|
845
|
+
"marker": {"name": "fc"},
|
846
|
+
"type": "BOLD",
|
847
|
+
}
|
848
|
+
# Process the metadata
|
849
|
+
meta_md5, meta_to_store, element_to_store = process_meta(meta)
|
850
|
+
# Store metadata
|
851
|
+
storage.store_metadata(
|
852
|
+
meta_md5=meta_md5, element=element_to_store, meta=meta_to_store
|
853
|
+
)
|
854
|
+
|
855
|
+
# Data to store
|
856
|
+
data = np.array(
|
857
|
+
[[10, 11, 12], [20, 21, 22], [30, 31, 32], [40, 41, 42], [50, 51, 52]]
|
858
|
+
)
|
859
|
+
data = np.c_[[data + (i * 100) for i in range(4)]] # Generate timeseries
|
860
|
+
|
861
|
+
col_names = ["roi1", "roi2", "roi3"]
|
862
|
+
row_names = ["ev1", "ev2", "ev3", "ev4", "ev5"]
|
863
|
+
|
864
|
+
# Store 2D timeseries
|
865
|
+
storage.store_timeseries_2d(
|
866
|
+
meta_md5=meta_md5,
|
867
|
+
element=element_to_store,
|
868
|
+
data=data,
|
869
|
+
col_names=col_names,
|
870
|
+
row_names=row_names,
|
871
|
+
)
|
872
|
+
|
873
|
+
# Read into dataframe
|
874
|
+
read_data = storage.read(feature_md5=meta_md5)
|
875
|
+
# Check if data are equal
|
876
|
+
assert_array_equal(read_data["data"][0], data)
|
877
|
+
assert read_data["column_headers"] == col_names
|
878
|
+
assert read_data["row_headers"], row_names
|
879
|
+
|
880
|
+
read_df = storage.read_df(feature_md5=meta_md5)
|
881
|
+
flatted_names = [f"{row}~{col}" for row in row_names for col in col_names]
|
882
|
+
|
883
|
+
expected_flat_data = np.array(
|
884
|
+
[10, 11, 12, 20, 21, 22, 30, 31, 32, 40, 41, 42, 50, 51, 52]
|
885
|
+
)
|
886
|
+
expected_flat_data = np.c_[
|
887
|
+
[expected_flat_data + (i * 100) for i in range(4)]
|
888
|
+
] # Generate timeseries
|
889
|
+
assert_array_equal(read_df.values, expected_flat_data)
|
890
|
+
assert read_df.columns.to_list() == flatted_names
|
891
|
+
|
892
|
+
|
829
893
|
def test_store_scalar_table(tmp_path: Path) -> None:
|
830
894
|
"""Test scalar table store.
|
831
895
|
|
@@ -857,7 +921,7 @@ def test_store_scalar_table(tmp_path: Path) -> None:
|
|
857
921
|
col_names = ["roi1", "roi2"]
|
858
922
|
row_names = ["ev1", "ev2", "ev3"]
|
859
923
|
|
860
|
-
# Store
|
924
|
+
# Store scalar table
|
861
925
|
storage.store_scalar_table(
|
862
926
|
meta_md5=meta_md5,
|
863
927
|
element=element_to_store,
|
@@ -910,6 +974,12 @@ def _create_data_to_store(n_elements: int, kind: str) -> tuple[str, dict]:
|
|
910
974
|
"data": np.arange(20).reshape(2, 10),
|
911
975
|
"col_names": [f"col-{i}" for i in range(10)],
|
912
976
|
}
|
977
|
+
elif kind in "timeseries_2d":
|
978
|
+
data_to_store = {
|
979
|
+
"data": np.arange(120).reshape(6, 5, 4),
|
980
|
+
"row_names": [f"row-{i}" for i in range(5)],
|
981
|
+
"col_names": [f"col-{i}" for i in range(4)],
|
982
|
+
}
|
913
983
|
elif kind in "scalar_table":
|
914
984
|
data_to_store = {
|
915
985
|
"data": np.arange(50).reshape(5, 10),
|
@@ -961,6 +1031,7 @@ def _create_data_to_store(n_elements: int, kind: str) -> tuple[str, dict]:
|
|
961
1031
|
(10, 5, "matrix"),
|
962
1032
|
(10, 5, "timeseries"),
|
963
1033
|
(10, 5, "scalar_table"),
|
1034
|
+
(10, 5, "timeseries_2d"),
|
964
1035
|
],
|
965
1036
|
)
|
966
1037
|
def test_multi_output_store_and_collect(
|
@@ -982,7 +1053,9 @@ def test_multi_output_store_and_collect(
|
|
982
1053
|
"""
|
983
1054
|
uri = tmp_path / "test_multi_output_store_and_collect.hdf5"
|
984
1055
|
storage = HDF5FeatureStorage(
|
985
|
-
uri=uri,
|
1056
|
+
uri=uri,
|
1057
|
+
single_output=False,
|
1058
|
+
chunk_size=chunk_size,
|
986
1059
|
)
|
987
1060
|
|
988
1061
|
meta_md5, all_data = _create_data_to_store(n_elements, kind)
|
@@ -1013,6 +1086,12 @@ def test_multi_output_store_and_collect(
|
|
1013
1086
|
element=t_data["element"],
|
1014
1087
|
**t_data["data"],
|
1015
1088
|
)
|
1089
|
+
elif kind == "timeseries_2d":
|
1090
|
+
storage.store_timeseries_2d(
|
1091
|
+
meta_md5=meta_md5,
|
1092
|
+
element=t_data["element"],
|
1093
|
+
**t_data["data"],
|
1094
|
+
)
|
1016
1095
|
elif kind == "scalar_table":
|
1017
1096
|
storage.store_scalar_table(
|
1018
1097
|
meta_md5=meta_md5,
|
@@ -1052,6 +1131,10 @@ def test_multi_output_store_and_collect(
|
|
1052
1131
|
data_size = np.sum([x["data"]["data"].shape[0] for x in all_data])
|
1053
1132
|
assert len(all_df) == data_size
|
1054
1133
|
idx_names = [x for x in all_df.index.names if x != "timepoint"]
|
1134
|
+
elif kind == "timeseries_2d":
|
1135
|
+
data_size = np.sum([x["data"]["data"].shape[0] for x in all_data])
|
1136
|
+
assert len(all_df) == data_size
|
1137
|
+
idx_names = [x for x in all_df.index.names if x != "timepoint"]
|
1055
1138
|
elif kind == "scalar_table":
|
1056
1139
|
data_size = np.sum([x["data"]["data"].shape[0] for x in all_data])
|
1057
1140
|
assert len(all_df) == data_size
|
@@ -25,7 +25,7 @@ def test_BaseFeatureStorage() -> None:
|
|
25
25
|
"""Implement concrete class."""
|
26
26
|
|
27
27
|
def __init__(self, uri, single_output=True):
|
28
|
-
storage_types = ["matrix", "vector", "timeseries"]
|
28
|
+
storage_types = ["matrix", "vector", "timeseries", "timeseries_2d"]
|
29
29
|
super().__init__(
|
30
30
|
uri=uri,
|
31
31
|
storage_types=storage_types,
|
@@ -33,7 +33,7 @@ def test_BaseFeatureStorage() -> None:
|
|
33
33
|
)
|
34
34
|
|
35
35
|
def get_valid_inputs(self):
|
36
|
-
return ["matrix", "vector", "timeseries"]
|
36
|
+
return ["matrix", "vector", "timeseries", "timeseries_2d"]
|
37
37
|
|
38
38
|
def list_features(self):
|
39
39
|
super().list_features()
|
@@ -97,6 +97,9 @@ def test_BaseFeatureStorage() -> None:
|
|
97
97
|
with pytest.raises(NotImplementedError):
|
98
98
|
st.store(kind="timeseries", meta=meta)
|
99
99
|
|
100
|
+
with pytest.raises(NotImplementedError):
|
101
|
+
st.store(kind="timeseries_2d", meta=meta)
|
102
|
+
|
100
103
|
with pytest.raises(NotImplementedError):
|
101
104
|
st.store(kind="vector", meta=meta)
|
102
105
|
|
@@ -17,6 +17,7 @@ from junifer.storage.utils import (
|
|
17
17
|
matrix_to_vector,
|
18
18
|
process_meta,
|
19
19
|
store_matrix_checks,
|
20
|
+
timeseries2d_to_vector,
|
20
21
|
)
|
21
22
|
|
22
23
|
|
@@ -421,3 +422,27 @@ def test_matrix_to_vector(
|
|
421
422
|
data, columns = matrix_to_vector(**params) # type: ignore
|
422
423
|
assert_array_equal(data, expected_data)
|
423
424
|
assert columns == expected_columns
|
425
|
+
|
426
|
+
|
427
|
+
def test_timeseries2d_to_vector() -> None:
|
428
|
+
"""Test timeseries2d to vector."""
|
429
|
+
data = np.array(
|
430
|
+
[[10, 11, 12], [20, 21, 22], [30, 31, 32], [40, 41, 42], [50, 51, 52]]
|
431
|
+
)
|
432
|
+
data = np.c_[[data + (i * 100) for i in range(4)]] # Generate timeseries
|
433
|
+
col_names = ["c0", "c1", "c2"]
|
434
|
+
row_names = ["r0", "r1", "r2", "r3", "r4"]
|
435
|
+
flat_data, columns = timeseries2d_to_vector(
|
436
|
+
data=data,
|
437
|
+
col_names=col_names,
|
438
|
+
row_names=row_names,
|
439
|
+
)
|
440
|
+
|
441
|
+
expected_flat_data = np.array(
|
442
|
+
[10, 11, 12, 20, 21, 22, 30, 31, 32, 40, 41, 42, 50, 51, 52]
|
443
|
+
)
|
444
|
+
expected_flat_data = np.c_[
|
445
|
+
[expected_flat_data + (i * 100) for i in range(4)]
|
446
|
+
] # Generate timeseries
|
447
|
+
assert_array_equal(flat_data, expected_flat_data)
|
448
|
+
assert columns == [f"{r}~{c}" for r in row_names for c in col_names]
|
@@ -181,6 +181,15 @@ def store_matrix_checks(
|
|
181
181
|
col_names_len : int
|
182
182
|
The length of column labels.
|
183
183
|
|
184
|
+
Raises
|
185
|
+
------
|
186
|
+
ValueError
|
187
|
+
If the matrix kind is invalid
|
188
|
+
If the diagonal is False and the matrix kind is "full"
|
189
|
+
If the matrix kind is "triu" or "tril" and the matrix is not square
|
190
|
+
If the number of row names does not match the number of rows
|
191
|
+
If the number of column names does not match the number of columns
|
192
|
+
|
184
193
|
"""
|
185
194
|
# Matrix kind validation
|
186
195
|
if matrix_kind not in ("triu", "tril", "full"):
|
@@ -212,6 +221,51 @@ def store_matrix_checks(
|
|
212
221
|
)
|
213
222
|
|
214
223
|
|
224
|
+
def store_timeseries_2d_checks(
|
225
|
+
data_shape: tuple[int, int, int],
|
226
|
+
row_names_len: int,
|
227
|
+
col_names_len: int,
|
228
|
+
) -> None:
|
229
|
+
"""Run parameter checks for store_timeseries_2d() methods.
|
230
|
+
|
231
|
+
Parameters
|
232
|
+
----------
|
233
|
+
data_shape : tuple of int and int
|
234
|
+
The shape of the matrix data to store.
|
235
|
+
row_names_len : int
|
236
|
+
The length of row labels.
|
237
|
+
col_names_len : int
|
238
|
+
The length of column labels.
|
239
|
+
|
240
|
+
Raises
|
241
|
+
------
|
242
|
+
ValueError
|
243
|
+
If the data is not a 3D array (timepoints, rows, columns)
|
244
|
+
If the number of row names does not match the number of rows
|
245
|
+
If the number of column names does not match the number of columns
|
246
|
+
|
247
|
+
"""
|
248
|
+
# data validation
|
249
|
+
if len(data_shape) != 3:
|
250
|
+
raise_error(
|
251
|
+
msg="Data must be a 3D array",
|
252
|
+
klass=ValueError,
|
253
|
+
)
|
254
|
+
|
255
|
+
# Row label validation
|
256
|
+
if row_names_len != data_shape[1]: # type: ignore
|
257
|
+
raise_error(
|
258
|
+
msg="Number of row names does not match number of rows",
|
259
|
+
klass=ValueError,
|
260
|
+
)
|
261
|
+
# Column label validation
|
262
|
+
if col_names_len != data_shape[2]: # type: ignore
|
263
|
+
raise_error(
|
264
|
+
msg="Number of column names does not match number of columns",
|
265
|
+
klass=ValueError,
|
266
|
+
)
|
267
|
+
|
268
|
+
|
215
269
|
def matrix_to_vector(
|
216
270
|
data: np.ndarray,
|
217
271
|
col_names: Iterable[str],
|
@@ -268,3 +322,35 @@ def matrix_to_vector(
|
|
268
322
|
]
|
269
323
|
|
270
324
|
return flat_data, columns
|
325
|
+
|
326
|
+
|
327
|
+
def timeseries2d_to_vector(
|
328
|
+
data: np.ndarray,
|
329
|
+
col_names: Iterable[str],
|
330
|
+
row_names: Iterable[str],
|
331
|
+
) -> tuple[np.ndarray, list[str]]:
|
332
|
+
"""Convert matrix to vector based on parameters.
|
333
|
+
|
334
|
+
Parameters
|
335
|
+
----------
|
336
|
+
data : 2D / 3D numpy.ndarray
|
337
|
+
The matrix / tensor data to store / read.
|
338
|
+
col_names : list or tuple of str
|
339
|
+
The column labels.
|
340
|
+
row_names : list or tuple of str
|
341
|
+
The row labels.
|
342
|
+
|
343
|
+
Returns
|
344
|
+
-------
|
345
|
+
2D numpy.ndarray
|
346
|
+
The vector / matrix data.
|
347
|
+
list of str
|
348
|
+
The column labels.
|
349
|
+
|
350
|
+
"""
|
351
|
+
# Reshape data to 2D
|
352
|
+
flat_data = data.reshape(data.shape[0], -1)
|
353
|
+
# Generate flat 1D row X column names
|
354
|
+
columns = [f"{r}~{c}" for r in row_names for c in col_names]
|
355
|
+
|
356
|
+
return flat_data, columns
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: junifer
|
3
|
-
Version: 0.0.6.
|
3
|
+
Version: 0.0.6.dev418
|
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>
|