junifer 0.0.8.dev311__tar.gz → 0.0.8.dev318__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 (606) hide show
  1. {junifer-0.0.8.dev311/junifer.egg-info → junifer-0.0.8.dev318}/PKG-INFO +1 -1
  2. junifer-0.0.8.dev318/docs/changes/newsfragments/525.bugfix +1 -0
  3. junifer-0.0.8.dev318/docs/changes/newsfragments/525.bugfix.1 +1 -0
  4. junifer-0.0.8.dev318/docs/changes/newsfragments/525.change +1 -0
  5. junifer-0.0.8.dev318/docs/changes/newsfragments/525.change.1 +1 -0
  6. junifer-0.0.8.dev318/docs/changes/newsfragments/525.change.2 +1 -0
  7. junifer-0.0.8.dev318/docs/changes/newsfragments/525.change.3 +1 -0
  8. junifer-0.0.8.dev318/docs/changes/newsfragments/525.change.4 +1 -0
  9. junifer-0.0.8.dev318/docs/changes/newsfragments/525.doc +1 -0
  10. junifer-0.0.8.dev318/docs/changes/newsfragments/525.enh +1 -0
  11. junifer-0.0.8.dev318/docs/changes/newsfragments/525.feature +1 -0
  12. junifer-0.0.8.dev318/docs/changes/newsfragments/528.bugfix +1 -0
  13. junifer-0.0.8.dev318/docs/changes/newsfragments/528.change +1 -0
  14. junifer-0.0.8.dev318/docs/changes/newsfragments/528.doc +1 -0
  15. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/extending/datagrabber.rst +52 -12
  16. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/index.rst +1 -0
  17. junifer-0.0.8.dev318/docs/internals.rst +169 -0
  18. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/understanding/storage.rst +8 -0
  19. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/_version.py +3 -3
  20. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/tests/test_functions.py +126 -3
  21. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/base.py +28 -7
  22. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +28 -0
  23. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/hcp1200/hcp1200.py +26 -0
  24. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +61 -0
  25. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/multiple.py +24 -0
  26. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/pattern.py +28 -12
  27. junifer-0.0.8.dev318/junifer/datagrabber/pattern_datalad.py +123 -0
  28. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/tests/test_multiple.py +8 -0
  29. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/tests/test_pattern.py +10 -0
  30. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/tests/test_pattern_datalad.py +101 -0
  31. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/pipeline/update_meta_mixin.py +9 -1
  32. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/base.py +3 -2
  33. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +2 -2
  34. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/tests/test_preprocess_base.py +14 -4
  35. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/storage/base.py +62 -6
  36. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/storage/hdf5.py +104 -8
  37. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/storage/pandas_base.py +32 -2
  38. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/storage/sqlite.py +62 -10
  39. junifer-0.0.8.dev318/junifer/storage/tests/test_repeated_storage.py +293 -0
  40. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/storage/tests/test_sqlite.py +2 -2
  41. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/storage/tests/test_storage_base.py +4 -2
  42. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/storage/tests/test_utils.py +67 -0
  43. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/storage/utils.py +27 -7
  44. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318/junifer.egg-info}/PKG-INFO +1 -1
  45. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer.egg-info/SOURCES.txt +15 -0
  46. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer.egg-info/scm_file_list.json +15 -0
  47. junifer-0.0.8.dev318/junifer.egg-info/scm_version.json +8 -0
  48. junifer-0.0.8.dev311/junifer/datagrabber/pattern_datalad.py +0 -63
  49. junifer-0.0.8.dev311/junifer.egg-info/scm_version.json +0 -8
  50. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.dockerignore +0 -0
  51. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  52. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  53. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
  54. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
  55. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  56. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
  57. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.github/dependabot.yml +0 -0
  58. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.github/pull_request_template.md +0 -0
  59. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.github/workflows/check-stale.yml +0 -0
  60. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.github/workflows/ci.yml +0 -0
  61. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.github/workflows/docker-publish.yml +0 -0
  62. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.github/workflows/docs-preview.yml +0 -0
  63. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.github/workflows/docs.yml +0 -0
  64. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.github/workflows/lint.yml +0 -0
  65. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.github/workflows/publish.yml +0 -0
  66. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.gitignore +0 -0
  67. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.gitmodules +0 -0
  68. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.pre-commit-config.yaml +0 -0
  69. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/.python-version +0 -0
  70. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/AUTHORS.rst +0 -0
  71. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/Dockerfile +0 -0
  72. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/Dockerfile-ci +0 -0
  73. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/LICENSE.md +0 -0
  74. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/README.md +0 -0
  75. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/codecov.yml +0 -0
  76. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/conda-env.yml +0 -0
  77. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/Makefile +0 -0
  78. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/_static/css/custom.css +0 -0
  79. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/_static/css/version_selector.css +0 -0
  80. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/_static/js/custom.js +0 -0
  81. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/_templates/versions.html +0 -0
  82. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/api/api.rst +0 -0
  83. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/api/cli.rst +0 -0
  84. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/api/configs.rst +0 -0
  85. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/api/data.rst +0 -0
  86. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/api/datagrabbers.rst +0 -0
  87. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/api/datareaders.rst +0 -0
  88. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/api/index.rst +0 -0
  89. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/api/markers.rst +0 -0
  90. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/api/nilearn.rst +0 -0
  91. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/api/onthefly.rst +0 -0
  92. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/api/pipeline.rst +0 -0
  93. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/api/preprocessing.rst +0 -0
  94. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/api/stats.rst +0 -0
  95. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/api/storage.rst +0 -0
  96. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/api/testing.rst +0 -0
  97. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/api/utils.rst +0 -0
  98. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/builtin.rst +0 -0
  99. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/contributors.inc +0 -0
  100. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/.gitignore +0 -0
  101. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/239.enh +0 -0
  102. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/364.doc +0 -0
  103. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/364.enh +0 -0
  104. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/364.feature +0 -0
  105. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/474.misc +0 -0
  106. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/482.bugfix +0 -0
  107. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/492.bugfix +0 -0
  108. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/499.enh +0 -0
  109. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/502.bugfix +0 -0
  110. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/503.enh +0 -0
  111. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/504.bugfix +0 -0
  112. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/504.misc +0 -0
  113. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/509.enh +0 -0
  114. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/510.bugfix +0 -0
  115. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/511.bugfix +0 -0
  116. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/511.bugfix.1 +0 -0
  117. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/511.change +0 -0
  118. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/511.enh +0 -0
  119. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/511.enh.1 +0 -0
  120. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/511.feature +0 -0
  121. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/511.misc +0 -0
  122. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/511.misc.1 +0 -0
  123. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/513.doc +0 -0
  124. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/513.misc +0 -0
  125. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/514.bugfix +0 -0
  126. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/514.bugfix.1 +0 -0
  127. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/514.enh +0 -0
  128. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/515.doc +0 -0
  129. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/515.enh +0 -0
  130. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/515.enh.1 +0 -0
  131. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/515.misc +0 -0
  132. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/515.misc.1 +0 -0
  133. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/516.bugfix +0 -0
  134. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/516.bugfix.1 +0 -0
  135. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/516.bugfix.2 +0 -0
  136. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/516.change +0 -0
  137. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/516.change.1 +0 -0
  138. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/516.misc +0 -0
  139. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/520.bugfix +0 -0
  140. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/520.bugfix.1 +0 -0
  141. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/520.bugfix.2 +0 -0
  142. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/520.bugfix.3 +0 -0
  143. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/520.bugfix.4 +0 -0
  144. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/520.bugfix.5 +0 -0
  145. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/520.bugfix.6 +0 -0
  146. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/520.change +0 -0
  147. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/520.doc +0 -0
  148. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/520.misc +0 -0
  149. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/520.misc.1 +0 -0
  150. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/520.misc.2 +0 -0
  151. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/520.misc.3 +0 -0
  152. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/520.removal +0 -0
  153. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/521.bugfix +0 -0
  154. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/522.bugfix +0 -0
  155. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/522.enh +0 -0
  156. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/523.misc +0 -0
  157. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/524.bugfix +0 -0
  158. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/524.bugfix.1 +0 -0
  159. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/524.change +0 -0
  160. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/524.change.1 +0 -0
  161. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/524.change.2 +0 -0
  162. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/524.doc +0 -0
  163. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/524.enh +0 -0
  164. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/524.feature +0 -0
  165. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/changes/newsfragments/524.feature.1 +0 -0
  166. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/conf.py +0 -0
  167. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/contribution.rst +0 -0
  168. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/extending/confounds_format.rst +0 -0
  169. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/extending/coordinates.rst +0 -0
  170. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/extending/data_dump_asset.rst +0 -0
  171. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/extending/data_registries.rst +0 -0
  172. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/extending/data_types.rst +0 -0
  173. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/extending/dependencies.rst +0 -0
  174. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/extending/extension.rst +0 -0
  175. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/extending/index.rst +0 -0
  176. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/extending/logging.rst +0 -0
  177. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/extending/maps.rst +0 -0
  178. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/extending/marker.rst +0 -0
  179. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/extending/masks.rst +0 -0
  180. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/extending/parcellations.rst +0 -0
  181. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/extending/plugins.rst +0 -0
  182. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/extending/preprocessor.rst +0 -0
  183. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/faq.rst +0 -0
  184. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/help.rst +0 -0
  185. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/images/junifer_logo.png +0 -0
  186. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/installation.rst +0 -0
  187. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/links.inc +0 -0
  188. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/maintaining.rst +0 -0
  189. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/poly.py +0 -0
  190. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/poly_files/patches/version_banner.html +0 -0
  191. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/poly_files/patches/versions.html +0 -0
  192. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/poly_files/templates/index.html +0 -0
  193. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/starting.rst +0 -0
  194. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/understanding/data.rst +0 -0
  195. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/understanding/datagrabber.rst +0 -0
  196. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/understanding/datareader.rst +0 -0
  197. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/understanding/index.rst +0 -0
  198. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/understanding/marker.rst +0 -0
  199. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/understanding/pipeline.rst +0 -0
  200. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/understanding/preprocess.rst +0 -0
  201. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/using/codeless.rst +0 -0
  202. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/using/configuring.rst +0 -0
  203. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/using/dumping.rst +0 -0
  204. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/using/index.rst +0 -0
  205. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/using/masks.rst +0 -0
  206. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/using/queueing.rst +0 -0
  207. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/using/running.rst +0 -0
  208. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/docs/whats_new.rst +0 -0
  209. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/examples/README.rst +0 -0
  210. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/examples/norun_hcpfc_pearson.py +0 -0
  211. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/examples/norun_ukbvm_gmd.py +0 -0
  212. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/examples/run_compute_parcel_mean.py +0 -0
  213. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/examples/run_datagrabber_bids_datalad.py +0 -0
  214. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/examples/run_ets_rss_marker.py +0 -0
  215. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/examples/run_junifer_julearn.py +0 -0
  216. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/examples/run_run_gmd_mean.py +0 -0
  217. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/examples/yamls/gmd_mean.yaml +0 -0
  218. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
  219. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/examples/yamls/partly_cloudy_agg_mean_tian.yml +0 -0
  220. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/examples/yamls/ukb_gmd_mean.yaml +0 -0
  221. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/ignore_words.txt +0 -0
  222. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/__init__.py +0 -0
  223. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/__init__.pyi +0 -0
  224. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/__init__.py +0 -0
  225. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/__init__.pyi +0 -0
  226. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/decorators.py +0 -0
  227. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/functions.py +0 -0
  228. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/py.typed +0 -0
  229. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/queue_context/__init__.py +0 -0
  230. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/queue_context/__init__.pyi +0 -0
  231. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/queue_context/gnu_parallel_local_adapter.py +0 -0
  232. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/queue_context/htcondor_adapter.py +0 -0
  233. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/queue_context/py.typed +0 -0
  234. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/queue_context/queue_context_adapter.py +0 -0
  235. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +0 -0
  236. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/queue_context/tests/test_htcondor_adapter.py +0 -0
  237. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
  238. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/afni/3dRSFC +0 -0
  239. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/afni/3dReHo +0 -0
  240. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/afni/afni +0 -0
  241. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/afni/run_afni_docker.sh +0 -0
  242. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/ants/ResampleImage +0 -0
  243. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/ants/antsApplyTransforms +0 -0
  244. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
  245. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/ants/run_ants_docker.sh +0 -0
  246. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/freesurfer/mri_binarize +0 -0
  247. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/freesurfer/mri_mc +0 -0
  248. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/freesurfer/mri_pretess +0 -0
  249. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/freesurfer/mris_convert +0 -0
  250. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/freesurfer/run_freesurfer_docker.sh +0 -0
  251. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/fsl/applywarp +0 -0
  252. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/fsl/flirt +0 -0
  253. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/fsl/img2imgcoord +0 -0
  254. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
  255. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/fsl/std2imgcoord +0 -0
  256. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/run_conda.bash +0 -0
  257. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/run_conda.zsh +0 -0
  258. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/run_venv.bash +0 -0
  259. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/res/run_venv.zsh +0 -0
  260. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/api/tests/test_decorators.py +0 -0
  261. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/cli/__init__.py +0 -0
  262. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/cli/__init__.pyi +0 -0
  263. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/cli/cli.py +0 -0
  264. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/cli/parser.py +0 -0
  265. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/cli/py.typed +0 -0
  266. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/cli/tests/data/gmd_mean.yaml +0 -0
  267. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/cli/tests/data/gmd_mean_htcondor.yaml +0 -0
  268. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +0 -0
  269. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/cli/tests/test_cli.py +0 -0
  270. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/cli/tests/test_cli_utils.py +0 -0
  271. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/cli/utils.py +0 -0
  272. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/__init__.py +0 -0
  273. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/__init__.pyi +0 -0
  274. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/juseless/__init__.py +0 -0
  275. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/juseless/__init__.pyi +0 -0
  276. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
  277. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/juseless/datagrabbers/__init__.pyi +0 -0
  278. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
  279. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
  280. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
  281. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/juseless/datagrabbers/py.typed +0 -0
  282. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
  283. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
  284. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
  285. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
  286. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
  287. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
  288. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
  289. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/juseless/py.typed +0 -0
  290. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/configs/py.typed +0 -0
  291. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/conftest.py +0 -0
  292. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/__init__.py +0 -0
  293. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/__init__.pyi +0 -0
  294. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/_dispatch.py +0 -0
  295. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/coordinates/__init__.py +0 -0
  296. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/coordinates/__init__.pyi +0 -0
  297. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/coordinates/_ants_coordinates_warper.py +0 -0
  298. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/coordinates/_coordinates.py +0 -0
  299. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/coordinates/_fsl_coordinates_warper.py +0 -0
  300. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/coordinates/tests/test_coordinates.py +0 -0
  301. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/coordinates/tests/test_coordinates_names.py +0 -0
  302. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/maps/__init__.py +0 -0
  303. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/maps/__init__.pyi +0 -0
  304. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/maps/_ants_maps_warper.py +0 -0
  305. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/maps/_fsl_maps_warper.py +0 -0
  306. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/maps/_maps.py +0 -0
  307. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/maps/tests/test_maps.py +0 -0
  308. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/masks/__init__.py +0 -0
  309. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/masks/__init__.pyi +0 -0
  310. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/masks/_ants_mask_warper.py +0 -0
  311. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/masks/_fsl_mask_warper.py +0 -0
  312. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/masks/_masks.py +0 -0
  313. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/masks/tests/test_masks.py +0 -0
  314. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/parcellations/__init__.py +0 -0
  315. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/parcellations/__init__.pyi +0 -0
  316. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/parcellations/_ants_parcellation_warper.py +0 -0
  317. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/parcellations/_fsl_parcellation_warper.py +0 -0
  318. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/parcellations/_parcellations.py +0 -0
  319. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/parcellations/tests/test_parcellations.py +0 -0
  320. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/pipeline_data_registry_base.py +0 -0
  321. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/py.typed +0 -0
  322. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/template_spaces.py +0 -0
  323. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/tests/test_data_utils.py +0 -0
  324. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/tests/test_dispatch.py +0 -0
  325. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/tests/test_template_spaces.py +0 -0
  326. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/data/utils.py +0 -0
  327. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/__init__.py +0 -0
  328. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/__init__.pyi +0 -0
  329. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/aomic/__init__.py +0 -0
  330. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/aomic/__init__.pyi +0 -0
  331. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/aomic/_types.py +0 -0
  332. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/aomic/id1000.py +0 -0
  333. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/aomic/piop1.py +0 -0
  334. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/aomic/piop2.py +0 -0
  335. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/aomic/py.typed +0 -0
  336. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
  337. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
  338. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
  339. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/datalad_base.py +0 -0
  340. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/dmcc13_benchmark.py +0 -0
  341. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/hcp1200/__init__.py +0 -0
  342. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/hcp1200/__init__.pyi +0 -0
  343. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/hcp1200/py.typed +0 -0
  344. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/pattern_validation_mixin.py +0 -0
  345. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/py.typed +0 -0
  346. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/tests/test_base.py +0 -0
  347. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
  348. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +0 -0
  349. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datagrabber/tests/test_pattern_validation_mixin.py +0 -0
  350. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datareader/__init__.py +0 -0
  351. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datareader/__init__.pyi +0 -0
  352. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datareader/default.py +0 -0
  353. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datareader/py.typed +0 -0
  354. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/datareader/tests/test_default_reader.py +0 -0
  355. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/.codecov.yml +0 -0
  356. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/.codespellignore +0 -0
  357. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  358. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  359. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  360. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/questions-help-support.md +0 -0
  361. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/.github/dependabot.yml +0 -0
  362. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/.github/workflows/build.yml +0 -0
  363. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/.github/workflows/code-style.yml +0 -0
  364. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/.github/workflows/doc.yml +0 -0
  365. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/.github/workflows/publish.yml +0 -0
  366. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/.github/workflows/pytest.yml +0 -0
  367. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/.gitignore +0 -0
  368. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/LICENSE +0 -0
  369. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/README.md +0 -0
  370. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/brainprint/__init__.py +0 -0
  371. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/brainprint/_version.py +0 -0
  372. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/brainprint/asymmetry.py +0 -0
  373. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/brainprint/brainprint.py +0 -0
  374. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/brainprint/cli/__init__.py +0 -0
  375. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/brainprint/cli/help_text.py +0 -0
  376. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/brainprint/cli/parser.py +0 -0
  377. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/brainprint/cli/utils.py +0 -0
  378. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/brainprint/commands/__init__.py +0 -0
  379. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/brainprint/commands/sys_info.py +0 -0
  380. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/brainprint/surfaces.py +0 -0
  381. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/brainprint/utils/__init__.py +0 -0
  382. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/brainprint/utils/_config.py +0 -0
  383. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/brainprint/utils/tests/__init__.py +0 -0
  384. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/brainprint/utils/tests/test_config.py +0 -0
  385. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/brainprint/utils/utils.py +0 -0
  386. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/doc/Makefile +0 -0
  387. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/doc/_static/.gitkeep +0 -0
  388. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/doc/_templates/autosummary/class.rst +0 -0
  389. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/doc/_templates/autosummary/function.rst +0 -0
  390. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/doc/_templates/autosummary/module.rst +0 -0
  391. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/doc/api/index.rst +0 -0
  392. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/doc/conf.py +0 -0
  393. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/doc/index.rst +0 -0
  394. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/doc/links.inc +0 -0
  395. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/doc/make.bat +0 -0
  396. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/doc/references.bib +0 -0
  397. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/pyproject.toml +0 -0
  398. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/BrainPrint/setup.py +0 -0
  399. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/__init__.py +0 -0
  400. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/__init__.pyi +0 -0
  401. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/nilearn/__init__.py +0 -0
  402. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/nilearn/__init__.pyi +0 -0
  403. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/nilearn/junifer_connectivity_measure.py +0 -0
  404. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
  405. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/nilearn/py.typed +0 -0
  406. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +0 -0
  407. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
  408. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/external/py.typed +0 -0
  409. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/__init__.py +0 -0
  410. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/__init__.pyi +0 -0
  411. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/base.py +0 -0
  412. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/brainprint.py +0 -0
  413. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/__init__.py +0 -0
  414. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/__init__.pyi +0 -0
  415. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/complexity_base.py +0 -0
  416. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/hurst_exponent.py +0 -0
  417. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
  418. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/perm_entropy.py +0 -0
  419. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/py.typed +0 -0
  420. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/range_entropy.py +0 -0
  421. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/range_entropy_auc.py +0 -0
  422. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/sample_entropy.py +0 -0
  423. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
  424. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
  425. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
  426. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
  427. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
  428. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
  429. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
  430. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
  431. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
  432. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/ets_rss.py +0 -0
  433. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/falff/__init__.py +0 -0
  434. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/falff/__init__.pyi +0 -0
  435. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/falff/_afni_falff.py +0 -0
  436. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/falff/_junifer_falff.py +0 -0
  437. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/falff/falff_base.py +0 -0
  438. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/falff/falff_maps.py +0 -0
  439. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/falff/falff_parcels.py +0 -0
  440. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/falff/falff_spheres.py +0 -0
  441. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/falff/py.typed +0 -0
  442. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/falff/tests/test_falff_maps.py +0 -0
  443. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
  444. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
  445. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/__init__.py +0 -0
  446. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/__init__.pyi +0 -0
  447. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
  448. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/edge_functional_connectivity_maps.py +0 -0
  449. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
  450. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
  451. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
  452. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/functional_connectivity_maps.py +0 -0
  453. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
  454. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
  455. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/py.typed +0 -0
  456. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
  457. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_maps.py +0 -0
  458. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
  459. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
  460. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
  461. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_maps.py +0 -0
  462. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
  463. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
  464. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/maps_aggregation.py +0 -0
  465. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/parcel_aggregation.py +0 -0
  466. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/py.typed +0 -0
  467. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/reho/__init__.py +0 -0
  468. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/reho/__init__.pyi +0 -0
  469. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/reho/_afni_reho.py +0 -0
  470. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/reho/_junifer_reho.py +0 -0
  471. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/reho/py.typed +0 -0
  472. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/reho/reho_base.py +0 -0
  473. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/reho/reho_maps.py +0 -0
  474. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/reho/reho_parcels.py +0 -0
  475. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/reho/reho_spheres.py +0 -0
  476. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/reho/tests/test_junifer_reho.py +0 -0
  477. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/reho/tests/test_reho_maps.py +0 -0
  478. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
  479. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
  480. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/sphere_aggregation.py +0 -0
  481. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/temporal_snr/__init__.py +0 -0
  482. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/temporal_snr/__init__.pyi +0 -0
  483. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/temporal_snr/py.typed +0 -0
  484. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
  485. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/temporal_snr/temporal_snr_maps.py +0 -0
  486. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
  487. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
  488. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
  489. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/temporal_snr/tests/test_temporal_snr_maps.py +0 -0
  490. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
  491. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
  492. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/tests/test_brainprint.py +0 -0
  493. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/tests/test_ets_rss.py +0 -0
  494. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/tests/test_lost_regions.py +0 -0
  495. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/tests/test_maps_aggregation.py +0 -0
  496. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/tests/test_marker_utils.py +0 -0
  497. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/tests/test_markers_base.py +0 -0
  498. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
  499. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
  500. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/markers/utils.py +0 -0
  501. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/onthefly/__init__.py +0 -0
  502. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/onthefly/__init__.pyi +0 -0
  503. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/onthefly/_brainprint.py +0 -0
  504. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/onthefly/py.typed +0 -0
  505. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/onthefly/read_transform.py +0 -0
  506. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/onthefly/tests/test_read_transform.py +0 -0
  507. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/pipeline/__init__.py +0 -0
  508. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/pipeline/__init__.pyi +0 -0
  509. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/pipeline/_data_object_dumper.py +0 -0
  510. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/pipeline/marker_collection.py +0 -0
  511. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/pipeline/pipeline_component_registry.py +0 -0
  512. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/pipeline/pipeline_step_mixin.py +0 -0
  513. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/pipeline/py.typed +0 -0
  514. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/pipeline/tests/test_data_object_dumper.py +0 -0
  515. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/pipeline/tests/test_marker_collection.py +0 -0
  516. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/pipeline/tests/test_pipeline_component_registry.py +0 -0
  517. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
  518. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
  519. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/pipeline/tests/test_workdir_manager.py +0 -0
  520. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/pipeline/utils.py +0 -0
  521. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/pipeline/workdir_manager.py +0 -0
  522. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/__init__.py +0 -0
  523. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/__init__.pyi +0 -0
  524. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/_temporal_filter.py +0 -0
  525. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/_temporal_slicer.py +0 -0
  526. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/confounds/__init__.py +0 -0
  527. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/confounds/__init__.pyi +0 -0
  528. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
  529. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/confounds/py.typed +0 -0
  530. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/py.typed +0 -0
  531. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/smoothing/__init__.py +0 -0
  532. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/smoothing/__init__.pyi +0 -0
  533. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/smoothing/_afni_smoothing.py +0 -0
  534. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/smoothing/_fsl_smoothing.py +0 -0
  535. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/smoothing/_nilearn_smoothing.py +0 -0
  536. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/smoothing/py.typed +0 -0
  537. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/smoothing/smoothing.py +0 -0
  538. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/smoothing/tests/test_smoothing.py +0 -0
  539. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/tests/test_temporal_filter.py +0 -0
  540. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/tests/test_temporal_slicer.py +0 -0
  541. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/warping/__init__.py +0 -0
  542. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/warping/__init__.pyi +0 -0
  543. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/warping/_ants_warper.py +0 -0
  544. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/warping/_fsl_warper.py +0 -0
  545. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/warping/py.typed +0 -0
  546. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/warping/space_warper.py +0 -0
  547. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/preprocess/warping/tests/test_space_warper.py +0 -0
  548. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/py.typed +0 -0
  549. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/stats.py +0 -0
  550. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/storage/__init__.py +0 -0
  551. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/storage/__init__.pyi +0 -0
  552. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/storage/py.typed +0 -0
  553. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/storage/tests/data/collected_h5io_fork.hdf5 +0 -0
  554. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/storage/tests/test_hdf5.py +0 -0
  555. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/storage/tests/test_pandas_base.py +0 -0
  556. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/testing/__init__.py +0 -0
  557. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/testing/__init__.pyi +0 -0
  558. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
  559. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/testing/datagrabbers.py +0 -0
  560. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/testing/py.typed +0 -0
  561. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/testing/registry.py +0 -0
  562. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/testing/tests/test_adhdtesting_datagrabber.py +0 -0
  563. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
  564. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
  565. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
  566. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/testing/tests/test_testing_registry.py +0 -0
  567. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/testing/tests/test_testing_utils.py +0 -0
  568. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/testing/tests/test_uclacnpvbmtesting_datagrabber.py +0 -0
  569. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/testing/utils.py +0 -0
  570. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/tests/test_main.py +0 -0
  571. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/tests/test_stats.py +0 -0
  572. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/typing/__init__.py +0 -0
  573. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/typing/__init__.pyi +0 -0
  574. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/typing/_typing.py +0 -0
  575. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/typing/py.typed +0 -0
  576. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/utils/__init__.py +0 -0
  577. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/utils/__init__.pyi +0 -0
  578. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/utils/_config.py +0 -0
  579. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/utils/_yaml.py +0 -0
  580. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/utils/fs.py +0 -0
  581. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/utils/helpers.py +0 -0
  582. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/utils/logging.py +0 -0
  583. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/utils/py.typed +0 -0
  584. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/utils/singleton.py +0 -0
  585. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/utils/tests/test_config.py +0 -0
  586. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/utils/tests/test_fs.py +0 -0
  587. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/utils/tests/test_helpers.py +0 -0
  588. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer/utils/tests/test_logging.py +0 -0
  589. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer.egg-info/dependency_links.txt +0 -0
  590. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer.egg-info/entry_points.txt +0 -0
  591. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer.egg-info/requires.txt +0 -0
  592. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/junifer.egg-info/top_level.txt +0 -0
  593. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/justfile +0 -0
  594. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/pyproject.toml +0 -0
  595. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/scripts/start.sh +0 -0
  596. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/setup.cfg +0 -0
  597. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/setup.py +0 -0
  598. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/tools/create_aomic1000_example_dataset.py +0 -0
  599. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/tools/create_aomicpiop1_example_dataset.py +0 -0
  600. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/tools/create_aomicpiop2_example_dataset.py +0 -0
  601. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/tools/create_bids_example_dataset.py +0 -0
  602. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/tools/create_bids_example_dataset_sessions.py +0 -0
  603. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
  604. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/tools/create_hcp1200_example_dataset.py +0 -0
  605. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/tox.ini +0 -0
  606. {junifer-0.0.8.dev311 → junifer-0.0.8.dev318}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: junifer
3
- Version: 0.0.8.dev311
3
+ Version: 0.0.8.dev318
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
+ Fix the same features being stored more than once: for each value of the element keys that the data does not depend on (e.g., the VBM features of a subject once per task), when running an element again, and when collecting again (:class:`.SQLiteFeatureStorage` also collected its own output file) by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Fix the metadata of the preprocessors being replaced by the one of the last preprocessor by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Add the ``processed_element`` argument to the ``store_*`` methods of :class:`.BaseFeatureStorage`, the element being processed, so the concrete storages can name the file of each element; custom storages must accept it by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Store the metadata of the preprocessors as a list, in order, in ``meta["preprocess"]`` by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Use ``upsert="ignore"`` by default in :class:`.SQLiteFeatureStorage`, so the elements already stored are not stored again by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Add the version of ``junifer`` to the MD5 of the features, as for the dependencies of the markers and steps, for reproducibility: features computed with different versions of ``junifer`` are different features, so the differences between features (e.g., between datasets) can only come from the data. Running again with a new version stores the features again, with the same name, next to the ones computed with the previous version by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Raise an error in the ``collect`` method of :class:`.HDF5FeatureStorage` and :class:`.SQLiteFeatureStorage` if a file to collect has more than one element, as ``collect`` only compacts the files of single elements by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Add the "Implementation details" page with the elements, the fields of the metadata and the storage, and document the data types with different element keys when extending DataGrabbers by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Store the features for the element with only the keys that the data type depends on (e.g., only ``subject`` for VBM data, when the elements also have ``task``), and skip the elements already stored by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Add :meth:`.BaseDataGrabber.get_type_element_keys` to get the element keys that the data of a data type depends on by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Fix :class:`.DataladHCP1200` listing only the subjects already installed (the subjects are sub-datasets) and not finding the BOLD data of the subjects not installed, by listing all the subjects without searching the files and building the paths of the BOLD data without wildcards by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Raise an error when installing the dataset of a :class:`.PatternDataladDataGrabber` if a pattern searches the files of a sub-dataset, which are only there once the sub-dataset is installed, instead of not finding the elements by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Document that the DataGrabbers with files in datalad sub-datasets must list their elements and build the paths without searching the files by `Fede Raimondo`_
@@ -399,6 +399,17 @@ This approach can be used directly from the YAML, like so:
399
399
  uri: "https://cerebra.fz-juelich.de/junifer/datalad-example-bids-ses.git"
400
400
  rootdir: example_bids_ses
401
401
 
402
+ .. important::
403
+
404
+ The elements are found by searching the files of the dataset, but the files
405
+ of a datalad *sub-dataset* are only there once the sub-dataset is installed.
406
+ If the patterns search the files of a sub-dataset (e.g., a dataset with a
407
+ sub-dataset for each subject), :class:`.PatternDataladDataGrabber` raises
408
+ an error when installing the dataset. These DataGrabbers must implement
409
+ ``get_elements`` without searching the files (e.g., from the names of the
410
+ sub-datasets) and build the paths in the sub-datasets without wildcards,
411
+ as :class:`.DataladHCP1200` does.
412
+
402
413
  .. _extending_datagrabbers_path_expansion:
403
414
 
404
415
  Advanced: Using Unix-like path expansion directives
@@ -478,7 +489,13 @@ need to implement the following methods:
478
489
 
479
490
  - ``get_item``: to get a single item from the dataset.
480
491
  - ``get_elements``: to get the list of all elements present in the dataset
481
- - ``get_element_keys``: to get the keys of the elements in the dataset.
492
+ - ``get_element_keys``: to get the keys of the elements in the dataset. They
493
+ also give the order of the values in each element, which must match the
494
+ parameters of ``get_item``.
495
+
496
+ Optionally, if the data of some data types does not depend on all the keys of
497
+ the element, we can also implement ``get_type_element_keys`` (see
498
+ :ref:`extending_datagrabbers_type_keys`).
482
499
 
483
500
  .. note::
484
501
 
@@ -517,17 +534,15 @@ need to remember that for session *ses-03* there is no BOLD data.
517
534
  from itertools import product
518
535
 
519
536
 
520
- def get_elements(self) -> list[str]:
537
+ def get_elements(self) -> list[tuple[str, str]]:
521
538
  subjects = ["sub-01", "sub-02", "sub-03"]
522
539
  sessions = ["ses-01", "ses-02"]
523
540
 
524
541
  # If we are not working on BOLD data, we can add "ses-03"
525
542
  if "BOLD" not in self.types:
526
543
  sessions.append("ses-03")
527
- elements = []
528
- for subject, element in product(subjects, sessions):
529
- elements.append({"subject": subject, "session": session})
530
- return elements
544
+ # The values of each element, in the order of the element keys
545
+ return list(product(subjects, sessions))
531
546
 
532
547
 
533
548
  And finally, we can implement the ``get_element_keys`` method. This method needs
@@ -540,11 +555,39 @@ method, in the same order.
540
555
  def get_element_keys(self) -> list[str]:
541
556
  return ["subject", "session"]
542
557
 
558
+ .. _extending_datagrabbers_type_keys:
559
+
560
+ Data types with different keys
561
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
562
+
563
+ By default, the data of every data type depends on all the element keys. If
564
+ the data of a data type only depends on some of them, the DataGrabber can say
565
+ so by implementing ``get_type_element_keys``, which returns the element keys
566
+ that the data of a data type depends on. For example, if the ``T1w`` image of
567
+ our dataset was acquired once for each subject, instead of once for each
568
+ session:
569
+
570
+ .. code-block:: python
571
+
572
+ def get_type_element_keys(self, data_type: str) -> list[str]:
573
+ if data_type == "T1w":
574
+ return ["subject"]
575
+ return ["subject", "session"]
576
+
577
+ Then, the ``T1w`` data (and the features computed from it) is stored once for
578
+ each subject, instead of once for each session (see :ref:`internals`). The
579
+ element keys must still be all the keys that the data types to grab depend on:
580
+ if only ``T1w`` was grabbed, ``get_element_keys`` should return
581
+ ``["subject"]`` (and ``get_elements`` and ``get_item`` should only use the
582
+ subject).
583
+
543
584
 
544
585
  So, to summarise, our DataGrabber will look like this:
545
586
 
546
587
  .. code-block:: python
547
588
 
589
+ from itertools import product
590
+
548
591
  from junifer.api.decorators import register_datagrabber
549
592
  from junifer.datagrabber import BaseDataGrabber
550
593
 
@@ -566,18 +609,15 @@ So, to summarise, our DataGrabber will look like this:
566
609
  }
567
610
  return out
568
611
 
569
- def get_elements(self) -> list[str]:
612
+ def get_elements(self) -> list[tuple[str, str]]:
570
613
  subjects = ["sub-01", "sub-02", "sub-03"]
571
614
  sessions = ["ses-01", "ses-02"]
572
615
 
573
616
  # If we are not working on BOLD data, we can add "ses-03"
574
617
  if "BOLD" not in self.types:
575
618
  sessions.append("ses-03")
576
- elements = []
577
- for subject in subjects:
578
- for session in sessions:
579
- elements.append({"subject": subject, "session": session})
580
- return elements
619
+ # The values of each element, in the order of the element keys
620
+ return list(product(subjects, sessions))
581
621
 
582
622
  def get_element_keys(self) -> list[str]:
583
623
  return ["subject", "session"]
@@ -33,6 +33,7 @@ enabling others to extend it easily.
33
33
  help
34
34
  contribution
35
35
  maintaining
36
+ internals
36
37
  faq
37
38
  whats_new
38
39
 
@@ -0,0 +1,169 @@
1
+ .. include:: links.inc
2
+
3
+ .. _internals:
4
+
5
+ Implementation details
6
+ ======================
7
+
8
+ This section describes some of the assumptions and technical details of
9
+ ``junifer``, for developers. See the docstrings of the mentioned functions and
10
+ classes for more details.
11
+
12
+ Elements
13
+ --------
14
+
15
+ * The keys of the elements of a :class:`.PatternDataGrabber`
16
+ (:meth:`.PatternDataGrabber.get_element_keys`) are the replacements used by
17
+ the patterns (including the nested ones) of the data types to grab, in the
18
+ order of ``replacements``.
19
+ * :meth:`.PatternDataGrabber.get_elements` finds the elements of each pattern
20
+ in the files (translating the Unix-like path expansion directives of the
21
+ patterns to a regular expression) and joins the elements of the patterns on
22
+ their common keys (``_join_elements``), so an element is available if it has
23
+ the files of all the data types, regardless of their order.
24
+ * The values of the replacements to grab (:meth:`.PatternDataGrabber.get_replacement_values`)
25
+ are given by ``replacements`` (as a dictionary) or by the fields linked to
26
+ the replacements in ``_REPLACEMENT_FIELDS``, but not both. They filter the
27
+ elements found in the files, and grabbing an element with other values
28
+ raises an error (``_check_element``, called by
29
+ ``BaseDataGrabber.__getitem__``).
30
+ * :meth:`.BaseDataGrabber.select_elements` selects the elements to run: the
31
+ selectors must have the same number of values. If they have a value for
32
+ each element key, they are the elements (the dataset is not searched),
33
+ otherwise they select the elements of the dataset that have their values.
34
+ * :class:`.MultipleDataGrabber` joins the elements of its DataGrabbers on
35
+ their common keys, and grabs an element with each DataGrabber using its
36
+ keys. Each data type is grabbed by one DataGrabber, except for the nested
37
+ data types grabbed by a DataGrabber without the main file of the data type,
38
+ which replace the ones of the other DataGrabber.
39
+
40
+ Metadata
41
+ --------
42
+
43
+ The ``meta`` of each data type in the :ref:`data object <data_object>` is
44
+ built by the steps of the pipeline. Each step adds an entry with its class and
45
+ parameters (``UpdateMetaMixin.update_meta``) and its dependencies:
46
+
47
+ .. list-table::
48
+ :widths: auto
49
+ :header-rows: 1
50
+
51
+ * - Key
52
+ - Added by
53
+ - Content
54
+ - In the MD5
55
+ * - ``datagrabber``
56
+ - DataGrabber
57
+ - The class and parameters of the DataGrabber, e.g., ``types``,
58
+ ``patterns`` and ``replacements``. For the DataLad-based ones, also the
59
+ dataset ID and commit, and whether the dataset has local changes
60
+ (``datalad_id``, ``datalad_commit_id`` and ``datalad_dirty``), so
61
+ different versions of the dataset give different hashes. For :class:`.MultipleDataGrabber`, also
62
+ ``datagrabbers`` with the entries of its DataGrabbers.
63
+ - Yes, except ``datadir`` for the DataLad-based DataGrabbers (which is
64
+ removed from the stored metadata too)
65
+ * - ``element``
66
+ - DataGrabber
67
+ - The element being processed (see below).
68
+ - No
69
+ * - ``_element_keys``
70
+ - DataGrabber
71
+ - The keys of the element that the data depends on (see below).
72
+ - Yes
73
+ * - ``datareader``
74
+ - DataReader
75
+ - The class and parameters of the DataReader.
76
+ - Yes
77
+ * - ``preprocess``
78
+ - Preprocessors
79
+ - The list of the classes and parameters of the preprocessors that
80
+ processed the data, in order.
81
+ - Yes
82
+ * - ``type``
83
+ - Marker
84
+ - The data type, e.g., ``BOLD``.
85
+ - Yes
86
+ * - ``marker``
87
+ - Marker
88
+ - The class and parameters of the marker, with ``name`` as the name of
89
+ the marker followed by the name of the feature, e.g., ``mean_mean``.
90
+ - Yes
91
+ * - ``dependencies``
92
+ - All the steps
93
+ - The names of the dependencies of the steps (their ``_DEPENDENCIES``).
94
+ When storing, they are replaced by their versions, with the version of
95
+ ``junifer``, e.g., ``{'junifer': '0.0.8', 'nilearn': '0.14.1'}``.
96
+ - Yes (the versions)
97
+ * - ``name``
98
+ - Storage (``process_meta``)
99
+ - The name of the feature: the data type and the marker name, e.g.,
100
+ ``BOLD_mean_mean``.
101
+ - Yes
102
+
103
+ The DataGrabber adds two keys about the element to the ``meta`` of each data
104
+ type (``BaseDataGrabber.__getitem__``):
105
+
106
+ * ``element``: the element being processed, with all its keys. It is the same
107
+ for all the data types of the element.
108
+ * ``_element_keys``: the keys of the element that the data of the data type
109
+ depends on (:meth:`.BaseDataGrabber.get_type_element_keys`).
110
+ For a :class:`.PatternDataGrabber`, the replacements in the patterns of the
111
+ data type.
112
+
113
+ For example, with ``BOLD`` data for each subject and task, and ``VBM_GM`` data
114
+ for each subject, the element ``(sub-01, rest)`` gives:
115
+
116
+ .. code-block::
117
+
118
+ {'BOLD': {'meta': {'_element_keys': ['subject', 'task'],
119
+ 'element': {'subject': 'sub-01', 'task': 'rest'},
120
+ ...},
121
+ ...},
122
+ 'VBM_GM': {'meta': {'_element_keys': ['subject'],
123
+ 'element': {'subject': 'sub-01', 'task': 'rest'},
124
+ ...},
125
+ ...}}
126
+
127
+ When storing the output of a marker, ``process_meta`` (in ``junifer.storage.utils``):
128
+
129
+ * Removes ``element`` from the metadata and returns the element of the data,
130
+ with only the keys in ``_element_keys`` (all the keys of ``element`` if it
131
+ is not set).
132
+ * Computes the MD5 hash of the metadata, which identifies the feature. It
133
+ includes ``_element_keys`` and the versions of the dependencies of the
134
+ steps and of ``junifer``, but not ``element``: the data of all the elements
135
+ of a feature have the same hash, and the features computed with different
136
+ versions of ``junifer`` (or of the dependencies) have different hashes.
137
+ This is by design, for reproducibility: the differences between features
138
+ with the same hash can only come from the data, not from different
139
+ versions of the algorithms. A feature computed again with another version
140
+ is a new feature, with the same name, so it must be read by its MD5.
141
+
142
+ Storage
143
+ -------
144
+
145
+ * The data is stored for the element of the data (the element with only the
146
+ keys in ``_element_keys``), so the data that does not depend on a key (e.g.,
147
+ the ``VBM_GM`` data for the tasks of a subject) is stored once.
148
+ * :meth:`.BaseFeatureStorage.store` passes the element being processed to
149
+ the methods storing the metadata and the data (``store_metadata``,
150
+ ``store_vector``, etc.) as ``processed_element``, besides the element of the
151
+ data (``element``). The storages that write a file for each element (with
152
+ ``single_output=False``) name it after the element being processed, e.g.,
153
+ ``element_sub-01_rest_out.hdf5``, so that the processes running different
154
+ elements in parallel never write to the same file. The storages without
155
+ files (e.g., databases) can ignore it, but their methods must accept it.
156
+ * The data already stored for an element is not stored again (the storages
157
+ skip the existing elements, :class:`.SQLiteFeatureStorage` with
158
+ ``upsert="ignore"`` by default).
159
+ * ``collect`` only collects the files of single elements (one element for
160
+ each feature, as written for each element with ``single_output=False``),
161
+ and raises an error otherwise. The data of an element can be in the files
162
+ of several elements being processed (e.g., the ``VBM_GM`` data of
163
+ ``sub-01`` in the files of each of its tasks), and it is only collected
164
+ once.
165
+ * :meth:`.HDF5FeatureStorage.collect` works in two passes: the first one reads
166
+ the metadata and the elements of each file, to know which files to collect
167
+ for each feature (one for each element), and the second one collects the
168
+ data of each feature from these files, in chunks. Each file is read once in
169
+ the first pass, and once for each of its features in the second one.
@@ -30,6 +30,14 @@ your own ``Storage`` by providing a concrete implementation of
30
30
  :class:`.BaseFeatureStorage` or open an issue on `junifer Github`_ and we can
31
31
  help you out.
32
32
 
33
+ The data of each element is stored only once: running the same elements again
34
+ with the same configuration (e.g., after trying a few elements and then running
35
+ all of them), or collecting the files of the elements again, does not change
36
+ the data already stored, which is not stored again. The data that does not
37
+ depend on all the keys of the element (e.g., the ``VBM_GM`` data of a subject,
38
+ for elements with the subject and the task) is stored once for its keys (see
39
+ :ref:`internals`).
40
+
33
41
  .. _storage_types:
34
42
 
35
43
  Storage Types
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.0.8.dev311'
22
- __version_tuple__ = version_tuple = (0, 0, 8, 'dev311')
21
+ __version__ = version = '0.0.8.dev318'
22
+ __version_tuple__ = version_tuple = (0, 0, 8, 'dev318')
23
23
 
24
- __commit_id__ = commit_id = 'gf37e90687'
24
+ __commit_id__ = commit_id = 'gd4a9dcd3a'
@@ -9,23 +9,30 @@ import logging
9
9
  import sys
10
10
  import tempfile
11
11
  from contextlib import AbstractContextManager, nullcontext
12
+ from copy import deepcopy
12
13
  from pathlib import Path
13
- from typing import Any
14
+ from typing import Any, ClassVar
14
15
 
16
+ import nibabel as nib
17
+ import numpy as np
15
18
  import pytest
16
19
  from nibabel.filebasedimages import ImageFileError
17
20
  from ruamel.yaml import YAML
18
21
 
19
22
  import junifer.testing.registry # noqa: F401
20
23
  from junifer.api import collect, list_elements, parse_yaml, queue, reset, run
21
- from junifer.datagrabber import PatternDataGrabber
24
+ from junifer.api.decorators import register_marker
25
+ from junifer.datagrabber import DataType, PatternDataGrabber
22
26
  from junifer.datagrabber.base import BaseDataGrabber
27
+ from junifer.markers import BaseMarker
23
28
  from junifer.pipeline import (
24
29
  MarkerCollection,
25
30
  PipelineComponentRegistry,
26
31
  WorkDirManager,
27
32
  )
28
- from junifer.typing import Elements
33
+ from junifer.storage import StorageType
34
+ from junifer.storage.base import BaseFeatureStorage
35
+ from junifer.typing import Dependencies, Elements, MarkerInOutMappings
29
36
 
30
37
 
31
38
  pytestmark = pytest.mark.external
@@ -1460,3 +1467,119 @@ def _run_selectors(
1460
1467
  elements=elements,
1461
1468
  )
1462
1469
  return n_searches
1470
+
1471
+
1472
+ @register_marker
1473
+ class _ImageMean(BaseMarker):
1474
+ """Marker storing the mean of an image, for BOLD and VBM_GM."""
1475
+
1476
+ _DEPENDENCIES: ClassVar[Dependencies] = {"numpy"}
1477
+ _MARKER_INOUT_MAPPINGS: ClassVar[MarkerInOutMappings] = {
1478
+ DataType.BOLD: {"mean": StorageType.Vector},
1479
+ DataType.VBM_GM: {"mean": StorageType.Vector},
1480
+ }
1481
+
1482
+ def compute(self, input: dict, extra_input: dict | None = None) -> dict:
1483
+ data = np.asarray(input["data"].dataobj, dtype=float)
1484
+ return {
1485
+ "mean": {"data": np.array([[data.mean()]]), "col_names": ["mean"]}
1486
+ }
1487
+
1488
+
1489
+ @pytest.mark.parametrize("single_output", [True, False])
1490
+ @pytest.mark.parametrize(
1491
+ "storage_kind", ["HDF5FeatureStorage", "SQLiteFeatureStorage"]
1492
+ )
1493
+ def test_run_data_types_element_keys(
1494
+ tmp_path: Path, storage_kind: str, single_output: bool
1495
+ ) -> None:
1496
+ """Test run function storing data types with different element keys.
1497
+
1498
+ The BOLD data depends on the subject and the task, and the VBM data only
1499
+ on the subject, so it is stored once for each subject. The elements are
1500
+ run twice, as when trying a few elements and then running all of them.
1501
+
1502
+ Parameters
1503
+ ----------
1504
+ tmp_path : pathlib.Path
1505
+ The path to the test directory.
1506
+ storage_kind : str
1507
+ The parametrized storage.
1508
+ single_output : bool
1509
+ The parametrized storage in a single file.
1510
+
1511
+ """
1512
+ datadir = tmp_path / "data"
1513
+ # BOLD: 10 * subject + task (1: rest, 2: movie); VBM: subject
1514
+ for i, subject in enumerate(("sub-01", "sub-02"), start=1):
1515
+ (datadir / subject).mkdir(parents=True)
1516
+ nib.save(
1517
+ nib.Nifti1Image(np.full((2, 2, 2), float(i)), np.eye(4)),
1518
+ datadir / subject / f"{subject}_GM.nii",
1519
+ )
1520
+ for j, task in enumerate(("rest", "movie"), start=1):
1521
+ nib.save(
1522
+ nib.Nifti1Image(
1523
+ np.full((2, 2, 2, 3), 10.0 * i + j), np.eye(4)
1524
+ ),
1525
+ datadir / subject / f"{subject}_task-{task}_bold.nii",
1526
+ )
1527
+ datagrabber = {
1528
+ "kind": "PatternDataGrabber",
1529
+ "datadir": str(datadir),
1530
+ "types": ["BOLD", "VBM_GM"],
1531
+ "patterns": {
1532
+ "BOLD": {
1533
+ "pattern": "{subject}/{subject}_task-{task}_bold.nii",
1534
+ "space": "native",
1535
+ },
1536
+ "VBM_GM": {
1537
+ "pattern": "{subject}/{subject}_GM.nii",
1538
+ "space": "native",
1539
+ },
1540
+ },
1541
+ "replacements": ["subject", "task"],
1542
+ }
1543
+ uri = tmp_path / "out" / "features.db"
1544
+ storage = {
1545
+ "kind": storage_kind,
1546
+ "uri": str(uri),
1547
+ "single_output": single_output,
1548
+ }
1549
+ # A few elements, and then all of them
1550
+ for elements in ([("sub-01", "rest")], None):
1551
+ run(
1552
+ workdir=tmp_path / "workdir",
1553
+ datagrabber=deepcopy(datagrabber),
1554
+ markers=[{"kind": "_ImageMean", "name": "mean"}],
1555
+ storage=deepcopy(storage),
1556
+ elements=elements,
1557
+ )
1558
+ if not single_output:
1559
+ collect(deepcopy(storage))
1560
+
1561
+ reader = PipelineComponentRegistry().build_component_instance(
1562
+ step="storage",
1563
+ name=storage_kind,
1564
+ baseclass=BaseFeatureStorage,
1565
+ init_params={"uri": uri},
1566
+ )
1567
+ features = {
1568
+ meta["name"]: md5 for md5, meta in reader.list_features().items()
1569
+ }
1570
+ bold = reader.read_df(feature_md5=features["BOLD_mean_mean"])
1571
+ vbm = reader.read_df(feature_md5=features["VBM_GM_mean_mean"])
1572
+ assert sorted(bold.index) == [
1573
+ ("sub-01", "movie"),
1574
+ ("sub-01", "rest"),
1575
+ ("sub-02", "movie"),
1576
+ ("sub-02", "rest"),
1577
+ ]
1578
+ assert sorted(bold["mean"]) == [11, 12, 21, 22]
1579
+ # Once for each subject
1580
+ assert vbm.index.names == ["subject"]
1581
+ assert sorted(vbm.index.get_level_values("subject")) == [
1582
+ "sub-01",
1583
+ "sub-02",
1584
+ ]
1585
+ assert sorted(vbm["mean"]) == [1, 2]
@@ -183,18 +183,39 @@ class BaseDataGrabber(BaseModel, ABC, UpdateMetaMixin):
183
183
  self._check_element(named_element)
184
184
  # Fetch element
185
185
  out = self.get_item(**named_element)
186
- # Update metadata
187
- for _, t_val in out.items():
186
+ # Update metadata: the element being processed and the keys of the
187
+ # element that the data of each data type depends on
188
+ for t_type, t_val in out.items():
188
189
  self.update_meta(t_val, "datagrabber")
190
+ element_keys = self.get_type_element_keys(t_type)
189
191
  # Conditional for list dtype vals like Warp
190
- if isinstance(t_val, list):
191
- for entry in t_val:
192
- entry["meta"]["element"] = named_element
193
- else:
194
- t_val["meta"]["element"] = named_element
192
+ for entry in t_val if isinstance(t_val, list) else [t_val]:
193
+ entry["meta"]["element"] = named_element
194
+ entry["meta"]["_element_keys"] = element_keys
195
195
 
196
196
  return out
197
197
 
198
+ def get_type_element_keys(self, data_type: str) -> list[str]:
199
+ """Get the element keys that the data of a data type depends on.
200
+
201
+ The element keys (see :meth:`.get_element_keys`) are the keys that
202
+ the data types to grab depend on.
203
+
204
+ Parameters
205
+ ----------
206
+ data_type : str
207
+ The data type.
208
+
209
+ Returns
210
+ -------
211
+ list of str
212
+ The element keys, all of them unless a subclass knows which ones
213
+ the data type depends on (e.g., only the subject for data that is
214
+ the same for all the tasks of a subject).
215
+
216
+ """
217
+ return self.get_element_keys()
218
+
198
219
  def _check_element(self, element: dict) -> None:
199
220
  """Check the element can be grabbed.
200
221
 
@@ -5,12 +5,14 @@
5
5
  # Synchon Mandal <s.mandal@fz-juelich.de>
6
6
  # License: AGPL
7
7
 
8
+ from itertools import product
8
9
  from pathlib import Path
9
10
  from typing import Annotated, Literal
10
11
 
11
12
  from pydantic import AnyUrl, BeforeValidator
12
13
 
13
14
  from ...api.decorators import register_datagrabber
15
+ from ...typing import Elements
14
16
  from ...utils import ensure_list
15
17
  from ..base import DataType
16
18
  from ..datalad_base import DataladDataGrabber
@@ -67,3 +69,29 @@ class DataladHCP1200(DataladDataGrabber, HCP1200):
67
69
  def skip_file_check(self) -> bool:
68
70
  """Skip file check existence."""
69
71
  return True
72
+
73
+ def get_elements(self) -> Elements:
74
+ """Implement fetching list of elements in the dataset.
75
+
76
+ The subjects are sub-datasets, whose files are only there once they
77
+ are installed, so the files are not searched: the elements are all
78
+ the subjects (the directories of the dataset) with the tasks and
79
+ phase encodings to grab, even if some of them have no data.
80
+
81
+ Returns
82
+ -------
83
+ list
84
+ The list of elements that can be grabbed in the dataset.
85
+
86
+ """
87
+ subjects = sorted(
88
+ x.name
89
+ for x in self.fulldir.iterdir()
90
+ if x.is_dir() and not x.name.startswith(".")
91
+ )
92
+ values = {"subject": subjects, **self.get_replacement_values()}
93
+ element_keys = self.get_element_keys()
94
+ elements = list(product(*(values[k] for k in element_keys)))
95
+ if len(element_keys) == 1:
96
+ return [element[0] for element in elements]
97
+ return elements
@@ -162,3 +162,29 @@ class HCP1200(PatternDataGrabber):
162
162
  "pattern"
163
163
  ].replace("{suffix}", suffix)
164
164
  super().validate_datagrabber_params()
165
+
166
+ def _replace_patterns_glob(self, element: dict, pattern: str) -> str:
167
+ """Replace ``pattern`` with the ``element`` so it can be globbed.
168
+
169
+ The BOLD data of the resting-state tasks is in ``rfMRI_*`` and of the
170
+ other tasks in ``tfMRI_*``, so the path of an element is built
171
+ without searching the files, which are in sub-datasets in
172
+ :class:`.DataladHCP1200`.
173
+
174
+ Parameters
175
+ ----------
176
+ element : dict
177
+ The element to be used in the replacement.
178
+ pattern : str
179
+ The pattern to be replaced.
180
+
181
+ Returns
182
+ -------
183
+ str
184
+ The pattern with the element replaced.
185
+
186
+ """
187
+ if "task" in element:
188
+ prefix = "rfMRI" if "REST" in element["task"] else "tfMRI"
189
+ pattern = pattern.replace("?fMRI_", f"{prefix}_")
190
+ return super()._replace_patterns_glob(element, pattern)