junifer 0.0.7.dev84__tar.gz → 0.0.7.dev93__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 (450) hide show
  1. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/PKG-INFO +1 -1
  2. junifer-0.0.7.dev93/docs/changes/newsfragments/451.doc +1 -0
  3. junifer-0.0.7.dev93/docs/changes/newsfragments/451.feature +1 -0
  4. junifer-0.0.7.dev93/docs/extending/data_types.rst +57 -0
  5. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/extending/index.rst +1 -0
  6. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/_version.py +2 -2
  7. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/__init__.pyi +11 -1
  8. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/pattern_validation_mixin.py +212 -85
  9. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/tests/test_pattern_validation_mixin.py +104 -1
  10. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/typing/_typing.py +1 -1
  11. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer.egg-info/PKG-INFO +1 -1
  12. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer.egg-info/SOURCES.txt +3 -0
  13. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.dockerignore +0 -0
  14. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  15. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  16. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
  17. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
  18. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  19. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
  20. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.github/dependabot.yml +0 -0
  21. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.github/pull_request_template.md +0 -0
  22. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.github/workflows/ci-docs.yml +0 -0
  23. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.github/workflows/ci.yml +0 -0
  24. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.github/workflows/docker-ci-publish.yml +0 -0
  25. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.github/workflows/docker-docs-publish.yml +0 -0
  26. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.github/workflows/docs-preview.yml +0 -0
  27. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.github/workflows/docs.yml +0 -0
  28. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.github/workflows/lint.yml +0 -0
  29. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.github/workflows/publish.yml +0 -0
  30. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.gitignore +0 -0
  31. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.gitmodules +0 -0
  32. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/.pre-commit-config.yaml +0 -0
  33. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/AUTHORS.rst +0 -0
  34. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/Dockerfile-ci +0 -0
  35. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/Dockerfile-docs +0 -0
  36. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/LICENSE.md +0 -0
  37. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/README.md +0 -0
  38. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/codecov.yml +0 -0
  39. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/conda-env.yml +0 -0
  40. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/Makefile +0 -0
  41. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/_static/css/custom.css +0 -0
  42. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/_static/js/custom.js +0 -0
  43. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/_templates/versions.html +0 -0
  44. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/api/api.rst +0 -0
  45. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/api/cli.rst +0 -0
  46. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/api/configs.rst +0 -0
  47. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/api/data.rst +0 -0
  48. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/api/datagrabbers.rst +0 -0
  49. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/api/datareaders.rst +0 -0
  50. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/api/index.rst +0 -0
  51. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/api/markers.rst +0 -0
  52. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/api/nilearn.rst +0 -0
  53. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/api/onthefly.rst +0 -0
  54. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/api/pipeline.rst +0 -0
  55. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/api/preprocessing.rst +0 -0
  56. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/api/stats.rst +0 -0
  57. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/api/storage.rst +0 -0
  58. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/api/testing.rst +0 -0
  59. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/api/utils.rst +0 -0
  60. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/builtin.rst +0 -0
  61. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/changes/contributors.inc +0 -0
  62. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/changes/newsfragments/.gitignore +0 -0
  63. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/changes/newsfragments/333.enh +0 -0
  64. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/changes/newsfragments/441.misc +0 -0
  65. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/changes/newsfragments/443.feature +0 -0
  66. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/changes/newsfragments/444.bugfix +0 -0
  67. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/changes/newsfragments/450.doc +0 -0
  68. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/changes/newsfragments/450.feature +0 -0
  69. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/conf.py +0 -0
  70. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/contribution.rst +0 -0
  71. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/extending/coordinates.rst +0 -0
  72. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/extending/data_registries.rst +0 -0
  73. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/extending/datagrabber.rst +0 -0
  74. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/extending/dependencies.rst +0 -0
  75. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/extending/extension.rst +0 -0
  76. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/extending/marker.rst +0 -0
  77. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/extending/masks.rst +0 -0
  78. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/extending/parcellations.rst +0 -0
  79. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/extending/plugins.rst +0 -0
  80. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/extending/preprocessor.rst +0 -0
  81. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/faq.rst +0 -0
  82. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/help.rst +0 -0
  83. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/images/junifer_logo.png +0 -0
  84. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/index.rst +0 -0
  85. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/installation.rst +0 -0
  86. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/links.inc +0 -0
  87. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/maintaining.rst +0 -0
  88. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/redirect.html +0 -0
  89. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/starting.rst +0 -0
  90. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/understanding/data.rst +0 -0
  91. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/understanding/datagrabber.rst +0 -0
  92. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/understanding/datareader.rst +0 -0
  93. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/understanding/index.rst +0 -0
  94. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/understanding/marker.rst +0 -0
  95. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/understanding/pipeline.rst +0 -0
  96. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/understanding/preprocess.rst +0 -0
  97. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/understanding/storage.rst +0 -0
  98. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/using/codeless.rst +0 -0
  99. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/using/index.rst +0 -0
  100. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/using/masks.rst +0 -0
  101. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/using/queueing.rst +0 -0
  102. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/using/running.rst +0 -0
  103. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/docs/whats_new.rst +0 -0
  104. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/examples/README.rst +0 -0
  105. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/examples/norun_hcpfc_pearson.py +0 -0
  106. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/examples/norun_ukbvm_gmd.py +0 -0
  107. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/examples/run_compute_parcel_mean.py +0 -0
  108. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/examples/run_datagrabber_bids_datalad.py +0 -0
  109. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/examples/run_ets_rss_marker.py +0 -0
  110. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/examples/run_junifer_julearn.py +0 -0
  111. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/examples/run_run_gmd_mean.py +0 -0
  112. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/examples/yamls/gmd_mean.yaml +0 -0
  113. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
  114. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/examples/yamls/partly_cloudy_agg_mean_tian.yml +0 -0
  115. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/examples/yamls/ukb_gmd_mean.yaml +0 -0
  116. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/ignore_words.txt +0 -0
  117. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/__init__.py +0 -0
  118. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/__init__.pyi +0 -0
  119. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/__init__.py +0 -0
  120. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/__init__.pyi +0 -0
  121. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/decorators.py +0 -0
  122. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/functions.py +0 -0
  123. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/py.typed +0 -0
  124. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/queue_context/__init__.py +0 -0
  125. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/queue_context/__init__.pyi +0 -0
  126. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/queue_context/gnu_parallel_local_adapter.py +0 -0
  127. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/queue_context/htcondor_adapter.py +0 -0
  128. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/queue_context/py.typed +0 -0
  129. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/queue_context/queue_context_adapter.py +0 -0
  130. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +0 -0
  131. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/queue_context/tests/test_htcondor_adapter.py +0 -0
  132. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
  133. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/afni/3dRSFC +0 -0
  134. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/afni/3dReHo +0 -0
  135. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/afni/afni +0 -0
  136. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/afni/run_afni_docker.sh +0 -0
  137. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/ants/ResampleImage +0 -0
  138. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/ants/antsApplyTransforms +0 -0
  139. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
  140. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/ants/run_ants_docker.sh +0 -0
  141. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/freesurfer/mri_binarize +0 -0
  142. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/freesurfer/mri_mc +0 -0
  143. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/freesurfer/mri_pretess +0 -0
  144. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/freesurfer/mris_convert +0 -0
  145. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/freesurfer/run_freesurfer_docker.sh +0 -0
  146. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/fsl/applywarp +0 -0
  147. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/fsl/flirt +0 -0
  148. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/fsl/img2imgcoord +0 -0
  149. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
  150. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/fsl/std2imgcoord +0 -0
  151. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/run_conda.bash +0 -0
  152. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/run_conda.zsh +0 -0
  153. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/run_venv.bash +0 -0
  154. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/res/run_venv.zsh +0 -0
  155. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/tests/test_decorators.py +0 -0
  156. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/api/tests/test_functions.py +0 -0
  157. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/cli/__init__.py +0 -0
  158. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/cli/__init__.pyi +0 -0
  159. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/cli/cli.py +0 -0
  160. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/cli/parser.py +0 -0
  161. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/cli/py.typed +0 -0
  162. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/cli/tests/data/gmd_mean.yaml +0 -0
  163. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/cli/tests/data/gmd_mean_htcondor.yaml +0 -0
  164. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +0 -0
  165. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/cli/tests/test_cli.py +0 -0
  166. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/cli/tests/test_cli_utils.py +0 -0
  167. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/cli/tests/test_parser.py +0 -0
  168. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/cli/utils.py +0 -0
  169. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/__init__.py +0 -0
  170. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/juseless/__init__.py +0 -0
  171. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/juseless/__init__.pyi +0 -0
  172. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
  173. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/juseless/datagrabbers/__init__.pyi +0 -0
  174. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
  175. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
  176. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
  177. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/juseless/datagrabbers/py.typed +0 -0
  178. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
  179. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
  180. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
  181. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
  182. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
  183. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
  184. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
  185. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/configs/juseless/py.typed +0 -0
  186. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/conftest.py +0 -0
  187. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/__init__.py +0 -0
  188. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/__init__.pyi +0 -0
  189. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/_dispatch.py +0 -0
  190. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/coordinates/__init__.py +0 -0
  191. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/coordinates/__init__.pyi +0 -0
  192. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/coordinates/_ants_coordinates_warper.py +0 -0
  193. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/coordinates/_coordinates.py +0 -0
  194. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/coordinates/_fsl_coordinates_warper.py +0 -0
  195. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/coordinates/tests/test_coordinates.py +0 -0
  196. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/masks/__init__.py +0 -0
  197. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/masks/__init__.pyi +0 -0
  198. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/masks/_ants_mask_warper.py +0 -0
  199. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/masks/_fsl_mask_warper.py +0 -0
  200. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/masks/_masks.py +0 -0
  201. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/masks/tests/test_masks.py +0 -0
  202. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/parcellations/__init__.py +0 -0
  203. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/parcellations/__init__.pyi +0 -0
  204. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/parcellations/_ants_parcellation_warper.py +0 -0
  205. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/parcellations/_fsl_parcellation_warper.py +0 -0
  206. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/parcellations/_parcellations.py +0 -0
  207. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/parcellations/tests/test_parcellations.py +0 -0
  208. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/pipeline_data_registry_base.py +0 -0
  209. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/py.typed +0 -0
  210. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/template_spaces.py +0 -0
  211. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/tests/test_data_utils.py +0 -0
  212. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/tests/test_dispatch.py +0 -0
  213. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/tests/test_template_spaces.py +0 -0
  214. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/data/utils.py +0 -0
  215. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/__init__.py +0 -0
  216. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/aomic/__init__.py +0 -0
  217. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/aomic/__init__.pyi +0 -0
  218. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/aomic/id1000.py +0 -0
  219. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/aomic/piop1.py +0 -0
  220. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/aomic/piop2.py +0 -0
  221. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/aomic/py.typed +0 -0
  222. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
  223. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
  224. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
  225. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/base.py +0 -0
  226. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/datalad_base.py +0 -0
  227. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/dmcc13_benchmark.py +0 -0
  228. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/hcp1200/__init__.py +0 -0
  229. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/hcp1200/__init__.pyi +0 -0
  230. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
  231. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
  232. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/hcp1200/py.typed +0 -0
  233. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
  234. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/multiple.py +0 -0
  235. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/pattern.py +0 -0
  236. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/pattern_datalad.py +0 -0
  237. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/py.typed +0 -0
  238. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/tests/test_base.py +0 -0
  239. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
  240. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +0 -0
  241. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/tests/test_multiple.py +0 -0
  242. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/tests/test_pattern.py +0 -0
  243. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
  244. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datareader/__init__.py +0 -0
  245. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datareader/__init__.pyi +0 -0
  246. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datareader/default.py +0 -0
  247. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datareader/py.typed +0 -0
  248. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/datareader/tests/test_default_reader.py +0 -0
  249. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/BrainPrint/brainprint/__init__.py +0 -0
  250. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/BrainPrint/brainprint/_version.py +0 -0
  251. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/BrainPrint/brainprint/asymmetry.py +0 -0
  252. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/BrainPrint/brainprint/brainprint.py +0 -0
  253. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/BrainPrint/brainprint/surfaces.py +0 -0
  254. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/BrainPrint/brainprint/utils/__init__.py +0 -0
  255. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/BrainPrint/brainprint/utils/_config.py +0 -0
  256. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/BrainPrint/brainprint/utils/utils.py +0 -0
  257. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/__init__.py +0 -0
  258. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/h5io/h5io/__init__.py +0 -0
  259. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/h5io/h5io/_h5io.py +0 -0
  260. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/h5io/h5io/_version.py +0 -0
  261. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/h5io/h5io/chunked_array.py +0 -0
  262. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/h5io/h5io/chunked_list.py +0 -0
  263. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/nilearn/__init__.py +0 -0
  264. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/nilearn/__init__.pyi +0 -0
  265. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/nilearn/junifer_connectivity_measure.py +0 -0
  266. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
  267. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/nilearn/py.typed +0 -0
  268. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +0 -0
  269. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
  270. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/__init__.py +0 -0
  271. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/__init__.pyi +0 -0
  272. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/base.py +0 -0
  273. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/brainprint.py +0 -0
  274. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/__init__.py +0 -0
  275. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/__init__.pyi +0 -0
  276. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/complexity_base.py +0 -0
  277. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/hurst_exponent.py +0 -0
  278. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
  279. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/perm_entropy.py +0 -0
  280. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/py.typed +0 -0
  281. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/range_entropy.py +0 -0
  282. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/range_entropy_auc.py +0 -0
  283. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/sample_entropy.py +0 -0
  284. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
  285. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
  286. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
  287. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
  288. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
  289. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
  290. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
  291. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
  292. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
  293. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/ets_rss.py +0 -0
  294. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/falff/__init__.py +0 -0
  295. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/falff/__init__.pyi +0 -0
  296. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/falff/_afni_falff.py +0 -0
  297. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/falff/_junifer_falff.py +0 -0
  298. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/falff/falff_base.py +0 -0
  299. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/falff/falff_parcels.py +0 -0
  300. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/falff/falff_spheres.py +0 -0
  301. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/falff/py.typed +0 -0
  302. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
  303. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
  304. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/functional_connectivity/__init__.py +0 -0
  305. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/functional_connectivity/__init__.pyi +0 -0
  306. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
  307. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
  308. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
  309. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
  310. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
  311. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
  312. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/functional_connectivity/py.typed +0 -0
  313. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
  314. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
  315. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
  316. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
  317. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
  318. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
  319. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/parcel_aggregation.py +0 -0
  320. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/py.typed +0 -0
  321. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/reho/__init__.py +0 -0
  322. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/reho/__init__.pyi +0 -0
  323. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/reho/_afni_reho.py +0 -0
  324. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/reho/_junifer_reho.py +0 -0
  325. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/reho/py.typed +0 -0
  326. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/reho/reho_base.py +0 -0
  327. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/reho/reho_parcels.py +0 -0
  328. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/reho/reho_spheres.py +0 -0
  329. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
  330. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
  331. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/sphere_aggregation.py +0 -0
  332. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/temporal_snr/__init__.py +0 -0
  333. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/temporal_snr/__init__.pyi +0 -0
  334. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/temporal_snr/py.typed +0 -0
  335. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
  336. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
  337. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
  338. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
  339. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
  340. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
  341. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/tests/test_brainprint.py +0 -0
  342. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/tests/test_ets_rss.py +0 -0
  343. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/tests/test_marker_utils.py +0 -0
  344. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/tests/test_markers_base.py +0 -0
  345. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
  346. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
  347. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/markers/utils.py +0 -0
  348. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/onthefly/__init__.py +0 -0
  349. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/onthefly/_brainprint.py +0 -0
  350. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/onthefly/read_transform.py +0 -0
  351. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/onthefly/tests/test_read_transform.py +0 -0
  352. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/pipeline/__init__.py +0 -0
  353. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/pipeline/__init__.pyi +0 -0
  354. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/pipeline/marker_collection.py +0 -0
  355. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/pipeline/pipeline_component_registry.py +0 -0
  356. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/pipeline/pipeline_step_mixin.py +0 -0
  357. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/pipeline/py.typed +0 -0
  358. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/pipeline/tests/test_marker_collection.py +0 -0
  359. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/pipeline/tests/test_pipeline_component_registry.py +0 -0
  360. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
  361. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
  362. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/pipeline/tests/test_workdir_manager.py +0 -0
  363. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/pipeline/update_meta_mixin.py +0 -0
  364. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/pipeline/utils.py +0 -0
  365. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/pipeline/workdir_manager.py +0 -0
  366. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/__init__.py +0 -0
  367. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/__init__.pyi +0 -0
  368. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/_temporal_slicer.py +0 -0
  369. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/base.py +0 -0
  370. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/confounds/__init__.py +0 -0
  371. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/confounds/__init__.pyi +0 -0
  372. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
  373. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/confounds/py.typed +0 -0
  374. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +0 -0
  375. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/py.typed +0 -0
  376. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/smoothing/__init__.py +0 -0
  377. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/smoothing/__init__.pyi +0 -0
  378. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/smoothing/_afni_smoothing.py +0 -0
  379. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/smoothing/_fsl_smoothing.py +0 -0
  380. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/smoothing/_nilearn_smoothing.py +0 -0
  381. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/smoothing/py.typed +0 -0
  382. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/smoothing/smoothing.py +0 -0
  383. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/smoothing/tests/test_smoothing.py +0 -0
  384. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/tests/test_preprocess_base.py +0 -0
  385. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/tests/test_temporal_slicer.py +0 -0
  386. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/warping/__init__.py +0 -0
  387. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/warping/__init__.pyi +0 -0
  388. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/warping/_ants_warper.py +0 -0
  389. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/warping/_fsl_warper.py +0 -0
  390. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/warping/py.typed +0 -0
  391. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/warping/space_warper.py +0 -0
  392. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/preprocess/warping/tests/test_space_warper.py +0 -0
  393. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/py.typed +0 -0
  394. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/stats.py +0 -0
  395. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/storage/__init__.py +0 -0
  396. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/storage/__init__.pyi +0 -0
  397. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/storage/base.py +0 -0
  398. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/storage/hdf5.py +0 -0
  399. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/storage/pandas_base.py +0 -0
  400. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/storage/py.typed +0 -0
  401. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/storage/sqlite.py +0 -0
  402. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/storage/tests/test_hdf5.py +0 -0
  403. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/storage/tests/test_pandas_base.py +0 -0
  404. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/storage/tests/test_sqlite.py +0 -0
  405. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/storage/tests/test_storage_base.py +0 -0
  406. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/storage/tests/test_utils.py +0 -0
  407. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/storage/utils.py +0 -0
  408. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/testing/__init__.py +0 -0
  409. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/testing/__init__.pyi +0 -0
  410. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
  411. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/testing/datagrabbers.py +0 -0
  412. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/testing/py.typed +0 -0
  413. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/testing/registry.py +0 -0
  414. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
  415. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
  416. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
  417. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/testing/tests/test_testing_registry.py +0 -0
  418. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/testing/utils.py +0 -0
  419. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/tests/test_main.py +0 -0
  420. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/tests/test_stats.py +0 -0
  421. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/typing/__init__.py +0 -0
  422. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/typing/__init__.pyi +0 -0
  423. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/utils/__init__.py +0 -0
  424. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/utils/__init__.pyi +0 -0
  425. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/utils/_config.py +0 -0
  426. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/utils/_yaml.py +0 -0
  427. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/utils/fs.py +0 -0
  428. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/utils/helpers.py +0 -0
  429. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/utils/logging.py +0 -0
  430. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/utils/py.typed +0 -0
  431. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/utils/singleton.py +0 -0
  432. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/utils/tests/test_config.py +0 -0
  433. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/utils/tests/test_fs.py +0 -0
  434. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/utils/tests/test_helpers.py +0 -0
  435. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer/utils/tests/test_logging.py +0 -0
  436. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer.egg-info/dependency_links.txt +0 -0
  437. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer.egg-info/entry_points.txt +0 -0
  438. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer.egg-info/requires.txt +0 -0
  439. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/junifer.egg-info/top_level.txt +0 -0
  440. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/pyproject.toml +0 -0
  441. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/setup.cfg +0 -0
  442. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/setup.py +0 -0
  443. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/tools/create_aomic1000_example_dataset.py +0 -0
  444. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/tools/create_aomicpiop1_example_dataset.py +0 -0
  445. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/tools/create_aomicpiop2_example_dataset.py +0 -0
  446. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/tools/create_bids_example_dataset.py +0 -0
  447. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/tools/create_bids_example_dataset_sessions.py +0 -0
  448. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
  449. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/tools/create_hcp1200_example_dataset.py +0 -0
  450. {junifer-0.0.7.dev84 → junifer-0.0.7.dev93}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: junifer
3
- Version: 0.0.7.dev84
3
+ Version: 0.0.7.dev93
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 adding data types by `Synchon Mandal`_
@@ -0,0 +1 @@
1
+ Enable data types to be added by introducing :func:`.register_data_type` by `Synchon Mandal`_
@@ -0,0 +1,57 @@
1
+ .. include:: ../links.inc
2
+
3
+ .. _adding_data_types:
4
+
5
+ Adding Data Types
6
+ =================
7
+
8
+ ``junifer`` supports most of the :ref:`data types <data_types>` required for fMRI
9
+ but also provides a way to add custom data types in case you work with other
10
+ modalities like EEG.
11
+
12
+ How to add a data type
13
+ ----------------------
14
+
15
+ #. Check :ref:`extending junifer <extending_extension>` on how to create a
16
+ *junifer extension* if you have not done so.
17
+ #. Define the data type schema in the *extension script* like so:
18
+
19
+ .. code-block:: python
20
+
21
+ from junifer.datagrabber import DataTypeSchema
22
+
23
+
24
+ dtype_schema: DataTypeSchema = {
25
+ "mandatory": ["pattern"],
26
+ "optional": {
27
+ "mask": {
28
+ "mandatory": ["pattern"],
29
+ "optional": [],
30
+ },
31
+ },
32
+ }
33
+
34
+ * The :obj:`.DataTypeSchema` has two mandatory keys:
35
+
36
+ * ``mandatory`` : list of str
37
+ * ``optional`` : dict of str and :obj:`.OptionalTypeSchema`
38
+
39
+ * ``mandatory`` defines the keys that must be present when defining a *pattern*
40
+ in a DataGrabber.
41
+ * ``optional`` defines the mapping from *sub-types* that are optional, to their patterns.
42
+ The patterns in turn require a ``mandatory`` key and an ``optional`` key both
43
+ just being the keys that must be there if the optional key is found. It's
44
+ possible that the *sub-type* (``mask`` in the example) can be absent from the dataset.
45
+
46
+ #. Register the data type before defining / using a DataGrabber like so:
47
+
48
+ .. code-block:: python
49
+
50
+ from junifer.datagrabber import register_data_type
51
+ ...
52
+
53
+
54
+ # registers the data type as "dtype"
55
+ register_data_type(name="dtype", schema=dtype_schema)
56
+
57
+ ...
@@ -32,3 +32,4 @@ DataGrabbers, Preprocessors, Markers, etc., following the *junifer* way.
32
32
  masks
33
33
  plugins
34
34
  data_registries
35
+ data_types
@@ -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.dev84'
21
- __version_tuple__ = version_tuple = (0, 0, 7, 'dev84')
20
+ __version__ = version = '0.0.7.dev93'
21
+ __version_tuple__ = version_tuple = (0, 0, 7, 'dev93')
@@ -10,7 +10,11 @@ __all__ = [
10
10
  "DataladHCP1200",
11
11
  "MultipleDataGrabber",
12
12
  "DMCC13Benchmark",
13
+ "DataTypeManager",
14
+ "DataTypeSchema",
15
+ "OptionalTypeSchema",
13
16
  "PatternValidationMixin",
17
+ "register_data_type",
14
18
  ]
15
19
 
16
20
  # These 4 need to be in this order, otherwise it is a circular import
@@ -24,4 +28,10 @@ from .hcp1200 import HCP1200, DataladHCP1200
24
28
  from .multiple import MultipleDataGrabber
25
29
  from .dmcc13_benchmark import DMCC13Benchmark
26
30
 
27
- from .pattern_validation_mixin import PatternValidationMixin
31
+ from .pattern_validation_mixin import (
32
+ DataTypeManager,
33
+ DataTypeSchema,
34
+ OptionalTypeSchema,
35
+ PatternValidationMixin,
36
+ register_data_type,
37
+ )
@@ -3,71 +3,199 @@
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
4
  # License: AGPL
5
5
 
6
+ from collections.abc import Iterator, MutableMapping
7
+ from typing import TypedDict
8
+
6
9
  from ..typing import DataGrabberPatterns
7
10
  from ..utils import logger, raise_error, warn_with_log
8
11
 
9
12
 
10
- __all__ = ["PatternValidationMixin"]
11
-
12
-
13
- # Define schema for pattern-based datagrabber's patterns
14
- PATTERNS_SCHEMA = {
15
- "T1w": {
16
- "mandatory": ["pattern", "space"],
17
- "optional": {
18
- "mask": {"mandatory": ["pattern", "space"], "optional": []},
19
- },
20
- },
21
- "T2w": {
22
- "mandatory": ["pattern", "space"],
23
- "optional": {
24
- "mask": {"mandatory": ["pattern", "space"], "optional": []},
25
- },
26
- },
27
- "BOLD": {
28
- "mandatory": ["pattern", "space"],
29
- "optional": {
30
- "mask": {"mandatory": ["pattern", "space"], "optional": []},
31
- "confounds": {
32
- "mandatory": ["pattern", "format"],
33
- "optional": ["mappings"],
34
- },
35
- "reference": {"mandatory": ["pattern"], "optional": []},
36
- "prewarp_space": {"mandatory": [], "optional": []},
37
- },
38
- },
39
- "Warp": {
40
- "mandatory": ["pattern", "src", "dst", "warper"],
41
- "optional": {},
42
- },
43
- "VBM_GM": {
44
- "mandatory": ["pattern", "space"],
45
- "optional": {},
46
- },
47
- "VBM_WM": {
48
- "mandatory": ["pattern", "space"],
49
- "optional": {},
50
- },
51
- "VBM_CSF": {
52
- "mandatory": ["pattern", "space"],
53
- "optional": {},
54
- },
55
- "DWI": {
56
- "mandatory": ["pattern"],
57
- "optional": {},
58
- },
59
- "FreeSurfer": {
60
- "mandatory": ["pattern"],
61
- "optional": {
62
- "aseg": {"mandatory": ["pattern"], "optional": []},
63
- "norm": {"mandatory": ["pattern"], "optional": []},
64
- "lh_white": {"mandatory": ["pattern"], "optional": []},
65
- "rh_white": {"mandatory": ["pattern"], "optional": []},
66
- "lh_pial": {"mandatory": ["pattern"], "optional": []},
67
- "rh_pial": {"mandatory": ["pattern"], "optional": []},
68
- },
69
- },
70
- }
13
+ __all__ = [
14
+ "DataTypeManager",
15
+ "DataTypeSchema",
16
+ "OptionalTypeSchema",
17
+ "PatternValidationMixin",
18
+ "register_data_type",
19
+ ]
20
+
21
+
22
+ class OptionalTypeSchema(TypedDict):
23
+ """Optional type schema."""
24
+
25
+ mandatory: list[str]
26
+ optional: list[str]
27
+
28
+
29
+ class DataTypeSchema(TypedDict):
30
+ """Data type schema."""
31
+
32
+ mandatory: list[str]
33
+ optional: dict[str, OptionalTypeSchema]
34
+
35
+
36
+ class DataTypeManager(MutableMapping):
37
+ """Class for managing data types."""
38
+
39
+ _instance = None
40
+
41
+ def __new__(cls):
42
+ """Overridden to make the class singleton."""
43
+ # Make class singleton
44
+ if cls._instance is None:
45
+ cls._instance = super().__new__(cls)
46
+ # Set global schema
47
+ cls._global: dict[str, DataTypeSchema] = {}
48
+ cls._builtin: dict[str, DataTypeSchema] = {}
49
+ cls._external: dict[str, DataTypeSchema] = {}
50
+ cls._builtin.update(
51
+ {
52
+ "T1w": {
53
+ "mandatory": ["pattern", "space"],
54
+ "optional": {
55
+ "mask": {
56
+ "mandatory": ["pattern", "space"],
57
+ "optional": [],
58
+ },
59
+ },
60
+ },
61
+ "T2w": {
62
+ "mandatory": ["pattern", "space"],
63
+ "optional": {
64
+ "mask": {
65
+ "mandatory": ["pattern", "space"],
66
+ "optional": [],
67
+ },
68
+ },
69
+ },
70
+ "BOLD": {
71
+ "mandatory": ["pattern", "space"],
72
+ "optional": {
73
+ "mask": {
74
+ "mandatory": ["pattern", "space"],
75
+ "optional": [],
76
+ },
77
+ "confounds": {
78
+ "mandatory": ["pattern", "format"],
79
+ "optional": ["mappings"],
80
+ },
81
+ "reference": {
82
+ "mandatory": ["pattern"],
83
+ "optional": [],
84
+ },
85
+ "prewarp_space": {"mandatory": [], "optional": []},
86
+ },
87
+ },
88
+ "Warp": {
89
+ "mandatory": ["pattern", "src", "dst", "warper"],
90
+ "optional": {},
91
+ },
92
+ "VBM_GM": {
93
+ "mandatory": ["pattern", "space"],
94
+ "optional": {},
95
+ },
96
+ "VBM_WM": {
97
+ "mandatory": ["pattern", "space"],
98
+ "optional": {},
99
+ },
100
+ "VBM_CSF": {
101
+ "mandatory": ["pattern", "space"],
102
+ "optional": {},
103
+ },
104
+ "DWI": {
105
+ "mandatory": ["pattern"],
106
+ "optional": {},
107
+ },
108
+ "FreeSurfer": {
109
+ "mandatory": ["pattern"],
110
+ "optional": {
111
+ "aseg": {"mandatory": ["pattern"], "optional": []},
112
+ "norm": {"mandatory": ["pattern"], "optional": []},
113
+ "lh_white": {
114
+ "mandatory": ["pattern"],
115
+ "optional": [],
116
+ },
117
+ "rh_white": {
118
+ "mandatory": ["pattern"],
119
+ "optional": [],
120
+ },
121
+ "lh_pial": {
122
+ "mandatory": ["pattern"],
123
+ "optional": [],
124
+ },
125
+ "rh_pial": {
126
+ "mandatory": ["pattern"],
127
+ "optional": [],
128
+ },
129
+ },
130
+ },
131
+ }
132
+ )
133
+ cls._global.update(cls._builtin)
134
+ return cls._instance
135
+
136
+ def __getitem__(self, key: str) -> DataTypeSchema:
137
+ """Retrieve schema for ``key``."""
138
+ return self._global[key]
139
+
140
+ def __iter__(self) -> Iterator[str]:
141
+ """Iterate over data types."""
142
+ return iter(self._global)
143
+
144
+ def __len__(self) -> int:
145
+ """Get data type count."""
146
+ return len(self._global)
147
+
148
+ def __delitem__(self, key: str) -> None:
149
+ """Remove schema for ``key``."""
150
+ # Internal check
151
+ if key in self._builtin:
152
+ raise_error(f"Cannot delete in-built key: {key}")
153
+ # Non-existing key
154
+ if key not in self._external:
155
+ raise_error(klass=KeyError, msg=key)
156
+ # Update external
157
+ _ = self._external.pop(key)
158
+ # Update global
159
+ _ = self._global.pop(key)
160
+
161
+ def __setitem__(self, key: str, value: DataTypeSchema) -> None:
162
+ """Update ``key`` with ``value``."""
163
+ # Internal check
164
+ if key in self._builtin:
165
+ raise_error(f"Cannot set value for in-built key: {key}")
166
+ # Value type check
167
+ if not isinstance(value, dict):
168
+ raise_error(f"Invalid value type: {type(value)}")
169
+ # Update external
170
+ self._external[key] = value
171
+ # Update global
172
+ self._global[key] = value
173
+
174
+ def popitem():
175
+ """Not implemented."""
176
+ pass
177
+
178
+ def clear(self):
179
+ """Not implemented."""
180
+ pass
181
+
182
+ def setdefault(self, key: str, value=None):
183
+ """Not implemented."""
184
+ pass
185
+
186
+
187
+ def register_data_type(name: str, schema: DataTypeSchema) -> None:
188
+ """Register custom data type.
189
+
190
+ Parameters
191
+ ----------
192
+ name : str
193
+ The data type name.
194
+ schema : DataTypeSchema
195
+ The data type schema.
196
+
197
+ """
198
+ DataTypeManager()[name] = schema
71
199
 
72
200
 
73
201
  class PatternValidationMixin:
@@ -311,12 +439,13 @@ class PatternValidationMixin:
311
439
  msg="`patterns` must contain all `types`", klass=ValueError
312
440
  )
313
441
  # Check against schema
442
+ dtype_mgr = DataTypeManager()
314
443
  for dtype_key, dtype_val in patterns.items():
315
444
  # Check if valid data type is provided
316
- if dtype_key not in PATTERNS_SCHEMA:
445
+ if dtype_key not in dtype_mgr:
317
446
  raise_error(
318
447
  f"Unknown data type: {dtype_key}, "
319
- f"should be one of: {list(PATTERNS_SCHEMA.keys())}"
448
+ f"should be one of: {list(dtype_mgr.keys())}"
320
449
  )
321
450
  # Conditional for list dtype vals like Warp
322
451
  if isinstance(dtype_val, list):
@@ -324,14 +453,14 @@ class PatternValidationMixin:
324
453
  # Check mandatory keys for data type
325
454
  self._validate_mandatory_keys(
326
455
  keys=list(entry),
327
- schema=PATTERNS_SCHEMA[dtype_key]["mandatory"],
456
+ schema=dtype_mgr[dtype_key]["mandatory"],
328
457
  data_type=f"{dtype_key}.{idx}",
329
458
  partial_pattern_ok=partial_pattern_ok,
330
459
  )
331
460
  # Check optional keys for data type
332
- for optional_key, optional_val in PATTERNS_SCHEMA[
333
- dtype_key
334
- ]["optional"].items():
461
+ for optional_key, optional_val in dtype_mgr[dtype_key][
462
+ "optional"
463
+ ].items():
335
464
  if optional_key not in entry:
336
465
  logger.debug(
337
466
  f"Optional key: `{optional_key}` missing for "
@@ -344,12 +473,12 @@ class PatternValidationMixin:
344
473
  )
345
474
  # Set nested type name for easier access
346
475
  nested_dtype = f"{dtype_key}.{idx}.{optional_key}"
347
- nested_mandatory_keys_schema = PATTERNS_SCHEMA[
476
+ nested_mandatory_keys_schema = dtype_mgr[
348
477
  dtype_key
349
478
  ]["optional"][optional_key]["mandatory"]
350
- nested_optional_keys_schema = PATTERNS_SCHEMA[
351
- dtype_key
352
- ]["optional"][optional_key]["optional"]
479
+ nested_optional_keys_schema = dtype_mgr[dtype_key][
480
+ "optional"
481
+ ][optional_key]["optional"]
353
482
  # Check mandatory keys for nested type
354
483
  self._validate_mandatory_keys(
355
484
  keys=list(optional_val["mandatory"]),
@@ -392,10 +521,8 @@ class PatternValidationMixin:
392
521
  self._identify_stray_keys(
393
522
  keys=list(entry.keys()),
394
523
  schema=(
395
- PATTERNS_SCHEMA[dtype_key]["mandatory"]
396
- + list(
397
- PATTERNS_SCHEMA[dtype_key]["optional"].keys()
398
- )
524
+ dtype_mgr[dtype_key]["mandatory"]
525
+ + list(dtype_mgr[dtype_key]["optional"].keys())
399
526
  ),
400
527
  data_type=dtype_key,
401
528
  )
@@ -412,12 +539,12 @@ class PatternValidationMixin:
412
539
  # Check mandatory keys for data type
413
540
  self._validate_mandatory_keys(
414
541
  keys=list(dtype_val),
415
- schema=PATTERNS_SCHEMA[dtype_key]["mandatory"],
542
+ schema=dtype_mgr[dtype_key]["mandatory"],
416
543
  data_type=dtype_key,
417
544
  partial_pattern_ok=partial_pattern_ok,
418
545
  )
419
546
  # Check optional keys for data type
420
- for optional_key, optional_val in PATTERNS_SCHEMA[dtype_key][
547
+ for optional_key, optional_val in dtype_mgr[dtype_key][
421
548
  "optional"
422
549
  ].items():
423
550
  if optional_key not in dtype_val:
@@ -432,12 +559,12 @@ class PatternValidationMixin:
432
559
  )
433
560
  # Set nested type name for easier access
434
561
  nested_dtype = f"{dtype_key}.{optional_key}"
435
- nested_mandatory_keys_schema = PATTERNS_SCHEMA[
436
- dtype_key
437
- ]["optional"][optional_key]["mandatory"]
438
- nested_optional_keys_schema = PATTERNS_SCHEMA[
439
- dtype_key
440
- ]["optional"][optional_key]["optional"]
562
+ nested_mandatory_keys_schema = dtype_mgr[dtype_key][
563
+ "optional"
564
+ ][optional_key]["mandatory"]
565
+ nested_optional_keys_schema = dtype_mgr[dtype_key][
566
+ "optional"
567
+ ][optional_key]["optional"]
441
568
  # Check mandatory keys for nested type
442
569
  self._validate_mandatory_keys(
443
570
  keys=list(optional_val["mandatory"]),
@@ -476,8 +603,8 @@ class PatternValidationMixin:
476
603
  self._identify_stray_keys(
477
604
  keys=list(dtype_val.keys()),
478
605
  schema=(
479
- PATTERNS_SCHEMA[dtype_key]["mandatory"]
480
- + list(PATTERNS_SCHEMA[dtype_key]["optional"].keys())
606
+ dtype_mgr[dtype_key]["mandatory"]
607
+ + list(dtype_mgr[dtype_key]["optional"].keys())
481
608
  ),
482
609
  data_type=dtype_key,
483
610
  )
@@ -9,7 +9,110 @@ from typing import Union
9
9
 
10
10
  import pytest
11
11
 
12
- from junifer.datagrabber.pattern_validation_mixin import PatternValidationMixin
12
+ from junifer.datagrabber.pattern_validation_mixin import (
13
+ DataTypeManager,
14
+ DataTypeSchema,
15
+ PatternValidationMixin,
16
+ register_data_type,
17
+ )
18
+
19
+
20
+ def test_dtype_mgr_addition_errors() -> None:
21
+ """Test data type manager addition errors."""
22
+ with pytest.raises(ValueError, match="Cannot set"):
23
+ dtype_schema: DataTypeSchema = {
24
+ "mandatory": ["pattern"],
25
+ "optional": {},
26
+ }
27
+ DataTypeManager()["T1w"] = dtype_schema
28
+
29
+ with pytest.raises(ValueError, match="Invalid"):
30
+ DataTypeManager()["DType"] = ""
31
+
32
+
33
+ def test_dtype_mgr_removal_errors() -> None:
34
+ """Test data type manager removal errors."""
35
+ with pytest.raises(ValueError, match="Cannot delete"):
36
+ _ = DataTypeManager().pop("T1w")
37
+
38
+ with pytest.raises(KeyError, match="DType"):
39
+ del DataTypeManager()["DType"]
40
+
41
+
42
+ @pytest.mark.parametrize(
43
+ "dtype",
44
+ [
45
+ {
46
+ "mandatory": ["pattern"],
47
+ "optional": {},
48
+ },
49
+ {
50
+ "mandatory": ["pattern"],
51
+ "optional": {
52
+ "subtype": {
53
+ "mandatory": [],
54
+ "optional": [],
55
+ }
56
+ },
57
+ },
58
+ {
59
+ "mandatory": ["pattern"],
60
+ "optional": {
61
+ "subtype": {
62
+ "mandatory": ["pattern"],
63
+ "optional": [],
64
+ }
65
+ },
66
+ },
67
+ {
68
+ "mandatory": ["pattern"],
69
+ "optional": {
70
+ "subtype": {
71
+ "mandatory": ["pattern"],
72
+ "optional": ["pattern"],
73
+ }
74
+ },
75
+ },
76
+ ],
77
+ )
78
+ def test_dtype_mgr(dtype: DataTypeSchema) -> None:
79
+ """Test data type manager addition and removal.
80
+
81
+ Parameters
82
+ ----------
83
+ dtype : DataTypeSchema
84
+ The parametrized schema.
85
+
86
+ """
87
+
88
+ DataTypeManager().update({"DType": dtype})
89
+ assert "DType" in DataTypeManager()
90
+
91
+ _ = DataTypeManager().pop("DType")
92
+ assert "DType" not in DataTypeManager()
93
+
94
+
95
+ def test_register_data_type() -> None:
96
+ """Test data type registration."""
97
+
98
+ dtype_schema: DataTypeSchema = {
99
+ "mandatory": ["pattern"],
100
+ "optional": {
101
+ "mask": {
102
+ "mandatory": ["pattern"],
103
+ "optional": [],
104
+ },
105
+ },
106
+ }
107
+
108
+ register_data_type(
109
+ name="dtype",
110
+ schema=dtype_schema,
111
+ )
112
+
113
+ assert "dtype" in DataTypeManager()
114
+ _ = DataTypeManager().pop("dtype")
115
+ assert "dumb" not in DataTypeManager()
13
116
 
14
117
 
15
118
  @pytest.mark.parametrize(
@@ -64,7 +64,7 @@ ConditionalDependencies = Sequence[
64
64
  ExternalDependencies = Sequence[MutableMapping[str, Union[str, Sequence[str]]]]
65
65
  MarkerInOutMappings = MutableMapping[str, MutableMapping[str, str]]
66
66
  DataGrabberPatterns = dict[
67
- str, Union[dict[str, str], Sequence[dict[str, str]]]
67
+ str, Union[dict[str, str], list[dict[str, str]]]
68
68
  ]
69
69
  ConfigVal = Union[bool, int, float, str]
70
70
  Element = Union[str, tuple[str, ...]]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: junifer
3
- Version: 0.0.7.dev84
3
+ Version: 0.0.7.dev93
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>
@@ -69,8 +69,11 @@ docs/changes/newsfragments/443.feature
69
69
  docs/changes/newsfragments/444.bugfix
70
70
  docs/changes/newsfragments/450.doc
71
71
  docs/changes/newsfragments/450.feature
72
+ docs/changes/newsfragments/451.doc
73
+ docs/changes/newsfragments/451.feature
72
74
  docs/extending/coordinates.rst
73
75
  docs/extending/data_registries.rst
76
+ docs/extending/data_types.rst
74
77
  docs/extending/datagrabber.rst
75
78
  docs/extending/dependencies.rst
76
79
  docs/extending/extension.rst