junifer 0.0.7.dev72__tar.gz → 0.0.7.dev84__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.
Files changed (447) hide show
  1. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/PKG-INFO +1 -1
  2. junifer-0.0.7.dev84/docs/changes/newsfragments/450.doc +1 -0
  3. junifer-0.0.7.dev84/docs/changes/newsfragments/450.feature +1 -0
  4. junifer-0.0.7.dev84/docs/extending/data_registries.rst +70 -0
  5. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/extending/extension.rst +2 -2
  6. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/extending/index.rst +1 -0
  7. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/_version.py +2 -2
  8. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/decorators.py +56 -11
  9. junifer-0.0.7.dev84/junifer/api/tests/test_decorators.py +32 -0
  10. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/__init__.pyi +4 -0
  11. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/_dispatch.py +102 -53
  12. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/coordinates/_coordinates.py +1 -2
  13. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/masks/_masks.py +1 -2
  14. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/parcellations/_parcellations.py +1 -2
  15. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/parcellations/tests/test_parcellations.py +7 -0
  16. junifer-0.0.7.dev84/junifer/data/tests/test_dispatch.py +87 -0
  17. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/typing/__init__.pyi +2 -0
  18. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/typing/_typing.py +3 -0
  19. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer.egg-info/PKG-INFO +1 -1
  20. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer.egg-info/SOURCES.txt +5 -0
  21. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.dockerignore +0 -0
  22. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  23. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  24. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
  25. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
  26. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  27. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
  28. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.github/dependabot.yml +0 -0
  29. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.github/pull_request_template.md +0 -0
  30. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.github/workflows/ci-docs.yml +0 -0
  31. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.github/workflows/ci.yml +0 -0
  32. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.github/workflows/docker-ci-publish.yml +0 -0
  33. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.github/workflows/docker-docs-publish.yml +0 -0
  34. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.github/workflows/docs-preview.yml +0 -0
  35. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.github/workflows/docs.yml +0 -0
  36. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.github/workflows/lint.yml +0 -0
  37. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.github/workflows/publish.yml +0 -0
  38. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.gitignore +0 -0
  39. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.gitmodules +0 -0
  40. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/.pre-commit-config.yaml +0 -0
  41. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/AUTHORS.rst +0 -0
  42. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/Dockerfile-ci +0 -0
  43. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/Dockerfile-docs +0 -0
  44. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/LICENSE.md +0 -0
  45. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/README.md +0 -0
  46. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/codecov.yml +0 -0
  47. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/conda-env.yml +0 -0
  48. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/Makefile +0 -0
  49. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/_static/css/custom.css +0 -0
  50. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/_static/js/custom.js +0 -0
  51. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/_templates/versions.html +0 -0
  52. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/api/api.rst +0 -0
  53. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/api/cli.rst +0 -0
  54. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/api/configs.rst +0 -0
  55. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/api/data.rst +0 -0
  56. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/api/datagrabbers.rst +0 -0
  57. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/api/datareaders.rst +0 -0
  58. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/api/index.rst +0 -0
  59. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/api/markers.rst +0 -0
  60. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/api/nilearn.rst +0 -0
  61. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/api/onthefly.rst +0 -0
  62. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/api/pipeline.rst +0 -0
  63. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/api/preprocessing.rst +0 -0
  64. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/api/stats.rst +0 -0
  65. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/api/storage.rst +0 -0
  66. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/api/testing.rst +0 -0
  67. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/api/utils.rst +0 -0
  68. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/builtin.rst +0 -0
  69. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/changes/contributors.inc +0 -0
  70. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/changes/newsfragments/.gitignore +0 -0
  71. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/changes/newsfragments/333.enh +0 -0
  72. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/changes/newsfragments/441.misc +0 -0
  73. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/changes/newsfragments/443.feature +0 -0
  74. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/changes/newsfragments/444.bugfix +0 -0
  75. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/conf.py +0 -0
  76. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/contribution.rst +0 -0
  77. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/extending/coordinates.rst +0 -0
  78. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/extending/datagrabber.rst +0 -0
  79. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/extending/dependencies.rst +0 -0
  80. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/extending/marker.rst +0 -0
  81. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/extending/masks.rst +0 -0
  82. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/extending/parcellations.rst +0 -0
  83. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/extending/plugins.rst +0 -0
  84. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/extending/preprocessor.rst +0 -0
  85. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/faq.rst +0 -0
  86. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/help.rst +0 -0
  87. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/images/junifer_logo.png +0 -0
  88. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/index.rst +0 -0
  89. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/installation.rst +0 -0
  90. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/links.inc +0 -0
  91. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/maintaining.rst +0 -0
  92. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/redirect.html +0 -0
  93. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/starting.rst +0 -0
  94. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/understanding/data.rst +0 -0
  95. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/understanding/datagrabber.rst +0 -0
  96. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/understanding/datareader.rst +0 -0
  97. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/understanding/index.rst +0 -0
  98. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/understanding/marker.rst +0 -0
  99. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/understanding/pipeline.rst +0 -0
  100. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/understanding/preprocess.rst +0 -0
  101. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/understanding/storage.rst +0 -0
  102. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/using/codeless.rst +0 -0
  103. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/using/index.rst +0 -0
  104. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/using/masks.rst +0 -0
  105. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/using/queueing.rst +0 -0
  106. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/using/running.rst +0 -0
  107. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/docs/whats_new.rst +0 -0
  108. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/examples/README.rst +0 -0
  109. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/examples/norun_hcpfc_pearson.py +0 -0
  110. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/examples/norun_ukbvm_gmd.py +0 -0
  111. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/examples/run_compute_parcel_mean.py +0 -0
  112. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/examples/run_datagrabber_bids_datalad.py +0 -0
  113. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/examples/run_ets_rss_marker.py +0 -0
  114. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/examples/run_junifer_julearn.py +0 -0
  115. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/examples/run_run_gmd_mean.py +0 -0
  116. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/examples/yamls/gmd_mean.yaml +0 -0
  117. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
  118. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/examples/yamls/partly_cloudy_agg_mean_tian.yml +0 -0
  119. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/examples/yamls/ukb_gmd_mean.yaml +0 -0
  120. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/ignore_words.txt +0 -0
  121. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/__init__.py +0 -0
  122. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/__init__.pyi +0 -0
  123. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/__init__.py +0 -0
  124. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/__init__.pyi +0 -0
  125. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/functions.py +0 -0
  126. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/py.typed +0 -0
  127. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/queue_context/__init__.py +0 -0
  128. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/queue_context/__init__.pyi +0 -0
  129. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/queue_context/gnu_parallel_local_adapter.py +0 -0
  130. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/queue_context/htcondor_adapter.py +0 -0
  131. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/queue_context/py.typed +0 -0
  132. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/queue_context/queue_context_adapter.py +0 -0
  133. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +0 -0
  134. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/queue_context/tests/test_htcondor_adapter.py +0 -0
  135. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
  136. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/afni/3dRSFC +0 -0
  137. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/afni/3dReHo +0 -0
  138. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/afni/afni +0 -0
  139. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/afni/run_afni_docker.sh +0 -0
  140. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/ants/ResampleImage +0 -0
  141. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/ants/antsApplyTransforms +0 -0
  142. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
  143. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/ants/run_ants_docker.sh +0 -0
  144. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/freesurfer/mri_binarize +0 -0
  145. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/freesurfer/mri_mc +0 -0
  146. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/freesurfer/mri_pretess +0 -0
  147. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/freesurfer/mris_convert +0 -0
  148. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/freesurfer/run_freesurfer_docker.sh +0 -0
  149. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/fsl/applywarp +0 -0
  150. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/fsl/flirt +0 -0
  151. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/fsl/img2imgcoord +0 -0
  152. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
  153. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/fsl/std2imgcoord +0 -0
  154. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/run_conda.bash +0 -0
  155. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/run_conda.zsh +0 -0
  156. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/run_venv.bash +0 -0
  157. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/res/run_venv.zsh +0 -0
  158. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/api/tests/test_functions.py +0 -0
  159. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/cli/__init__.py +0 -0
  160. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/cli/__init__.pyi +0 -0
  161. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/cli/cli.py +0 -0
  162. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/cli/parser.py +0 -0
  163. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/cli/py.typed +0 -0
  164. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/cli/tests/data/gmd_mean.yaml +0 -0
  165. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/cli/tests/data/gmd_mean_htcondor.yaml +0 -0
  166. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +0 -0
  167. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/cli/tests/test_cli.py +0 -0
  168. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/cli/tests/test_cli_utils.py +0 -0
  169. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/cli/tests/test_parser.py +0 -0
  170. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/cli/utils.py +0 -0
  171. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/__init__.py +0 -0
  172. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/juseless/__init__.py +0 -0
  173. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/juseless/__init__.pyi +0 -0
  174. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
  175. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/juseless/datagrabbers/__init__.pyi +0 -0
  176. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
  177. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
  178. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
  179. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/juseless/datagrabbers/py.typed +0 -0
  180. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
  181. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
  182. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
  183. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
  184. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
  185. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
  186. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
  187. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/configs/juseless/py.typed +0 -0
  188. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/conftest.py +0 -0
  189. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/__init__.py +0 -0
  190. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/coordinates/__init__.py +0 -0
  191. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/coordinates/__init__.pyi +0 -0
  192. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/coordinates/_ants_coordinates_warper.py +0 -0
  193. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/coordinates/_fsl_coordinates_warper.py +0 -0
  194. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/coordinates/tests/test_coordinates.py +0 -0
  195. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/masks/__init__.py +0 -0
  196. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/masks/__init__.pyi +0 -0
  197. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/masks/_ants_mask_warper.py +0 -0
  198. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/masks/_fsl_mask_warper.py +0 -0
  199. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/masks/tests/test_masks.py +0 -0
  200. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/parcellations/__init__.py +0 -0
  201. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/parcellations/__init__.pyi +0 -0
  202. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/parcellations/_ants_parcellation_warper.py +0 -0
  203. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/parcellations/_fsl_parcellation_warper.py +0 -0
  204. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/pipeline_data_registry_base.py +0 -0
  205. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/py.typed +0 -0
  206. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/template_spaces.py +0 -0
  207. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/tests/test_data_utils.py +0 -0
  208. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/tests/test_template_spaces.py +0 -0
  209. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/data/utils.py +0 -0
  210. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/__init__.py +0 -0
  211. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/__init__.pyi +0 -0
  212. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/aomic/__init__.py +0 -0
  213. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/aomic/__init__.pyi +0 -0
  214. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/aomic/id1000.py +0 -0
  215. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/aomic/piop1.py +0 -0
  216. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/aomic/piop2.py +0 -0
  217. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/aomic/py.typed +0 -0
  218. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
  219. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
  220. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
  221. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/base.py +0 -0
  222. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/datalad_base.py +0 -0
  223. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/dmcc13_benchmark.py +0 -0
  224. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/hcp1200/__init__.py +0 -0
  225. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/hcp1200/__init__.pyi +0 -0
  226. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
  227. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
  228. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/hcp1200/py.typed +0 -0
  229. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
  230. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/multiple.py +0 -0
  231. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/pattern.py +0 -0
  232. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/pattern_datalad.py +0 -0
  233. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/pattern_validation_mixin.py +0 -0
  234. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/py.typed +0 -0
  235. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/tests/test_base.py +0 -0
  236. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
  237. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +0 -0
  238. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/tests/test_multiple.py +0 -0
  239. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/tests/test_pattern.py +0 -0
  240. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
  241. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datagrabber/tests/test_pattern_validation_mixin.py +0 -0
  242. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datareader/__init__.py +0 -0
  243. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datareader/__init__.pyi +0 -0
  244. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datareader/default.py +0 -0
  245. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datareader/py.typed +0 -0
  246. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/datareader/tests/test_default_reader.py +0 -0
  247. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/BrainPrint/brainprint/__init__.py +0 -0
  248. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/BrainPrint/brainprint/_version.py +0 -0
  249. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/BrainPrint/brainprint/asymmetry.py +0 -0
  250. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/BrainPrint/brainprint/brainprint.py +0 -0
  251. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/BrainPrint/brainprint/surfaces.py +0 -0
  252. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/BrainPrint/brainprint/utils/__init__.py +0 -0
  253. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/BrainPrint/brainprint/utils/_config.py +0 -0
  254. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/BrainPrint/brainprint/utils/utils.py +0 -0
  255. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/__init__.py +0 -0
  256. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/h5io/h5io/__init__.py +0 -0
  257. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/h5io/h5io/_h5io.py +0 -0
  258. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/h5io/h5io/_version.py +0 -0
  259. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/h5io/h5io/chunked_array.py +0 -0
  260. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/h5io/h5io/chunked_list.py +0 -0
  261. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/nilearn/__init__.py +0 -0
  262. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/nilearn/__init__.pyi +0 -0
  263. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/nilearn/junifer_connectivity_measure.py +0 -0
  264. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
  265. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/nilearn/py.typed +0 -0
  266. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +0 -0
  267. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
  268. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/__init__.py +0 -0
  269. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/__init__.pyi +0 -0
  270. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/base.py +0 -0
  271. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/brainprint.py +0 -0
  272. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/__init__.py +0 -0
  273. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/__init__.pyi +0 -0
  274. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/complexity_base.py +0 -0
  275. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/hurst_exponent.py +0 -0
  276. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
  277. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/perm_entropy.py +0 -0
  278. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/py.typed +0 -0
  279. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/range_entropy.py +0 -0
  280. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/range_entropy_auc.py +0 -0
  281. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/sample_entropy.py +0 -0
  282. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
  283. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
  284. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
  285. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
  286. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
  287. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
  288. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
  289. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
  290. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
  291. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/ets_rss.py +0 -0
  292. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/falff/__init__.py +0 -0
  293. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/falff/__init__.pyi +0 -0
  294. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/falff/_afni_falff.py +0 -0
  295. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/falff/_junifer_falff.py +0 -0
  296. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/falff/falff_base.py +0 -0
  297. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/falff/falff_parcels.py +0 -0
  298. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/falff/falff_spheres.py +0 -0
  299. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/falff/py.typed +0 -0
  300. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
  301. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
  302. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/functional_connectivity/__init__.py +0 -0
  303. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/functional_connectivity/__init__.pyi +0 -0
  304. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
  305. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
  306. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
  307. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
  308. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
  309. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
  310. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/functional_connectivity/py.typed +0 -0
  311. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
  312. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
  313. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
  314. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
  315. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
  316. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
  317. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/parcel_aggregation.py +0 -0
  318. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/py.typed +0 -0
  319. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/reho/__init__.py +0 -0
  320. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/reho/__init__.pyi +0 -0
  321. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/reho/_afni_reho.py +0 -0
  322. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/reho/_junifer_reho.py +0 -0
  323. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/reho/py.typed +0 -0
  324. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/reho/reho_base.py +0 -0
  325. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/reho/reho_parcels.py +0 -0
  326. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/reho/reho_spheres.py +0 -0
  327. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
  328. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
  329. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/sphere_aggregation.py +0 -0
  330. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/temporal_snr/__init__.py +0 -0
  331. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/temporal_snr/__init__.pyi +0 -0
  332. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/temporal_snr/py.typed +0 -0
  333. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
  334. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
  335. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
  336. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
  337. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
  338. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
  339. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/tests/test_brainprint.py +0 -0
  340. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/tests/test_ets_rss.py +0 -0
  341. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/tests/test_marker_utils.py +0 -0
  342. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/tests/test_markers_base.py +0 -0
  343. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
  344. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
  345. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/markers/utils.py +0 -0
  346. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/onthefly/__init__.py +0 -0
  347. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/onthefly/_brainprint.py +0 -0
  348. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/onthefly/read_transform.py +0 -0
  349. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/onthefly/tests/test_read_transform.py +0 -0
  350. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/pipeline/__init__.py +0 -0
  351. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/pipeline/__init__.pyi +0 -0
  352. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/pipeline/marker_collection.py +0 -0
  353. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/pipeline/pipeline_component_registry.py +0 -0
  354. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/pipeline/pipeline_step_mixin.py +0 -0
  355. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/pipeline/py.typed +0 -0
  356. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/pipeline/tests/test_marker_collection.py +0 -0
  357. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/pipeline/tests/test_pipeline_component_registry.py +0 -0
  358. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
  359. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
  360. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/pipeline/tests/test_workdir_manager.py +0 -0
  361. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/pipeline/update_meta_mixin.py +0 -0
  362. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/pipeline/utils.py +0 -0
  363. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/pipeline/workdir_manager.py +0 -0
  364. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/__init__.py +0 -0
  365. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/__init__.pyi +0 -0
  366. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/_temporal_slicer.py +0 -0
  367. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/base.py +0 -0
  368. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/confounds/__init__.py +0 -0
  369. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/confounds/__init__.pyi +0 -0
  370. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
  371. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/confounds/py.typed +0 -0
  372. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +0 -0
  373. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/py.typed +0 -0
  374. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/smoothing/__init__.py +0 -0
  375. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/smoothing/__init__.pyi +0 -0
  376. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/smoothing/_afni_smoothing.py +0 -0
  377. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/smoothing/_fsl_smoothing.py +0 -0
  378. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/smoothing/_nilearn_smoothing.py +0 -0
  379. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/smoothing/py.typed +0 -0
  380. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/smoothing/smoothing.py +0 -0
  381. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/smoothing/tests/test_smoothing.py +0 -0
  382. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/tests/test_preprocess_base.py +0 -0
  383. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/tests/test_temporal_slicer.py +0 -0
  384. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/warping/__init__.py +0 -0
  385. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/warping/__init__.pyi +0 -0
  386. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/warping/_ants_warper.py +0 -0
  387. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/warping/_fsl_warper.py +0 -0
  388. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/warping/py.typed +0 -0
  389. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/warping/space_warper.py +0 -0
  390. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/preprocess/warping/tests/test_space_warper.py +0 -0
  391. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/py.typed +0 -0
  392. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/stats.py +0 -0
  393. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/storage/__init__.py +0 -0
  394. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/storage/__init__.pyi +0 -0
  395. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/storage/base.py +0 -0
  396. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/storage/hdf5.py +0 -0
  397. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/storage/pandas_base.py +0 -0
  398. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/storage/py.typed +0 -0
  399. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/storage/sqlite.py +0 -0
  400. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/storage/tests/test_hdf5.py +0 -0
  401. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/storage/tests/test_pandas_base.py +0 -0
  402. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/storage/tests/test_sqlite.py +0 -0
  403. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/storage/tests/test_storage_base.py +0 -0
  404. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/storage/tests/test_utils.py +0 -0
  405. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/storage/utils.py +0 -0
  406. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/testing/__init__.py +0 -0
  407. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/testing/__init__.pyi +0 -0
  408. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
  409. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/testing/datagrabbers.py +0 -0
  410. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/testing/py.typed +0 -0
  411. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/testing/registry.py +0 -0
  412. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
  413. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
  414. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
  415. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/testing/tests/test_testing_registry.py +0 -0
  416. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/testing/utils.py +0 -0
  417. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/tests/test_main.py +0 -0
  418. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/tests/test_stats.py +0 -0
  419. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/typing/__init__.py +0 -0
  420. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/utils/__init__.py +0 -0
  421. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/utils/__init__.pyi +0 -0
  422. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/utils/_config.py +0 -0
  423. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/utils/_yaml.py +0 -0
  424. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/utils/fs.py +0 -0
  425. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/utils/helpers.py +0 -0
  426. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/utils/logging.py +0 -0
  427. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/utils/py.typed +0 -0
  428. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/utils/singleton.py +0 -0
  429. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/utils/tests/test_config.py +0 -0
  430. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/utils/tests/test_fs.py +0 -0
  431. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/utils/tests/test_helpers.py +0 -0
  432. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer/utils/tests/test_logging.py +0 -0
  433. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer.egg-info/dependency_links.txt +0 -0
  434. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer.egg-info/entry_points.txt +0 -0
  435. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer.egg-info/requires.txt +0 -0
  436. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/junifer.egg-info/top_level.txt +0 -0
  437. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/pyproject.toml +0 -0
  438. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/setup.cfg +0 -0
  439. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/setup.py +0 -0
  440. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/tools/create_aomic1000_example_dataset.py +0 -0
  441. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/tools/create_aomicpiop1_example_dataset.py +0 -0
  442. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/tools/create_aomicpiop2_example_dataset.py +0 -0
  443. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/tools/create_bids_example_dataset.py +0 -0
  444. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/tools/create_bids_example_dataset_sessions.py +0 -0
  445. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
  446. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/tools/create_hcp1200_example_dataset.py +0 -0
  447. {junifer-0.0.7.dev72 → junifer-0.0.7.dev84}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: junifer
3
- Version: 0.0.7.dev72
3
+ Version: 0.0.7.dev84
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
+ Add documentation on extending data registries by `Synchon Mandal`_
@@ -0,0 +1 @@
1
+ Enable data registries to be extended by exposing :class:`.BasePipelineDataRegistry` and introducing :func:`.register_data_registry` decorator by `Synchon Mandal`_
@@ -0,0 +1,70 @@
1
+ .. include:: ../links.inc
2
+
3
+ .. _data_registries:
4
+
5
+ Creating a Data Registry
6
+ ========================
7
+
8
+ What is a data registry
9
+ -----------------------
10
+
11
+ Data Registry is an object which manages pipeline data (like parcellations,
12
+ coordinates and masks) based on the scope. ``junifer`` comes with the
13
+ following in-built data registries:
14
+
15
+ * :class:`.ParcellationRegistry` for parcellations
16
+ * :class:`.CoordinatesRegistry` for coordinates
17
+ * :class:`.MaskRegistry` for masks
18
+
19
+ You interact with them indirectly via :func:`.get_data`, :func:`.load_data`,
20
+ :func:`.list_data`, :func:`.register_data` and :func:`.deregister_data`. The
21
+ ``kind`` parameter in them directs which data registry to interact with. These
22
+ in turn supply preprocessors and markers with their necessary data for computation.
23
+
24
+ How to make a data registry
25
+ ---------------------------
26
+
27
+ Ideally you would not need to create a custom data registry if you work with fMRI data.
28
+ In case you work with other modalities like EEG, you might want to create a
29
+ data registry for montages. Here is how you would go about it:
30
+
31
+ #. Check :ref:`extending junifer <extending_extension>` on how to create a
32
+ *junifer extension* if you have not done so.
33
+ #. Create the data registry in the *extension script* like so:
34
+
35
+ .. code-block:: python
36
+
37
+ from junifer.api.decorators import register_data_registry
38
+ from junifer.data import BasePipelineDataRegistry
39
+
40
+
41
+ @register_data_registry("montage")
42
+ class MontageDataRegistry(BasePipelineDataRegistry):
43
+ def __init__(self):
44
+ super().__init__()
45
+
46
+ def register(self):
47
+ pass
48
+
49
+ def deregister(self):
50
+ pass
51
+
52
+ def load(self):
53
+ pass
54
+
55
+ def get(self):
56
+ pass
57
+
58
+
59
+ * :func:`.register_data_registry` registers a class with the name passed in
60
+ the argument, ``"montage"`` in this case.
61
+ * Inheriting from :class:`.BasePipelineDataRegistry` takes care of the class
62
+ acting as a data registry.
63
+ * :meth:`.BasePipelineDataRegistry.register`,
64
+ :meth:`.BasePipelineDataRegistry.deregister`,
65
+ :meth:`.BasePipelineDataRegistry.load` and
66
+ :meth:`.BasePipelineDataRegistry.get` need to be implemented
67
+ (check other registries for reference implementations).
68
+
69
+ #. Pass ``kind="montage"`` in ``*_data`` functions to
70
+ verify if your data registry is set up properly.
@@ -5,8 +5,8 @@
5
5
  Creating a ``junifer`` extension
6
6
  ================================
7
7
 
8
- ``junifer`` is designed to be easily extensible. Through the use of a registry
9
- and decorators, you can easily add new functionality to ``junifer`` during
8
+ ``junifer`` is designed to be easily extensible. Through the use of data registries,
9
+ a component registry and decorators, you can easily add new functionality to ``junifer`` during
10
10
  runtime. This is done by creating a new Python module and importing it before
11
11
  running ``junifer``.
12
12
 
@@ -31,3 +31,4 @@ DataGrabbers, Preprocessors, Markers, etc., following the *junifer* way.
31
31
  coordinates
32
32
  masks
33
33
  plugins
34
+ data_registries
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.0.7.dev72'
21
- __version_tuple__ = version_tuple = (0, 0, 7, 'dev72')
20
+ __version__ = version = '0.0.7.dev84'
21
+ __version_tuple__ = version_tuple = (0, 0, 7, 'dev84')
@@ -5,11 +5,19 @@
5
5
  # Synchon Mandal <s.mandal@fz-juelich.de>
6
6
  # License: AGPL
7
7
 
8
+ from ..data import DataDispatcher
8
9
  from ..pipeline import PipelineComponentRegistry
9
- from ..typing import DataGrabberLike, MarkerLike, PreprocessorLike, StorageLike
10
+ from ..typing import (
11
+ DataGrabberLike,
12
+ DataRegistryLike,
13
+ MarkerLike,
14
+ PreprocessorLike,
15
+ StorageLike,
16
+ )
10
17
 
11
18
 
12
19
  __all__ = [
20
+ "register_data_registry",
13
21
  "register_datagrabber",
14
22
  "register_datareader",
15
23
  "register_marker",
@@ -25,12 +33,12 @@ def register_datagrabber(klass: DataGrabberLike) -> DataGrabberLike:
25
33
 
26
34
  Parameters
27
35
  ----------
28
- klass: class
36
+ klass : class
29
37
  The class of the DataGrabber to register.
30
38
 
31
39
  Returns
32
40
  -------
33
- klass: class
41
+ class
34
42
  The unmodified input class.
35
43
 
36
44
  Notes
@@ -52,12 +60,12 @@ def register_datareader(klass: type) -> type:
52
60
 
53
61
  Parameters
54
62
  ----------
55
- klass: class
63
+ klass : class
56
64
  The class of the DataReader to register.
57
65
 
58
66
  Returns
59
67
  -------
60
- klass: class
68
+ class
61
69
  The unmodified input class.
62
70
 
63
71
  Notes
@@ -79,12 +87,12 @@ def register_preprocessor(klass: PreprocessorLike) -> PreprocessorLike:
79
87
 
80
88
  Parameters
81
89
  ----------
82
- klass: class
90
+ klass : class
83
91
  The class of the preprocessor to register.
84
92
 
85
93
  Returns
86
94
  -------
87
- klass: class
95
+ class
88
96
  The unmodified input class.
89
97
 
90
98
  """
@@ -102,12 +110,12 @@ def register_marker(klass: MarkerLike) -> MarkerLike:
102
110
 
103
111
  Parameters
104
112
  ----------
105
- klass: class
113
+ klass : class
106
114
  The class of the marker to register.
107
115
 
108
116
  Returns
109
117
  -------
110
- klass: class
118
+ class
111
119
  The unmodified input class.
112
120
 
113
121
  """
@@ -125,12 +133,12 @@ def register_storage(klass: StorageLike) -> StorageLike:
125
133
 
126
134
  Parameters
127
135
  ----------
128
- klass: class
136
+ klass : class
129
137
  The class of the storage to register.
130
138
 
131
139
  Returns
132
140
  -------
133
- klass: class
141
+ class
134
142
  The unmodified input class.
135
143
 
136
144
  """
@@ -139,3 +147,40 @@ def register_storage(klass: StorageLike) -> StorageLike:
139
147
  klass=klass,
140
148
  )
141
149
  return klass
150
+
151
+
152
+ def register_data_registry(name: str) -> DataRegistryLike:
153
+ """Registry registration decorator.
154
+
155
+ Registers the data registry as ``name``.
156
+
157
+ Parameters
158
+ ----------
159
+ name : str
160
+ The name of the data registry.
161
+
162
+ Returns
163
+ -------
164
+ class
165
+ The unmodified input class.
166
+
167
+ """
168
+
169
+ def decorator(klass: DataRegistryLike) -> DataRegistryLike:
170
+ """Actual decorator.
171
+
172
+ Parameters
173
+ ----------
174
+ klass : class
175
+ The class of the data registry to register.
176
+
177
+ Returns
178
+ -------
179
+ class
180
+ The unmodified input class.
181
+
182
+ """
183
+ DataDispatcher()[name] = klass
184
+ return klass
185
+
186
+ return decorator
@@ -0,0 +1,32 @@
1
+ """Provide tests for public decorators."""
2
+
3
+ # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
+ # License: AGPL
5
+
6
+ from junifer.api.decorators import register_data_registry
7
+ from junifer.data import BasePipelineDataRegistry, DataDispatcher
8
+
9
+
10
+ def test_register_data_registry() -> None:
11
+ """Test data registry registration."""
12
+
13
+ @register_data_registry("dumb")
14
+ class DumDum(BasePipelineDataRegistry):
15
+ def __init__(self):
16
+ super().__init__()
17
+
18
+ def register(self):
19
+ pass
20
+
21
+ def deregister(self):
22
+ pass
23
+
24
+ def load(self):
25
+ pass
26
+
27
+ def get(self):
28
+ pass
29
+
30
+ assert "dumb" in DataDispatcher()
31
+ _ = DataDispatcher().pop("dumb")
32
+ assert "dumb" not in DataDispatcher()
@@ -1,5 +1,7 @@
1
1
  __all__ = [
2
+ "BasePipelineDataRegistry",
2
3
  "CoordinatesRegistry",
4
+ "DataDispatcher",
3
5
  "ParcellationRegistry",
4
6
  "MaskRegistry",
5
7
  "get_data",
@@ -12,11 +14,13 @@ __all__ = [
12
14
  "utils",
13
15
  ]
14
16
 
17
+ from .pipeline_data_registry_base import BasePipelineDataRegistry
15
18
  from .coordinates import CoordinatesRegistry
16
19
  from .parcellations import ParcellationRegistry
17
20
  from .masks import MaskRegistry
18
21
 
19
22
  from ._dispatch import (
23
+ DataDispatcher,
20
24
  get_data,
21
25
  list_data,
22
26
  load_data,
@@ -3,6 +3,7 @@
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
4
  # License: AGPL
5
5
 
6
+ from collections.abc import Iterator, MutableMapping
6
7
  from pathlib import Path
7
8
  from typing import (
8
9
  TYPE_CHECKING,
@@ -18,13 +19,14 @@ from ..utils import raise_error
18
19
  from .coordinates import CoordinatesRegistry
19
20
  from .masks import MaskRegistry
20
21
  from .parcellations import ParcellationRegistry
22
+ from .pipeline_data_registry_base import BasePipelineDataRegistry
21
23
 
22
24
 
23
25
  if TYPE_CHECKING:
24
26
  from nibabel.nifti1 import Nifti1Image
25
27
 
26
-
27
28
  __all__ = [
29
+ "DataDispatcher",
28
30
  "deregister_data",
29
31
  "get_data",
30
32
  "list_data",
@@ -33,6 +35,77 @@ __all__ = [
33
35
  ]
34
36
 
35
37
 
38
+ class DataDispatcher(MutableMapping):
39
+ """Class for helping dynamic data dispatch."""
40
+
41
+ _instance = None
42
+
43
+ def __new__(cls):
44
+ # Make class singleton
45
+ if cls._instance is None:
46
+ cls._instance = super().__new__(cls)
47
+ # Set registries
48
+ cls._registries: dict[str, type[BasePipelineDataRegistry]] = {}
49
+ cls._builtin: dict[str, type[BasePipelineDataRegistry]] = {}
50
+ cls._external: dict[str, type[BasePipelineDataRegistry]] = {}
51
+ cls._builtin.update(
52
+ {
53
+ "coordinates": CoordinatesRegistry,
54
+ "parcellation": ParcellationRegistry,
55
+ "mask": MaskRegistry,
56
+ }
57
+ )
58
+ cls._registries.update(cls._builtin)
59
+ return cls._instance
60
+
61
+ def __getitem__(self, key: str) -> type[BasePipelineDataRegistry]:
62
+ return self._registries[key]
63
+
64
+ def __iter__(self) -> Iterator[str]:
65
+ return iter(self._registries)
66
+
67
+ def __len__(self) -> int:
68
+ return len(self._registries)
69
+
70
+ def __delitem__(self, key: str) -> None:
71
+ # Internal check
72
+ if key in self._builtin:
73
+ raise_error(f"Cannot delete in-built key: {key}")
74
+ # Non-existing key
75
+ if key not in self._external:
76
+ raise_error(klass=KeyError, msg=key)
77
+ # Update external
78
+ _ = self._external.pop(key)
79
+ # Update global
80
+ _ = self._registries.pop(key)
81
+
82
+ def __setitem__(
83
+ self, key: str, value: type[BasePipelineDataRegistry]
84
+ ) -> None:
85
+ # Internal check
86
+ if key in self._builtin:
87
+ raise_error(f"Cannot set value for in-built key: {key}")
88
+ # Value type check
89
+ if not issubclass(value, BasePipelineDataRegistry):
90
+ raise_error(f"Invalid value type: {type(value)}")
91
+ # Update external
92
+ self._external[key] = value
93
+ # Update global
94
+ self._registries[key] = value
95
+
96
+ def popitem():
97
+ """Not implemented."""
98
+ pass
99
+
100
+ def clear(self):
101
+ """Not implemented."""
102
+ pass
103
+
104
+ def setdefault(self, key: str, value=None):
105
+ """Not implemented."""
106
+ pass
107
+
108
+
36
109
  def get_data(
37
110
  kind: str,
38
111
  names: Union[
@@ -76,27 +149,16 @@ def get_data(
76
149
  If ``kind`` is invalid value.
77
150
 
78
151
  """
79
-
80
- if kind == "coordinates":
81
- return CoordinatesRegistry().get(
82
- coords=names,
83
- target_data=target_data,
84
- extra_input=extra_input,
85
- )
86
- elif kind == "parcellation":
87
- return ParcellationRegistry().get(
88
- parcellations=names,
89
- target_data=target_data,
90
- extra_input=extra_input,
91
- )
92
- elif kind == "mask":
93
- return MaskRegistry().get(
94
- masks=names,
152
+ try:
153
+ registry = DataDispatcher()[kind]
154
+ except KeyError:
155
+ raise_error(f"Unknown data kind: {kind}")
156
+ else:
157
+ return registry().get(
158
+ names,
95
159
  target_data=target_data,
96
160
  extra_input=extra_input,
97
161
  )
98
- else: # pragma: no cover
99
- raise_error(f"Unknown data kind: {kind}")
100
162
 
101
163
 
102
164
  def list_data(kind: str) -> list[str]:
@@ -119,14 +181,12 @@ def list_data(kind: str) -> list[str]:
119
181
 
120
182
  """
121
183
 
122
- if kind == "coordinates":
123
- return CoordinatesRegistry().list
124
- elif kind == "parcellation":
125
- return ParcellationRegistry().list
126
- elif kind == "mask":
127
- return MaskRegistry().list
128
- else: # pragma: no cover
184
+ try:
185
+ registry = DataDispatcher()[kind]
186
+ except KeyError:
129
187
  raise_error(f"Unknown data kind: {kind}")
188
+ else:
189
+ return registry().list
130
190
 
131
191
 
132
192
  def load_data(
@@ -165,15 +225,12 @@ def load_data(
165
225
  If ``kind`` is invalid value.
166
226
 
167
227
  """
168
-
169
- if kind == "coordinates":
170
- return CoordinatesRegistry().load(name=name)
171
- elif kind == "parcellation":
172
- return ParcellationRegistry().load(name=name, **kwargs)
173
- elif kind == "mask":
174
- return MaskRegistry().load(name=name, **kwargs)
175
- else: # pragma: no cover
228
+ try:
229
+ registry = DataDispatcher()[kind]
230
+ except KeyError:
176
231
  raise_error(f"Unknown data kind: {kind}")
232
+ else:
233
+ return registry().load(name, **kwargs)
177
234
 
178
235
 
179
236
  def register_data(
@@ -205,20 +262,14 @@ def register_data(
205
262
 
206
263
  """
207
264
 
208
- if kind == "coordinates":
209
- return CoordinatesRegistry().register(
210
- name=name, space=space, overwrite=overwrite, **kwargs
211
- )
212
- elif kind == "parcellation":
213
- return ParcellationRegistry().register(
214
- name=name, space=space, overwrite=overwrite, **kwargs
215
- )
216
- elif kind == "mask":
217
- return MaskRegistry().register(
265
+ try:
266
+ registry = DataDispatcher()[kind]
267
+ except KeyError:
268
+ raise_error(f"Unknown data kind: {kind}")
269
+ else:
270
+ return registry().register(
218
271
  name=name, space=space, overwrite=overwrite, **kwargs
219
272
  )
220
- else: # pragma: no cover
221
- raise_error(f"Unknown data kind: {kind}")
222
273
 
223
274
 
224
275
  def deregister_data(kind: str, name: str) -> None:
@@ -238,11 +289,9 @@ def deregister_data(kind: str, name: str) -> None:
238
289
 
239
290
  """
240
291
 
241
- if kind == "coordinates":
242
- return CoordinatesRegistry().deregister(name=name)
243
- elif kind == "parcellation":
244
- return ParcellationRegistry().deregister(name=name)
245
- elif kind == "mask":
246
- return MaskRegistry().deregister(name=name)
247
- else: # pragma: no cover
292
+ try:
293
+ registry = DataDispatcher()[kind]
294
+ except KeyError:
248
295
  raise_error(f"Unknown data kind: {kind}")
296
+ else:
297
+ return registry().deregister(name=name)
@@ -13,7 +13,6 @@ from junifer_data import get
13
13
  from numpy.typing import ArrayLike
14
14
 
15
15
  from ...utils import logger, raise_error
16
- from ...utils.singleton import Singleton
17
16
  from ..pipeline_data_registry_base import BasePipelineDataRegistry
18
17
  from ..utils import JUNIFER_DATA_PARAMS, get_dataset_path, get_native_warper
19
18
  from ._ants_coordinates_warper import ANTsCoordinatesWarper
@@ -23,7 +22,7 @@ from ._fsl_coordinates_warper import FSLCoordinatesWarper
23
22
  __all__ = ["CoordinatesRegistry"]
24
23
 
25
24
 
26
- class CoordinatesRegistry(BasePipelineDataRegistry, metaclass=Singleton):
25
+ class CoordinatesRegistry(BasePipelineDataRegistry):
27
26
  """Class for coordinates data registry.
28
27
 
29
28
  This class is a singleton and is used for managing available coordinates
@@ -24,7 +24,6 @@ from nilearn.masking import (
24
24
  )
25
25
 
26
26
  from ...utils import logger, raise_error
27
- from ...utils.singleton import Singleton
28
27
  from ..pipeline_data_registry_base import BasePipelineDataRegistry
29
28
  from ..template_spaces import get_template
30
29
  from ..utils import (
@@ -216,7 +215,7 @@ def compute_brain_mask(
216
215
  return nimg.new_img_like(target_data["data"], mask) # type: ignore
217
216
 
218
217
 
219
- class MaskRegistry(BasePipelineDataRegistry, metaclass=Singleton):
218
+ class MaskRegistry(BasePipelineDataRegistry):
220
219
  """Class for mask data registry.
221
220
 
222
221
  This class is a singleton and is used for managing available mask
@@ -16,7 +16,6 @@ import pandas as pd
16
16
  from junifer_data import get
17
17
 
18
18
  from ...utils import logger, raise_error, warn_with_log
19
- from ...utils.singleton import Singleton
20
19
  from ..pipeline_data_registry_base import BasePipelineDataRegistry
21
20
  from ..utils import (
22
21
  JUNIFER_DATA_PARAMS,
@@ -38,7 +37,7 @@ __all__ = [
38
37
  ]
39
38
 
40
39
 
41
- class ParcellationRegistry(BasePipelineDataRegistry, metaclass=Singleton):
40
+ class ParcellationRegistry(BasePipelineDataRegistry):
42
41
  """Class for parcellation data registry.
43
42
 
44
43
  This class is a singleton and is used for managing available parcellation
@@ -14,6 +14,7 @@ from nilearn.image import new_img_like, resample_to_img
14
14
  from numpy.testing import assert_array_almost_equal, assert_array_equal
15
15
 
16
16
  from junifer.data import (
17
+ deregister_data,
17
18
  get_data,
18
19
  list_data,
19
20
  load_data,
@@ -1245,3 +1246,9 @@ def test_get_multi_different_space() -> None:
1245
1246
  ],
1246
1247
  target_data=element_data["VBM_GM"],
1247
1248
  )
1249
+
1250
+
1251
+ def test_deregister() -> None:
1252
+ """Test parcellation deregistration."""
1253
+ deregister_data(kind="parcellation", name="testparc_3")
1254
+ assert "testparc_3" not in list_data(kind="parcellation")
@@ -0,0 +1,87 @@
1
+ """Provide tests for data dispatching."""
2
+
3
+ # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
+ # License: AGPL
5
+
6
+ import pytest
7
+
8
+ from junifer.data import (
9
+ BasePipelineDataRegistry,
10
+ deregister_data,
11
+ get_data,
12
+ list_data,
13
+ load_data,
14
+ register_data,
15
+ )
16
+ from junifer.data._dispatch import DataDispatcher
17
+
18
+
19
+ def test_dispatcher_addition_errors() -> None:
20
+ """Test registry addition errors."""
21
+ with pytest.raises(ValueError, match="Cannot set"):
22
+ DataDispatcher()["mask"] = dict
23
+
24
+ with pytest.raises(ValueError, match="Invalid"):
25
+ DataDispatcher()["masks"] = dict
26
+
27
+
28
+ def test_dispatcher_removal_errors() -> None:
29
+ """Test registry removal errors."""
30
+ with pytest.raises(ValueError, match="Cannot delete"):
31
+ _ = DataDispatcher().pop("mask")
32
+
33
+ with pytest.raises(KeyError, match="masks"):
34
+ del DataDispatcher()["masks"]
35
+
36
+
37
+ def test_dispatcher() -> None:
38
+ """Test registry addition and removal."""
39
+
40
+ class DumDum(BasePipelineDataRegistry):
41
+ def register():
42
+ pass
43
+
44
+ def deregister():
45
+ pass
46
+
47
+ def load():
48
+ pass
49
+
50
+ def get():
51
+ pass
52
+
53
+ DataDispatcher().update({"masks": DumDum})
54
+ assert "masks" in DataDispatcher()
55
+
56
+ _ = DataDispatcher().pop("masks")
57
+ assert "masks" not in DataDispatcher()
58
+
59
+
60
+ def test_get_data_error() -> None:
61
+ """Test error for get_data()."""
62
+ with pytest.raises(ValueError, match="Unknown data kind"):
63
+ get_data(kind="planet", names="neptune", target_data={})
64
+
65
+
66
+ def test_list_data_error() -> None:
67
+ """Test error for list_data()."""
68
+ with pytest.raises(ValueError, match="Unknown data kind"):
69
+ list_data(kind="planet")
70
+
71
+
72
+ def test_load_data_error() -> None:
73
+ """Test error for load_data()."""
74
+ with pytest.raises(ValueError, match="Unknown data kind"):
75
+ load_data(kind="planet", name="neptune")
76
+
77
+
78
+ def test_register_data_error() -> None:
79
+ """Test error for register_data()."""
80
+ with pytest.raises(ValueError, match="Unknown data kind"):
81
+ register_data(kind="planet", name="neptune", space="milkyway")
82
+
83
+
84
+ def test_deregister_data_error() -> None:
85
+ """Test error for deregister_data()."""
86
+ with pytest.raises(ValueError, match="Unknown data kind"):
87
+ deregister_data(kind="planet", name="neptune")