junifer 0.0.5.dev86__tar.gz → 0.0.5.dev98__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.5.dev86 → junifer-0.0.5.dev98}/PKG-INFO +1 -1
- junifer-0.0.5.dev98/docs/changes/newsfragments/343.feature +1 -0
- junifer-0.0.5.dev98/docs/changes/newsfragments/345.feature +1 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/extending/datagrabber.rst +47 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/understanding/storage.rst +20 -13
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/_version.py +2 -2
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/pattern.py +17 -6
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/tests/test_pattern.py +45 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/storage/base.py +37 -1
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/storage/hdf5.py +68 -9
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/storage/tests/test_hdf5.py +82 -10
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer.egg-info/PKG-INFO +1 -1
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer.egg-info/SOURCES.txt +2 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.github/dependabot.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.github/pull_request_template.md +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.github/workflows/ci-docs.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.github/workflows/ci.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.github/workflows/docs-preview.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.github/workflows/docs.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.github/workflows/lint.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.github/workflows/pypi.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.gitignore +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.gitmodules +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/.pre-commit-config.yaml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/AUTHORS.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/LICENSE.md +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/README.md +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/codecov.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/conda-env.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/Makefile +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/_static/css/custom.css +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/_static/js/custom.js +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/_templates/versions.html +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/api/api.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/api/configs.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/api/data.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/api/datagrabbers.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/api/datareaders.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/api/index.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/api/markers.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/api/nilearn.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/api/onthefly.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/api/pipeline.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/api/preprocessing.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/api/stats.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/api/storage.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/api/testing.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/api/utils.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/builtin.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/changes/contributors.inc +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/changes/newsfragments/.gitignore +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/changes/newsfragments/115.doc +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/changes/newsfragments/161.feature +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/changes/newsfragments/273.feature +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/changes/newsfragments/323.feature +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/changes/newsfragments/324.bugfix +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/changes/newsfragments/330.doc +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/changes/newsfragments/331.bugfix +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/changes/newsfragments/332.bugfix +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/changes/newsfragments/336.removal +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/changes/newsfragments/339.bugfix +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/changes/newsfragments/340.bugfix +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/changes/newsfragments/341.enh +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/changes/newsfragments/342.misc +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/conf.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/contribution.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/extending/coordinates.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/extending/dependencies.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/extending/extension.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/extending/index.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/extending/marker.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/extending/masks.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/extending/parcellations.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/extending/preprocessor.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/faq.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/help.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/images/junifer_logo.png +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/index.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/installation.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/links.inc +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/maintaining.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/redirect.html +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/sphinxext/gh_substitutions.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/starting.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/understanding/data.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/understanding/datagrabber.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/understanding/datareader.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/understanding/index.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/understanding/marker.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/understanding/pipeline.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/understanding/preprocess.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/using/codeless.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/using/index.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/using/masks.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/using/queueing.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/using/running.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/docs/whats_new.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/examples/README.rst +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/examples/norun_hcpfc_pearson.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/examples/norun_ukbvm_gmd.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/examples/run_compute_parcel_mean.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/examples/run_datagrabber_bids_datalad.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/examples/run_ets_rss_marker.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/examples/run_junifer_julearn.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/examples/run_run_gmd_mean.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/examples/yamls/gmd_mean.yaml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/examples/yamls/partly_cloudy_agg_mean_tian.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/examples/yamls/ukb_gmd_mean.yaml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/ignore_words.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/cli.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/decorators.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/functions.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/parser.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/queue_context/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/queue_context/gnu_parallel_local_adapter.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/queue_context/htcondor_adapter.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/queue_context/queue_context_adapter.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/queue_context/tests/test_htcondor_adapter.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/afni/3dRSFC +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/afni/3dReHo +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/afni/afni +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/afni/run_afni_docker.sh +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/ants/ResampleImage +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/ants/antsApplyTransforms +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/ants/run_ants_docker.sh +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/freesurfer/mri_binarize +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/freesurfer/mri_mc +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/freesurfer/mri_pretess +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/freesurfer/mris_convert +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/freesurfer/run_freesurfer_docker.sh +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/fsl/applywarp +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/fsl/flirt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/fsl/img2imgcoord +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/fsl/std2imgcoord +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/run_conda.bash +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/run_conda.zsh +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/run_venv.bash +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/res/run_venv.zsh +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/tests/data/gmd_mean.yaml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/tests/data/gmd_mean_htcondor.yaml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/tests/data/partly_cloudy_agg_mean_tian.yml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/tests/test_api_utils.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/tests/test_cli.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/tests/test_functions.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/tests/test_parser.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/api/utils.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/configs/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/configs/juseless/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/AutobiographicalMemory_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/CogAC_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/CogAR_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/DMNBuckner_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/Dosenbach2010_MNI_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/Empathy_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/Motor_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/MultiTask_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/PhysioStress_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/Power2011_MNI_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/Power2013_MNI_VOIs.tsv +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/Rew_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/Somatosensory_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/ToM_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/VigAtt_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/WM_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/eMDN_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/eSAD_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/VOIs/meta/extDMN_VOIs.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/coordinates.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/masks/vickery-patil/CAT12_IXI555_MNI152_TMP_GS_GMprob0.2_clean.nii.gz +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/masks/vickery-patil/CAT12_IXI555_MNI152_TMP_GS_GMprob0.2_clean_3mm.nii.gz +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/masks/vickery-patil/GMprob0.2_cortex_3mm_NA_rm.nii.gz +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/masks.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/parcellations.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/template_spaces.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/tests/test_coordinates.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/tests/test_data_utils.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/tests/test_masks.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/tests/test_parcellations.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/tests/test_template_spaces.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/data/utils.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/aomic/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/aomic/id1000.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/aomic/piop1.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/aomic/piop2.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/datalad_base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/dmcc13_benchmark.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/hcp1200/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/multiple.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/pattern_datalad.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/tests/test_base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/tests/test_datagrabber_utils.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/tests/test_multiple.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datagrabber/utils.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datareader/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datareader/default.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/datareader/tests/test_default_reader.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/external/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/external/h5io/h5io/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/external/h5io/h5io/_h5io.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/external/h5io/h5io/_version.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/external/h5io/h5io/chunked_array.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/external/h5io/h5io/chunked_list.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/external/nilearn/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/collection.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/complexity_base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/hurst_exponent.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/perm_entropy.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/range_entropy.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/range_entropy_auc.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/sample_entropy.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/ets_rss.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/falff/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/falff/_afni_falff.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/falff/_junifer_falff.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/falff/falff_base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/falff/falff_parcels.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/falff/falff_spheres.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/functional_connectivity/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/parcel_aggregation.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/reho/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/reho/_afni_reho.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/reho/_junifer_reho.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/reho/reho_base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/reho/reho_parcels.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/reho/reho_spheres.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/sphere_aggregation.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/temporal_snr/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/tests/test_collection.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/tests/test_ets_rss.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/tests/test_marker_utils.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/tests/test_markers_base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/markers/utils.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/onthefly/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/onthefly/read_transform.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/onthefly/tests/test_read_transform.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/pipeline/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/pipeline/pipeline_step_mixin.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/pipeline/registry.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/pipeline/singleton.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/pipeline/tests/test_registry.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/pipeline/tests/test_workdir_manager.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/pipeline/update_meta_mixin.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/pipeline/utils.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/pipeline/workdir_manager.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/confounds/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/smoothing/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/smoothing/_afni_smoothing.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/smoothing/_fsl_smoothing.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/smoothing/_nilearn_smoothing.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/smoothing/smoothing.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/smoothing/tests/test_smoothing.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/tests/test_preprocess_base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/warping/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/warping/_ants_warper.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/warping/_fsl_warper.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/warping/space_warper.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/preprocess/warping/tests/test_space_warper.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/stats.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/storage/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/storage/pandas_base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/storage/sqlite.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/storage/tests/test_pandas_base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/storage/tests/test_sqlite.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/storage/tests/test_storage_base.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/storage/tests/test_utils.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/storage/utils.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/testing/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/testing/datagrabbers.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/testing/registry.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/testing/tests/test_testing_registry.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/testing/utils.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/tests/test_main.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/tests/test_stats.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/utils/__init__.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/utils/fs.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/utils/helpers.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/utils/logging.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/utils/tests/test_fs.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/utils/tests/test_helpers.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer/utils/tests/test_logging.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer.egg-info/dependency_links.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer.egg-info/entry_points.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer.egg-info/requires.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/junifer.egg-info/top_level.txt +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/pyproject.toml +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/setup.cfg +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/setup.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/tools/create_aomic1000_example_dataset.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/tools/create_aomicpiop1_example_dataset.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/tools/create_aomicpiop2_example_dataset.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/tools/create_bids_example_dataset.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/tools/create_bids_example_dataset_sessions.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/tools/create_hcp1200_example_dataset.py +0 -0
- {junifer-0.0.5.dev86 → junifer-0.0.5.dev98}/tox.ini +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: junifer
|
3
|
-
Version: 0.0.5.
|
3
|
+
Version: 0.0.5.dev98
|
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
|
+
Introduce new storage type ``scalar_table`` and adapt :class:`.HDF5FeatureStorage` to support it by `Synchon Mandal`_
|
@@ -0,0 +1 @@
|
|
1
|
+
Allow Unix path expansion directives to be used in :class:`.PatternDataGrabber` ``patterns`` by `Synchon Mandal`_
|
@@ -314,6 +314,53 @@ This approach can be used directly from the YAML, like so:
|
|
314
314
|
uri: "https://gin.g-node.org/juaml/datalad-example-bids"
|
315
315
|
rootdir: example_bids_ses
|
316
316
|
|
317
|
+
Advanced: Using Unix-like path expansion directives
|
318
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
319
|
+
|
320
|
+
It is also possible to use some advanced Unix-like path expansion tricks to
|
321
|
+
define our patterns.
|
322
|
+
|
323
|
+
A very common thing would be to use ``*`` to match any number of
|
324
|
+
characters but we cannot use it right after a replacement like:
|
325
|
+
|
326
|
+
.. code-block:: python
|
327
|
+
|
328
|
+
"derivatives/freesurfer/{subject}*"
|
329
|
+
|
330
|
+
or if there are multiple files or no files which can be globbed.
|
331
|
+
|
332
|
+
We can also use ``[]`` and ``[!]`` to glob certain tricky files like with the
|
333
|
+
case of FreeSurfer derivatives. The file structure seen in a typical
|
334
|
+
FreeSurfer derivative of a dataset (like ``AOMIC`` ones) is like so:
|
335
|
+
|
336
|
+
.. code-block::
|
337
|
+
|
338
|
+
.
|
339
|
+
└── derivatives
|
340
|
+
└── freesurfer
|
341
|
+
├── fsaverage
|
342
|
+
│ ├── mri
|
343
|
+
│ | ├── T1.mgz
|
344
|
+
│ | └── ...
|
345
|
+
│ └── ...
|
346
|
+
├── sub-01
|
347
|
+
│ ├── mri
|
348
|
+
│ | ├── T1.mgz
|
349
|
+
│ | └── ...
|
350
|
+
│ | └── ...
|
351
|
+
│ └── ...
|
352
|
+
...
|
353
|
+
|
354
|
+
With a structure like this, it would be cumbersome to write custom methods
|
355
|
+
for the class and thus we could use a pattern like this:
|
356
|
+
|
357
|
+
.. code-block:: python
|
358
|
+
|
359
|
+
"derivatives/freesurfer/[!f]{subject}/mri/T1.mg[z]"
|
360
|
+
|
361
|
+
This would ignore the ``fsaverage`` directory as a subject and let ``T1.mgz`` be
|
362
|
+
fetched as there can be many files with the same prefix.
|
363
|
+
|
317
364
|
.. _extending_datagrabbers_base:
|
318
365
|
|
319
366
|
Option B: Extending from BaseDataGrabber
|
@@ -18,12 +18,12 @@ on them outside the context as long as the processed data is in the memory and
|
|
18
18
|
the Python runtime has not garbage-collected it.
|
19
19
|
|
20
20
|
The :ref:`Markers <marker>` are responsible for defining what *storage kind*
|
21
|
-
(``matrix``, ``vector``, ``timeseries``) they support for
|
22
|
-
:ref:`data type <data_types>` by overriding its ``get_output_type``
|
23
|
-
storage object in turn declares and provides implementation for
|
24
|
-
*storage kind*. For example, :class:`.SQLiteFeatureStorage` supports
|
25
|
-
``matrix``, ``vector`` and ``timeseries`` via ``store_matrix``,
|
26
|
-
and ``store_timeseries`` methods respectively.
|
21
|
+
(``matrix``, ``vector``, ``timeseries``, ``scalar_table``) they support for
|
22
|
+
which :ref:`data type <data_types>` by overriding its ``get_output_type``
|
23
|
+
method. The storage object in turn declares and provides implementation for
|
24
|
+
specific *storage kind*. For example, :class:`.SQLiteFeatureStorage` supports
|
25
|
+
saving ``matrix``, ``vector`` and ``timeseries`` via ``store_matrix``,
|
26
|
+
``store_vector`` and ``store_timeseries`` methods respectively.
|
27
27
|
|
28
28
|
For storage interfaces not supported by ``junifer`` yet, you can either make
|
29
29
|
your own ``Storage`` by providing a concrete implementation of
|
@@ -44,17 +44,24 @@ Storage Types
|
|
44
44
|
- Options
|
45
45
|
- Reference
|
46
46
|
* - ``matrix``
|
47
|
-
- A 2D matrix with row and column names
|
48
|
-
-
|
49
|
-
|
47
|
+
- A 2D square matrix with row and column names
|
48
|
+
- | ``col_names``, ``row_names``, ``matrix_kind``, ``diagonal``
|
49
|
+
| ``row_header_col_name``
|
50
|
+
| (only for :meth:`.HDF5FeatureStorage.store_matrix`)
|
51
|
+
- :meth:`.BaseFeatureStorage.store_matrix`
|
50
52
|
* - ``vector``
|
51
53
|
- A 1D row vector of values with column names
|
52
54
|
- ``col_names``
|
53
|
-
-
|
55
|
+
- :meth:`.BaseFeatureStorage.store_vector`
|
54
56
|
* - ``timeseries``
|
55
|
-
- A 2D matrix of values with column names
|
57
|
+
- A 2D square or non-square matrix of scalar values with column names
|
56
58
|
- ``col_names``
|
57
|
-
-
|
59
|
+
- :meth:`.BaseFeatureStorage.store_timeseries`
|
60
|
+
* - ``scalar_table``
|
61
|
+
- | A 2D square or non-square matrix of scalar values with row name, column
|
62
|
+
| name and row header column name
|
63
|
+
- ``col_names``, ``row_names``, ``row_header_col_name``
|
64
|
+
- :meth:`.BaseFeatureStorage.store_scalar_table`
|
58
65
|
|
59
66
|
.. _storage_interfaces:
|
60
67
|
|
@@ -76,4 +83,4 @@ Storage Interfaces
|
|
76
83
|
* - :class:`.HDF5FeatureStorage`
|
77
84
|
- ``.hdf5``
|
78
85
|
- HDF5
|
79
|
-
- ``matrix``, ``vector``, ``timeseries``
|
86
|
+
- ``matrix``, ``vector``, ``timeseries``, ``scalar_table``
|
@@ -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.5.
|
16
|
-
__version_tuple__ = version_tuple = (0, 0, 5, '
|
15
|
+
__version__ = version = '0.0.5.dev98'
|
16
|
+
__version_tuple__ = version_tuple = (0, 0, 5, 'dev98')
|
@@ -214,18 +214,25 @@ class PatternDataGrabber(BaseDataGrabber):
|
|
214
214
|
t_replacements = [
|
215
215
|
x for x in self.replacements if f"{{{x}}}" in pattern
|
216
216
|
]
|
217
|
-
|
217
|
+
# Ops on re_pattern
|
218
|
+
# Remove negated unix glob pattern i.e., [!...] for re_pattern
|
219
|
+
re_pattern = re.sub(r"\[!.?\]", "", re_pattern)
|
220
|
+
# Remove enclosing square brackets from unix glob pattern i.e., [...]
|
221
|
+
# for re_pattern
|
222
|
+
re_pattern = re.sub(r"\[|\]", "", re_pattern)
|
223
|
+
# Iteratively replace the first of each with a named group definition
|
218
224
|
for t_r in t_replacements:
|
219
|
-
# Replace the first of each with a named group definition
|
220
225
|
re_pattern = re_pattern.replace(f"{{{t_r}}}", f"(?P<{t_r}>.*)", 1)
|
221
|
-
|
226
|
+
# Iteratively replace the second appearance of each with the named
|
227
|
+
# group back reference
|
222
228
|
for t_r in t_replacements:
|
223
|
-
# Replace the second appearance of each with the named group
|
224
|
-
# back reference
|
225
229
|
re_pattern = re_pattern.replace(f"{{{t_r}}}", f"(?P={t_r})")
|
226
|
-
|
230
|
+
# Ops on glob_pattern
|
231
|
+
# Iteratively replace replacements with wildcard i.e., *
|
232
|
+
# for glob_pattern
|
227
233
|
for t_r in t_replacements:
|
228
234
|
glob_pattern = glob_pattern.replace(f"{{{t_r}}}", "*")
|
235
|
+
|
229
236
|
return re_pattern, glob_pattern, t_replacements
|
230
237
|
|
231
238
|
def _replace_patterns_glob(self, element: Dict, pattern: str) -> str:
|
@@ -254,6 +261,10 @@ class PatternDataGrabber(BaseDataGrabber):
|
|
254
261
|
f"The element keys must be {self.replacements}, "
|
255
262
|
f"element has {list(element.keys())}."
|
256
263
|
)
|
264
|
+
# Remove negated unix glob pattern i.e., [!...]
|
265
|
+
pattern = re.sub(r"\[!.?\]", "", pattern)
|
266
|
+
# Remove enclosing square brackets from unix glob pattern i.e., [...]
|
267
|
+
pattern = re.sub(r"\[|\]", "", pattern)
|
257
268
|
return pattern.format(**element)
|
258
269
|
|
259
270
|
def _get_path_from_patterns(
|
@@ -236,6 +236,51 @@ def test_PatternDataGrabber(tmp_path: Path) -> None:
|
|
236
236
|
assert out1["VBM_GM"]["path"] != out2["VBM_GM"]["path"]
|
237
237
|
|
238
238
|
|
239
|
+
def test_PatternDataGrabber_unix_path_expansion(tmp_path: Path) -> None:
|
240
|
+
"""Test PatterDataGrabber for patterns with unix path expansion.
|
241
|
+
|
242
|
+
Parameters
|
243
|
+
----------
|
244
|
+
tmp_path : pathlib.Path
|
245
|
+
The path to the test directory.
|
246
|
+
|
247
|
+
"""
|
248
|
+
# Create test data root dir
|
249
|
+
freesurfer_dir = tmp_path / "derivatives" / "freesurfer"
|
250
|
+
freesurfer_dir.mkdir(parents=True, exist_ok=True)
|
251
|
+
# Create test data sub dirs and files
|
252
|
+
for dir_name in ["fsaverage", "sub-0001"]:
|
253
|
+
mri_dir = freesurfer_dir / dir_name / "mri"
|
254
|
+
mri_dir.mkdir(parents=True, exist_ok=True)
|
255
|
+
# Create files
|
256
|
+
(mri_dir / "T1.mgz").touch(exist_ok=True)
|
257
|
+
(mri_dir / "aseg.mgz").touch(exist_ok=True)
|
258
|
+
# Create datagrabber
|
259
|
+
dg = PatternDataGrabber(
|
260
|
+
datadir=tmp_path,
|
261
|
+
types=["FreeSurfer"],
|
262
|
+
patterns={
|
263
|
+
"FreeSurfer": {
|
264
|
+
"pattern": "derivatives/freesurfer/[!f]{subject}/mri/T1.mg[z]",
|
265
|
+
"aseg": {
|
266
|
+
"pattern": (
|
267
|
+
"derivatives/freesurfer/[!f]{subject}/mri/aseg.mg[z]"
|
268
|
+
)
|
269
|
+
},
|
270
|
+
},
|
271
|
+
},
|
272
|
+
replacements=["subject"],
|
273
|
+
)
|
274
|
+
# Check that "fsaverage" is filtered
|
275
|
+
elements = dg.get_elements()
|
276
|
+
assert elements == ["sub-0001"]
|
277
|
+
# Fetch data
|
278
|
+
out = dg["sub-0001"]
|
279
|
+
# Check paths are found
|
280
|
+
assert set(out["FreeSurfer"].keys()) == {"path", "aseg", "meta"}
|
281
|
+
assert list(out["FreeSurfer"]["aseg"].keys()) == ["path"]
|
282
|
+
|
283
|
+
|
239
284
|
def test_PatternDataGrabber_confounds_format_error_on_init() -> None:
|
240
285
|
"""Test PatterDataGrabber confounds format error on initialisation."""
|
241
286
|
with pytest.raises(
|
@@ -189,7 +189,7 @@ class BaseFeatureStorage(ABC):
|
|
189
189
|
|
190
190
|
Parameters
|
191
191
|
----------
|
192
|
-
kind : {"matrix", "timeseries", "vector"}
|
192
|
+
kind : {"matrix", "timeseries", "vector", "scalar_table"}
|
193
193
|
The storage kind.
|
194
194
|
**kwargs
|
195
195
|
The keyword arguments.
|
@@ -218,6 +218,10 @@ class BaseFeatureStorage(ABC):
|
|
218
218
|
)
|
219
219
|
elif kind == "vector":
|
220
220
|
self.store_vector(meta_md5=meta_md5, element=t_element, **kwargs)
|
221
|
+
elif kind == "scalar_table":
|
222
|
+
self.store_scalar_table(
|
223
|
+
meta_md5=meta_md5, element=t_element, **kwargs
|
224
|
+
)
|
221
225
|
|
222
226
|
def store_matrix(
|
223
227
|
self,
|
@@ -313,6 +317,38 @@ class BaseFeatureStorage(ABC):
|
|
313
317
|
klass=NotImplementedError,
|
314
318
|
)
|
315
319
|
|
320
|
+
def store_scalar_table(
|
321
|
+
self,
|
322
|
+
meta_md5: str,
|
323
|
+
element: Dict,
|
324
|
+
data: np.ndarray,
|
325
|
+
col_names: Optional[Iterable[str]] = None,
|
326
|
+
row_names: Optional[Iterable[str]] = None,
|
327
|
+
row_header_col_name: Optional[str] = "feature",
|
328
|
+
) -> None:
|
329
|
+
"""Store table with scalar values.
|
330
|
+
|
331
|
+
Parameters
|
332
|
+
----------
|
333
|
+
meta_md5 : str
|
334
|
+
The metadata MD5 hash.
|
335
|
+
element : dict
|
336
|
+
The element as a dictionary.
|
337
|
+
data : numpy.ndarray
|
338
|
+
The timeseries data to store.
|
339
|
+
col_names : list or tuple of str, optional
|
340
|
+
The column labels (default None).
|
341
|
+
row_names : str, optional
|
342
|
+
The row labels (default None).
|
343
|
+
row_header_col_name : str, optional
|
344
|
+
The column name for the row header column (default "feature").
|
345
|
+
|
346
|
+
"""
|
347
|
+
raise_error(
|
348
|
+
msg="Concrete classes need to implement store_scalar_table().",
|
349
|
+
klass=NotImplementedError,
|
350
|
+
)
|
351
|
+
|
316
352
|
@abstractmethod
|
317
353
|
def collect(self) -> None:
|
318
354
|
"""Collect data."""
|
@@ -56,7 +56,8 @@ def _create_chunk(
|
|
56
56
|
Raises
|
57
57
|
------
|
58
58
|
ValueError
|
59
|
-
If `kind` is not one of ['vector', 'matrix', 'timeseries'
|
59
|
+
If `kind` is not one of ['vector', 'matrix', 'timeseries',
|
60
|
+
'scalar_table'].
|
60
61
|
|
61
62
|
"""
|
62
63
|
if kind in ["vector", "matrix"]:
|
@@ -77,7 +78,7 @@ def _create_chunk(
|
|
77
78
|
chunk_size=tuple(array_chunk_size),
|
78
79
|
n_chunk=i_chunk,
|
79
80
|
)
|
80
|
-
elif kind
|
81
|
+
elif kind in ["timeseries", "scalar_table"]:
|
81
82
|
out = ChunkedList(
|
82
83
|
data=chunk_data,
|
83
84
|
size=element_count,
|
@@ -86,7 +87,8 @@ def _create_chunk(
|
|
86
87
|
else:
|
87
88
|
raise_error(
|
88
89
|
f"Invalid kind: {kind}. "
|
89
|
-
"Must be one of ['vector', 'matrix', 'timeseries'
|
90
|
+
"Must be one of ['vector', 'matrix', 'timeseries',"
|
91
|
+
"'scalar_table']."
|
90
92
|
)
|
91
93
|
return out
|
92
94
|
|
@@ -146,7 +148,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
146
148
|
uri.parent.mkdir(parents=True, exist_ok=True)
|
147
149
|
|
148
150
|
# Available storage kinds
|
149
|
-
storage_types = ["vector", "timeseries", "matrix"]
|
151
|
+
storage_types = ["vector", "timeseries", "matrix", "scalar_table"]
|
150
152
|
|
151
153
|
super().__init__(
|
152
154
|
uri=uri,
|
@@ -169,7 +171,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
169
171
|
storage.
|
170
172
|
|
171
173
|
"""
|
172
|
-
return ["matrix", "vector", "timeseries"]
|
174
|
+
return ["matrix", "vector", "timeseries", "scalar_table"]
|
173
175
|
|
174
176
|
def _fetch_correct_uri_for_io(self, element: Optional[Dict]) -> str:
|
175
177
|
"""Return proper URI for I/O based on `element`.
|
@@ -508,6 +510,26 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
508
510
|
columns = hdf_data["column_headers"]
|
509
511
|
# Convert data from 3D to 2D
|
510
512
|
reshaped_data = np.concatenate(all_data, axis=0)
|
513
|
+
elif hdf_data["kind"] == "scalar_table":
|
514
|
+
# Create dictionary for aggregating index data
|
515
|
+
element_idx = defaultdict(list)
|
516
|
+
all_data = []
|
517
|
+
for idx, element in enumerate(hdf_data["element"]):
|
518
|
+
# Get row count for the element
|
519
|
+
t_data = hdf_data["data"][idx]
|
520
|
+
all_data.append(t_data)
|
521
|
+
n_rows = len(hdf_data["row_headers"])
|
522
|
+
# Set rows for the index
|
523
|
+
for key, val in element.items():
|
524
|
+
element_idx[key].extend([val] * n_rows)
|
525
|
+
# Add extra column for row header column name
|
526
|
+
element_idx[hdf_data["row_header_column_name"]].extend(
|
527
|
+
hdf_data["row_headers"]
|
528
|
+
)
|
529
|
+
# Set column headers for dataframe
|
530
|
+
columns = hdf_data["column_headers"]
|
531
|
+
# Convert data from 3D to 2D
|
532
|
+
reshaped_data = np.concatenate(all_data, axis=0)
|
511
533
|
|
512
534
|
# Create dataframe for index
|
513
535
|
idx_df = pd.DataFrame(data=element_idx) # type: ignore
|
@@ -643,7 +665,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
643
665
|
|
644
666
|
Parameters
|
645
667
|
----------
|
646
|
-
kind : {"matrix", "vector", "timeseries"}
|
668
|
+
kind : {"matrix", "vector", "timeseries", "scalar_table"}
|
647
669
|
The storage kind.
|
648
670
|
meta_md5 : str
|
649
671
|
The metadata MD5 hash.
|
@@ -739,8 +761,8 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
739
761
|
)
|
740
762
|
|
741
763
|
t_data = stored_data["data"]
|
742
|
-
if kind
|
743
|
-
t_data
|
764
|
+
if kind in ["timeseries", "scalar_table"]:
|
765
|
+
t_data += data
|
744
766
|
else:
|
745
767
|
t_data = np.concatenate((t_data, data), axis=-1)
|
746
768
|
# Existing entry; append to existing
|
@@ -921,6 +943,43 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
921
943
|
row_header_column_name="timepoint",
|
922
944
|
)
|
923
945
|
|
946
|
+
def store_scalar_table(
|
947
|
+
self,
|
948
|
+
meta_md5: str,
|
949
|
+
element: Dict,
|
950
|
+
data: np.ndarray,
|
951
|
+
col_names: Optional[Iterable[str]] = None,
|
952
|
+
row_names: Optional[Iterable[str]] = None,
|
953
|
+
row_header_col_name: Optional[str] = "feature",
|
954
|
+
) -> None:
|
955
|
+
"""Store table with scalar values.
|
956
|
+
|
957
|
+
Parameters
|
958
|
+
----------
|
959
|
+
meta_md5 : str
|
960
|
+
The metadata MD5 hash.
|
961
|
+
element : dict
|
962
|
+
The element as a dictionary.
|
963
|
+
data : numpy.ndarray
|
964
|
+
The scalar table data to store.
|
965
|
+
col_names : list or tuple of str, optional
|
966
|
+
The column labels (default None).
|
967
|
+
row_names : str, optional
|
968
|
+
The row labels (default None).
|
969
|
+
row_header_col_name : str, optional
|
970
|
+
The column name for the row header column (default "feature").
|
971
|
+
|
972
|
+
"""
|
973
|
+
self._store_data(
|
974
|
+
kind="scalar_table",
|
975
|
+
meta_md5=meta_md5,
|
976
|
+
element=[element], # convert to list
|
977
|
+
data=[data], # convert to list
|
978
|
+
column_headers=col_names,
|
979
|
+
row_headers=row_names,
|
980
|
+
row_header_column_name=row_header_col_name,
|
981
|
+
)
|
982
|
+
|
924
983
|
def collect(self) -> None:
|
925
984
|
"""Implement data collection.
|
926
985
|
|
@@ -1029,7 +1088,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
|
|
1029
1088
|
kind = static_data["kind"]
|
1030
1089
|
|
1031
1090
|
# Append the "dynamic" data
|
1032
|
-
if kind
|
1091
|
+
if kind in ["timeseries", "scalar_table"]:
|
1033
1092
|
chunk_data.extend(t_data["data"])
|
1034
1093
|
else:
|
1035
1094
|
chunk_data.append(t_data["data"])
|
@@ -25,7 +25,12 @@ from junifer.storage.utils import (
|
|
25
25
|
def test_get_valid_inputs() -> None:
|
26
26
|
"""Test valid inputs."""
|
27
27
|
storage = HDF5FeatureStorage(uri="/tmp")
|
28
|
-
assert storage.get_valid_inputs() == [
|
28
|
+
assert storage.get_valid_inputs() == [
|
29
|
+
"matrix",
|
30
|
+
"vector",
|
31
|
+
"timeseries",
|
32
|
+
"scalar_table",
|
33
|
+
]
|
29
34
|
|
30
35
|
|
31
36
|
def test_single_output(tmp_path: Path) -> None:
|
@@ -808,7 +813,7 @@ def test_store_timeseries(tmp_path: Path) -> None:
|
|
808
813
|
data = np.array([[10], [20], [30], [40], [50]])
|
809
814
|
col_names = ["signal"]
|
810
815
|
|
811
|
-
# Store
|
816
|
+
# Store timeseries
|
812
817
|
storage.store_timeseries(
|
813
818
|
meta_md5=meta_md5,
|
814
819
|
element=element_to_store,
|
@@ -822,6 +827,53 @@ def test_store_timeseries(tmp_path: Path) -> None:
|
|
822
827
|
assert_array_equal(read_df.values, data)
|
823
828
|
|
824
829
|
|
830
|
+
def test_store_scalar_table(tmp_path: Path) -> None:
|
831
|
+
"""Test scalar table store.
|
832
|
+
|
833
|
+
Parameters
|
834
|
+
----------
|
835
|
+
tmp_path : pathlib.Path
|
836
|
+
The path to the test directory.
|
837
|
+
|
838
|
+
"""
|
839
|
+
uri = tmp_path / "test_store_scalar_table.hdf5"
|
840
|
+
storage = HDF5FeatureStorage(uri=uri)
|
841
|
+
# Metadata to store
|
842
|
+
element = {"subject": "test"}
|
843
|
+
meta = {
|
844
|
+
"element": element,
|
845
|
+
"dependencies": ["numpy"],
|
846
|
+
"marker": {"name": "brainprint"},
|
847
|
+
"type": "FreeSurfer",
|
848
|
+
}
|
849
|
+
# Process the metadata
|
850
|
+
meta_md5, meta_to_store, element_to_store = process_meta(meta)
|
851
|
+
# Store metadata
|
852
|
+
storage.store_metadata(
|
853
|
+
meta_md5=meta_md5, element=element_to_store, meta=meta_to_store
|
854
|
+
)
|
855
|
+
|
856
|
+
# Data to store
|
857
|
+
data = np.array([[10, 20], [30, 40], [50, 60]])
|
858
|
+
col_names = ["roi1", "roi2"]
|
859
|
+
row_names = ["ev1", "ev2", "ev3"]
|
860
|
+
|
861
|
+
# Store timeseries
|
862
|
+
storage.store_scalar_table(
|
863
|
+
meta_md5=meta_md5,
|
864
|
+
element=element_to_store,
|
865
|
+
data=data,
|
866
|
+
col_names=col_names,
|
867
|
+
row_names=row_names,
|
868
|
+
row_header_col_name="eigenvalue",
|
869
|
+
)
|
870
|
+
|
871
|
+
# Read into dataframe
|
872
|
+
read_df = storage.read_df(feature_md5=meta_md5)
|
873
|
+
# Check if data are equal
|
874
|
+
assert_array_equal(read_df.values, data)
|
875
|
+
|
876
|
+
|
825
877
|
def _create_data_to_store(n_elements: int, kind: str) -> Tuple[str, Dict]:
|
826
878
|
"""Create data to store.
|
827
879
|
|
@@ -854,13 +906,19 @@ def _create_data_to_store(n_elements: int, kind: str) -> Tuple[str, Dict]:
|
|
854
906
|
"col_names": [f"col-{i}" for i in range(10)],
|
855
907
|
"matrix_kind": "full",
|
856
908
|
}
|
857
|
-
elif kind
|
909
|
+
elif kind in "timeseries":
|
858
910
|
data_to_store = {
|
859
911
|
"data": np.arange(20).reshape(2, 10),
|
860
912
|
"col_names": [f"col-{i}" for i in range(10)],
|
861
913
|
}
|
862
|
-
|
863
|
-
|
914
|
+
elif kind in "scalar_table":
|
915
|
+
data_to_store = {
|
916
|
+
"data": np.arange(50).reshape(5, 10),
|
917
|
+
"row_names": [f"row-{i}" for i in range(5)],
|
918
|
+
"col_names": [f"col-{i}" for i in range(10)],
|
919
|
+
"row_header_col_name": "row",
|
920
|
+
}
|
921
|
+
|
864
922
|
for i in range(n_elements):
|
865
923
|
element = {"subject": f"sub-{i // 2}", "session": f"ses-{i % 2}"}
|
866
924
|
meta = {
|
@@ -903,6 +961,7 @@ def _create_data_to_store(n_elements: int, kind: str) -> Tuple[str, Dict]:
|
|
903
961
|
(10, 3, "matrix"),
|
904
962
|
(10, 5, "matrix"),
|
905
963
|
(10, 5, "timeseries"),
|
964
|
+
(10, 5, "scalar_table"),
|
906
965
|
],
|
907
966
|
)
|
908
967
|
def test_multi_output_store_and_collect(
|
@@ -930,21 +989,20 @@ def test_multi_output_store_and_collect(
|
|
930
989
|
meta_md5, all_data = _create_data_to_store(n_elements, kind)
|
931
990
|
|
932
991
|
for t_data in all_data:
|
933
|
-
# Store metadata
|
992
|
+
# Store metadata
|
934
993
|
storage.store_metadata(
|
935
994
|
meta_md5=meta_md5,
|
936
995
|
element=t_data["element"],
|
937
996
|
meta=t_data["meta"],
|
938
997
|
)
|
998
|
+
# Store data
|
939
999
|
if kind == "vector":
|
940
|
-
# Store tables
|
941
1000
|
storage.store_vector(
|
942
1001
|
meta_md5=meta_md5,
|
943
1002
|
element=t_data["element"],
|
944
1003
|
**t_data["data"],
|
945
1004
|
)
|
946
1005
|
elif kind == "matrix":
|
947
|
-
# Store tables
|
948
1006
|
storage.store_matrix(
|
949
1007
|
meta_md5=meta_md5,
|
950
1008
|
element=t_data["element"],
|
@@ -956,11 +1014,17 @@ def test_multi_output_store_and_collect(
|
|
956
1014
|
element=t_data["element"],
|
957
1015
|
**t_data["data"],
|
958
1016
|
)
|
1017
|
+
elif kind == "scalar_table":
|
1018
|
+
storage.store_scalar_table(
|
1019
|
+
meta_md5=meta_md5,
|
1020
|
+
element=t_data["element"],
|
1021
|
+
**t_data["data"],
|
1022
|
+
)
|
959
1023
|
# Check that base URI does not exist yet
|
960
1024
|
assert not uri.exists()
|
961
1025
|
|
962
1026
|
for t_data in all_data:
|
963
|
-
# Convert element to
|
1027
|
+
# Convert element to prefix
|
964
1028
|
prefix = element_to_prefix(t_data["element"])
|
965
1029
|
# URIs for data storage
|
966
1030
|
elem_uri = uri.parent / f"{prefix}{uri.name}"
|
@@ -977,7 +1041,7 @@ def test_multi_output_store_and_collect(
|
|
977
1041
|
# Check that base URI exists now
|
978
1042
|
assert uri.exists()
|
979
1043
|
|
980
|
-
#
|
1044
|
+
# Read unified metadata
|
981
1045
|
read_unified_meta = storage.list_features()
|
982
1046
|
assert meta_md5 in read_unified_meta
|
983
1047
|
|
@@ -989,6 +1053,10 @@ def test_multi_output_store_and_collect(
|
|
989
1053
|
data_size = np.sum([x["data"]["data"].shape[0] for x in all_data])
|
990
1054
|
assert len(all_df) == data_size
|
991
1055
|
idx_names = [x for x in all_df.index.names if x != "timepoint"]
|
1056
|
+
elif kind == "scalar_table":
|
1057
|
+
data_size = np.sum([x["data"]["data"].shape[0] for x in all_data])
|
1058
|
+
assert len(all_df) == data_size
|
1059
|
+
idx_names = [x for x in all_df.index.names if x != "row"]
|
992
1060
|
else:
|
993
1061
|
assert len(all_df) == len(all_data)
|
994
1062
|
idx_names = all_df.index.names
|
@@ -1013,6 +1081,10 @@ def test_multi_output_store_and_collect(
|
|
1013
1081
|
assert_array_equal(t_series.values, t_data["data"]["data"])
|
1014
1082
|
series_names = t_series.columns.values.tolist()
|
1015
1083
|
assert series_names == t_data["data"]["col_names"]
|
1084
|
+
elif kind == "scalar_table":
|
1085
|
+
assert_array_equal(t_series.values, t_data["data"]["data"])
|
1086
|
+
series_names = t_series.columns.values.tolist()
|
1087
|
+
assert series_names == t_data["data"]["col_names"]
|
1016
1088
|
|
1017
1089
|
|
1018
1090
|
def test_collect_error_single_output() -> None:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: junifer
|
3
|
-
Version: 0.0.5.
|
3
|
+
Version: 0.0.5.dev98
|
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>
|
@@ -70,6 +70,8 @@ docs/changes/newsfragments/339.bugfix
|
|
70
70
|
docs/changes/newsfragments/340.bugfix
|
71
71
|
docs/changes/newsfragments/341.enh
|
72
72
|
docs/changes/newsfragments/342.misc
|
73
|
+
docs/changes/newsfragments/343.feature
|
74
|
+
docs/changes/newsfragments/345.feature
|
73
75
|
docs/extending/coordinates.rst
|
74
76
|
docs/extending/datagrabber.rst
|
75
77
|
docs/extending/dependencies.rst
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|