junifer 0.0.8.dev306__tar.gz → 0.0.8.dev314__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 (605) hide show
  1. {junifer-0.0.8.dev306/junifer.egg-info → junifer-0.0.8.dev314}/PKG-INFO +1 -1
  2. junifer-0.0.8.dev314/docs/changes/newsfragments/524.bugfix +1 -0
  3. junifer-0.0.8.dev314/docs/changes/newsfragments/524.bugfix.1 +1 -0
  4. junifer-0.0.8.dev314/docs/changes/newsfragments/524.change +1 -0
  5. junifer-0.0.8.dev314/docs/changes/newsfragments/524.change.1 +1 -0
  6. junifer-0.0.8.dev314/docs/changes/newsfragments/524.change.2 +1 -0
  7. junifer-0.0.8.dev314/docs/changes/newsfragments/524.doc +1 -0
  8. junifer-0.0.8.dev314/docs/changes/newsfragments/524.enh +1 -0
  9. junifer-0.0.8.dev314/docs/changes/newsfragments/524.feature +1 -0
  10. junifer-0.0.8.dev314/docs/changes/newsfragments/524.feature.1 +1 -0
  11. junifer-0.0.8.dev314/docs/changes/newsfragments/525.bugfix +1 -0
  12. junifer-0.0.8.dev314/docs/changes/newsfragments/525.bugfix.1 +1 -0
  13. junifer-0.0.8.dev314/docs/changes/newsfragments/525.change +1 -0
  14. junifer-0.0.8.dev314/docs/changes/newsfragments/525.change.1 +1 -0
  15. junifer-0.0.8.dev314/docs/changes/newsfragments/525.change.2 +1 -0
  16. junifer-0.0.8.dev314/docs/changes/newsfragments/525.change.3 +1 -0
  17. junifer-0.0.8.dev314/docs/changes/newsfragments/525.change.4 +1 -0
  18. junifer-0.0.8.dev314/docs/changes/newsfragments/525.doc +1 -0
  19. junifer-0.0.8.dev314/docs/changes/newsfragments/525.enh +1 -0
  20. junifer-0.0.8.dev314/docs/changes/newsfragments/525.feature +1 -0
  21. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/extending/datagrabber.rst +166 -16
  22. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/index.rst +1 -0
  23. junifer-0.0.8.dev314/docs/internals.rst +169 -0
  24. junifer-0.0.8.dev314/docs/understanding/datagrabber.rst +302 -0
  25. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/understanding/storage.rst +8 -0
  26. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/using/codeless.rst +14 -0
  27. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/using/queueing.rst +4 -2
  28. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/using/running.rst +36 -1
  29. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/_version.py +3 -3
  30. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/functions.py +22 -18
  31. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/tests/test_functions.py +390 -14
  32. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/piop1.py +7 -54
  33. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/piop2.py +7 -41
  34. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/tests/test_piop1.py +5 -0
  35. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/tests/test_piop2.py +5 -0
  36. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/base.py +176 -37
  37. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/dmcc13_benchmark.py +8 -105
  38. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/hcp1200/hcp1200.py +8 -56
  39. junifer-0.0.8.dev314/junifer/datagrabber/multiple.py +323 -0
  40. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/pattern.py +314 -102
  41. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/tests/test_base.py +13 -0
  42. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +8 -2
  43. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/tests/test_multiple.py +259 -4
  44. junifer-0.0.8.dev314/junifer/datagrabber/tests/test_pattern.py +859 -0
  45. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/tests/test_pattern_datalad.py +6 -3
  46. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/pipeline/update_meta_mixin.py +9 -1
  47. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/base.py +3 -2
  48. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +2 -2
  49. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/tests/test_preprocess_base.py +14 -4
  50. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/storage/base.py +62 -6
  51. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/storage/hdf5.py +104 -8
  52. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/storage/pandas_base.py +32 -2
  53. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/storage/sqlite.py +62 -10
  54. junifer-0.0.8.dev314/junifer/storage/tests/test_repeated_storage.py +293 -0
  55. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/storage/tests/test_sqlite.py +2 -2
  56. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/storage/tests/test_storage_base.py +4 -2
  57. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/storage/tests/test_utils.py +67 -0
  58. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/storage/utils.py +27 -7
  59. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314/junifer.egg-info}/PKG-INFO +1 -1
  60. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer.egg-info/SOURCES.txt +21 -0
  61. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer.egg-info/scm_file_list.json +21 -0
  62. junifer-0.0.8.dev314/junifer.egg-info/scm_version.json +8 -0
  63. junifer-0.0.8.dev306/docs/understanding/datagrabber.rst +0 -65
  64. junifer-0.0.8.dev306/junifer/datagrabber/multiple.py +0 -217
  65. junifer-0.0.8.dev306/junifer/datagrabber/tests/test_pattern.py +0 -378
  66. junifer-0.0.8.dev306/junifer.egg-info/scm_version.json +0 -8
  67. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.dockerignore +0 -0
  68. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  69. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  70. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
  71. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
  72. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  73. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
  74. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.github/dependabot.yml +0 -0
  75. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.github/pull_request_template.md +0 -0
  76. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.github/workflows/check-stale.yml +0 -0
  77. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.github/workflows/ci.yml +0 -0
  78. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.github/workflows/docker-publish.yml +0 -0
  79. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.github/workflows/docs-preview.yml +0 -0
  80. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.github/workflows/docs.yml +0 -0
  81. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.github/workflows/lint.yml +0 -0
  82. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.github/workflows/publish.yml +0 -0
  83. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.gitignore +0 -0
  84. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.gitmodules +0 -0
  85. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.pre-commit-config.yaml +0 -0
  86. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/.python-version +0 -0
  87. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/AUTHORS.rst +0 -0
  88. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/Dockerfile +0 -0
  89. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/Dockerfile-ci +0 -0
  90. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/LICENSE.md +0 -0
  91. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/README.md +0 -0
  92. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/codecov.yml +0 -0
  93. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/conda-env.yml +0 -0
  94. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/Makefile +0 -0
  95. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/_static/css/custom.css +0 -0
  96. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/_static/css/version_selector.css +0 -0
  97. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/_static/js/custom.js +0 -0
  98. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/_templates/versions.html +0 -0
  99. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/api/api.rst +0 -0
  100. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/api/cli.rst +0 -0
  101. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/api/configs.rst +0 -0
  102. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/api/data.rst +0 -0
  103. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/api/datagrabbers.rst +0 -0
  104. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/api/datareaders.rst +0 -0
  105. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/api/index.rst +0 -0
  106. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/api/markers.rst +0 -0
  107. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/api/nilearn.rst +0 -0
  108. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/api/onthefly.rst +0 -0
  109. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/api/pipeline.rst +0 -0
  110. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/api/preprocessing.rst +0 -0
  111. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/api/stats.rst +0 -0
  112. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/api/storage.rst +0 -0
  113. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/api/testing.rst +0 -0
  114. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/api/utils.rst +0 -0
  115. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/builtin.rst +0 -0
  116. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/contributors.inc +0 -0
  117. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/.gitignore +0 -0
  118. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/239.enh +0 -0
  119. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/364.doc +0 -0
  120. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/364.enh +0 -0
  121. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/364.feature +0 -0
  122. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/474.misc +0 -0
  123. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/482.bugfix +0 -0
  124. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/492.bugfix +0 -0
  125. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/499.enh +0 -0
  126. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/502.bugfix +0 -0
  127. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/503.enh +0 -0
  128. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/504.bugfix +0 -0
  129. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/504.misc +0 -0
  130. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/509.enh +0 -0
  131. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/510.bugfix +0 -0
  132. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/511.bugfix +0 -0
  133. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/511.bugfix.1 +0 -0
  134. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/511.change +0 -0
  135. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/511.enh +0 -0
  136. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/511.enh.1 +0 -0
  137. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/511.feature +0 -0
  138. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/511.misc +0 -0
  139. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/511.misc.1 +0 -0
  140. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/513.doc +0 -0
  141. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/513.misc +0 -0
  142. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/514.bugfix +0 -0
  143. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/514.bugfix.1 +0 -0
  144. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/514.enh +0 -0
  145. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/515.doc +0 -0
  146. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/515.enh +0 -0
  147. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/515.enh.1 +0 -0
  148. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/515.misc +0 -0
  149. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/515.misc.1 +0 -0
  150. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/516.bugfix +0 -0
  151. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/516.bugfix.1 +0 -0
  152. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/516.bugfix.2 +0 -0
  153. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/516.change +0 -0
  154. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/516.change.1 +0 -0
  155. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/516.misc +0 -0
  156. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.bugfix +0 -0
  157. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.bugfix.1 +0 -0
  158. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.bugfix.2 +0 -0
  159. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.bugfix.3 +0 -0
  160. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.bugfix.4 +0 -0
  161. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.bugfix.5 +0 -0
  162. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.bugfix.6 +0 -0
  163. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.change +0 -0
  164. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.doc +0 -0
  165. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.misc +0 -0
  166. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.misc.1 +0 -0
  167. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.misc.2 +0 -0
  168. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.misc.3 +0 -0
  169. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/520.removal +0 -0
  170. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/521.bugfix +0 -0
  171. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/522.bugfix +0 -0
  172. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/522.enh +0 -0
  173. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/changes/newsfragments/523.misc +0 -0
  174. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/conf.py +0 -0
  175. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/contribution.rst +0 -0
  176. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/extending/confounds_format.rst +0 -0
  177. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/extending/coordinates.rst +0 -0
  178. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/extending/data_dump_asset.rst +0 -0
  179. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/extending/data_registries.rst +0 -0
  180. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/extending/data_types.rst +0 -0
  181. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/extending/dependencies.rst +0 -0
  182. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/extending/extension.rst +0 -0
  183. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/extending/index.rst +0 -0
  184. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/extending/logging.rst +0 -0
  185. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/extending/maps.rst +0 -0
  186. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/extending/marker.rst +0 -0
  187. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/extending/masks.rst +0 -0
  188. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/extending/parcellations.rst +0 -0
  189. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/extending/plugins.rst +0 -0
  190. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/extending/preprocessor.rst +0 -0
  191. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/faq.rst +0 -0
  192. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/help.rst +0 -0
  193. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/images/junifer_logo.png +0 -0
  194. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/installation.rst +0 -0
  195. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/links.inc +0 -0
  196. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/maintaining.rst +0 -0
  197. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/poly.py +0 -0
  198. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/poly_files/patches/version_banner.html +0 -0
  199. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/poly_files/patches/versions.html +0 -0
  200. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/poly_files/templates/index.html +0 -0
  201. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/starting.rst +0 -0
  202. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/understanding/data.rst +0 -0
  203. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/understanding/datareader.rst +0 -0
  204. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/understanding/index.rst +0 -0
  205. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/understanding/marker.rst +0 -0
  206. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/understanding/pipeline.rst +0 -0
  207. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/understanding/preprocess.rst +0 -0
  208. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/using/configuring.rst +0 -0
  209. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/using/dumping.rst +0 -0
  210. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/using/index.rst +0 -0
  211. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/using/masks.rst +0 -0
  212. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/docs/whats_new.rst +0 -0
  213. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/examples/README.rst +0 -0
  214. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/examples/norun_hcpfc_pearson.py +0 -0
  215. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/examples/norun_ukbvm_gmd.py +0 -0
  216. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/examples/run_compute_parcel_mean.py +0 -0
  217. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/examples/run_datagrabber_bids_datalad.py +0 -0
  218. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/examples/run_ets_rss_marker.py +0 -0
  219. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/examples/run_junifer_julearn.py +0 -0
  220. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/examples/run_run_gmd_mean.py +0 -0
  221. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/examples/yamls/gmd_mean.yaml +0 -0
  222. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
  223. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/examples/yamls/partly_cloudy_agg_mean_tian.yml +0 -0
  224. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/examples/yamls/ukb_gmd_mean.yaml +0 -0
  225. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/ignore_words.txt +0 -0
  226. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/__init__.py +0 -0
  227. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/__init__.pyi +0 -0
  228. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/__init__.py +0 -0
  229. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/__init__.pyi +0 -0
  230. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/decorators.py +0 -0
  231. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/py.typed +0 -0
  232. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/queue_context/__init__.py +0 -0
  233. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/queue_context/__init__.pyi +0 -0
  234. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/queue_context/gnu_parallel_local_adapter.py +0 -0
  235. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/queue_context/htcondor_adapter.py +0 -0
  236. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/queue_context/py.typed +0 -0
  237. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/queue_context/queue_context_adapter.py +0 -0
  238. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +0 -0
  239. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/queue_context/tests/test_htcondor_adapter.py +0 -0
  240. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
  241. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/afni/3dRSFC +0 -0
  242. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/afni/3dReHo +0 -0
  243. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/afni/afni +0 -0
  244. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/afni/run_afni_docker.sh +0 -0
  245. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/ants/ResampleImage +0 -0
  246. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/ants/antsApplyTransforms +0 -0
  247. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
  248. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/ants/run_ants_docker.sh +0 -0
  249. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/freesurfer/mri_binarize +0 -0
  250. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/freesurfer/mri_mc +0 -0
  251. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/freesurfer/mri_pretess +0 -0
  252. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/freesurfer/mris_convert +0 -0
  253. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/freesurfer/run_freesurfer_docker.sh +0 -0
  254. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/fsl/applywarp +0 -0
  255. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/fsl/flirt +0 -0
  256. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/fsl/img2imgcoord +0 -0
  257. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
  258. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/fsl/std2imgcoord +0 -0
  259. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/run_conda.bash +0 -0
  260. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/run_conda.zsh +0 -0
  261. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/run_venv.bash +0 -0
  262. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/res/run_venv.zsh +0 -0
  263. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/api/tests/test_decorators.py +0 -0
  264. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/cli/__init__.py +0 -0
  265. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/cli/__init__.pyi +0 -0
  266. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/cli/cli.py +0 -0
  267. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/cli/parser.py +0 -0
  268. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/cli/py.typed +0 -0
  269. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/cli/tests/data/gmd_mean.yaml +0 -0
  270. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/cli/tests/data/gmd_mean_htcondor.yaml +0 -0
  271. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +0 -0
  272. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/cli/tests/test_cli.py +0 -0
  273. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/cli/tests/test_cli_utils.py +0 -0
  274. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/cli/utils.py +0 -0
  275. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/__init__.py +0 -0
  276. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/__init__.pyi +0 -0
  277. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/juseless/__init__.py +0 -0
  278. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/juseless/__init__.pyi +0 -0
  279. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
  280. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/__init__.pyi +0 -0
  281. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
  282. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
  283. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
  284. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/py.typed +0 -0
  285. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
  286. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
  287. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
  288. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
  289. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
  290. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
  291. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
  292. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/juseless/py.typed +0 -0
  293. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/configs/py.typed +0 -0
  294. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/conftest.py +0 -0
  295. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/__init__.py +0 -0
  296. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/__init__.pyi +0 -0
  297. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/_dispatch.py +0 -0
  298. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/coordinates/__init__.py +0 -0
  299. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/coordinates/__init__.pyi +0 -0
  300. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/coordinates/_ants_coordinates_warper.py +0 -0
  301. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/coordinates/_coordinates.py +0 -0
  302. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/coordinates/_fsl_coordinates_warper.py +0 -0
  303. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/coordinates/tests/test_coordinates.py +0 -0
  304. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/coordinates/tests/test_coordinates_names.py +0 -0
  305. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/maps/__init__.py +0 -0
  306. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/maps/__init__.pyi +0 -0
  307. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/maps/_ants_maps_warper.py +0 -0
  308. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/maps/_fsl_maps_warper.py +0 -0
  309. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/maps/_maps.py +0 -0
  310. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/maps/tests/test_maps.py +0 -0
  311. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/masks/__init__.py +0 -0
  312. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/masks/__init__.pyi +0 -0
  313. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/masks/_ants_mask_warper.py +0 -0
  314. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/masks/_fsl_mask_warper.py +0 -0
  315. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/masks/_masks.py +0 -0
  316. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/masks/tests/test_masks.py +0 -0
  317. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/parcellations/__init__.py +0 -0
  318. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/parcellations/__init__.pyi +0 -0
  319. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/parcellations/_ants_parcellation_warper.py +0 -0
  320. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/parcellations/_fsl_parcellation_warper.py +0 -0
  321. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/parcellations/_parcellations.py +0 -0
  322. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/parcellations/tests/test_parcellations.py +0 -0
  323. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/pipeline_data_registry_base.py +0 -0
  324. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/py.typed +0 -0
  325. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/template_spaces.py +0 -0
  326. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/tests/test_data_utils.py +0 -0
  327. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/tests/test_dispatch.py +0 -0
  328. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/tests/test_template_spaces.py +0 -0
  329. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/data/utils.py +0 -0
  330. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/__init__.py +0 -0
  331. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/__init__.pyi +0 -0
  332. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/__init__.py +0 -0
  333. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/__init__.pyi +0 -0
  334. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/_types.py +0 -0
  335. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/id1000.py +0 -0
  336. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/py.typed +0 -0
  337. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
  338. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/datalad_base.py +0 -0
  339. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/hcp1200/__init__.py +0 -0
  340. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/hcp1200/__init__.pyi +0 -0
  341. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
  342. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/hcp1200/py.typed +0 -0
  343. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
  344. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/pattern_datalad.py +0 -0
  345. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/pattern_validation_mixin.py +0 -0
  346. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/py.typed +0 -0
  347. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
  348. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datagrabber/tests/test_pattern_validation_mixin.py +0 -0
  349. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datareader/__init__.py +0 -0
  350. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datareader/__init__.pyi +0 -0
  351. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datareader/default.py +0 -0
  352. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datareader/py.typed +0 -0
  353. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/datareader/tests/test_default_reader.py +0 -0
  354. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.codecov.yml +0 -0
  355. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.codespellignore +0 -0
  356. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  357. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  358. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  359. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/questions-help-support.md +0 -0
  360. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/dependabot.yml +0 -0
  361. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/workflows/build.yml +0 -0
  362. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/workflows/code-style.yml +0 -0
  363. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/workflows/doc.yml +0 -0
  364. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/workflows/publish.yml +0 -0
  365. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.github/workflows/pytest.yml +0 -0
  366. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/.gitignore +0 -0
  367. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/LICENSE +0 -0
  368. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/README.md +0 -0
  369. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/__init__.py +0 -0
  370. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/_version.py +0 -0
  371. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/asymmetry.py +0 -0
  372. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/brainprint.py +0 -0
  373. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/cli/__init__.py +0 -0
  374. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/cli/help_text.py +0 -0
  375. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/cli/parser.py +0 -0
  376. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/cli/utils.py +0 -0
  377. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/commands/__init__.py +0 -0
  378. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/commands/sys_info.py +0 -0
  379. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/surfaces.py +0 -0
  380. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/utils/__init__.py +0 -0
  381. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/utils/_config.py +0 -0
  382. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/utils/tests/__init__.py +0 -0
  383. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/utils/tests/test_config.py +0 -0
  384. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/brainprint/utils/utils.py +0 -0
  385. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/Makefile +0 -0
  386. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/_static/.gitkeep +0 -0
  387. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/_templates/autosummary/class.rst +0 -0
  388. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/_templates/autosummary/function.rst +0 -0
  389. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/_templates/autosummary/module.rst +0 -0
  390. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/api/index.rst +0 -0
  391. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/conf.py +0 -0
  392. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/index.rst +0 -0
  393. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/links.inc +0 -0
  394. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/make.bat +0 -0
  395. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/doc/references.bib +0 -0
  396. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/pyproject.toml +0 -0
  397. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/BrainPrint/setup.py +0 -0
  398. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/__init__.py +0 -0
  399. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/__init__.pyi +0 -0
  400. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/nilearn/__init__.py +0 -0
  401. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/nilearn/__init__.pyi +0 -0
  402. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/nilearn/junifer_connectivity_measure.py +0 -0
  403. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
  404. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/nilearn/py.typed +0 -0
  405. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +0 -0
  406. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
  407. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/external/py.typed +0 -0
  408. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/__init__.py +0 -0
  409. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/__init__.pyi +0 -0
  410. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/base.py +0 -0
  411. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/brainprint.py +0 -0
  412. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/__init__.py +0 -0
  413. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/__init__.pyi +0 -0
  414. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/complexity_base.py +0 -0
  415. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/hurst_exponent.py +0 -0
  416. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
  417. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/perm_entropy.py +0 -0
  418. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/py.typed +0 -0
  419. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/range_entropy.py +0 -0
  420. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/range_entropy_auc.py +0 -0
  421. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/sample_entropy.py +0 -0
  422. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
  423. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
  424. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
  425. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
  426. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
  427. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
  428. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
  429. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
  430. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
  431. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/ets_rss.py +0 -0
  432. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/falff/__init__.py +0 -0
  433. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/falff/__init__.pyi +0 -0
  434. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/falff/_afni_falff.py +0 -0
  435. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/falff/_junifer_falff.py +0 -0
  436. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/falff/falff_base.py +0 -0
  437. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/falff/falff_maps.py +0 -0
  438. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/falff/falff_parcels.py +0 -0
  439. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/falff/falff_spheres.py +0 -0
  440. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/falff/py.typed +0 -0
  441. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/falff/tests/test_falff_maps.py +0 -0
  442. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
  443. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
  444. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/__init__.py +0 -0
  445. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/__init__.pyi +0 -0
  446. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
  447. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/edge_functional_connectivity_maps.py +0 -0
  448. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
  449. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
  450. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
  451. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/functional_connectivity_maps.py +0 -0
  452. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
  453. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
  454. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/py.typed +0 -0
  455. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
  456. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_maps.py +0 -0
  457. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
  458. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
  459. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
  460. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_maps.py +0 -0
  461. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
  462. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
  463. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/maps_aggregation.py +0 -0
  464. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/parcel_aggregation.py +0 -0
  465. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/py.typed +0 -0
  466. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/reho/__init__.py +0 -0
  467. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/reho/__init__.pyi +0 -0
  468. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/reho/_afni_reho.py +0 -0
  469. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/reho/_junifer_reho.py +0 -0
  470. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/reho/py.typed +0 -0
  471. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/reho/reho_base.py +0 -0
  472. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/reho/reho_maps.py +0 -0
  473. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/reho/reho_parcels.py +0 -0
  474. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/reho/reho_spheres.py +0 -0
  475. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/reho/tests/test_junifer_reho.py +0 -0
  476. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/reho/tests/test_reho_maps.py +0 -0
  477. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
  478. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
  479. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/sphere_aggregation.py +0 -0
  480. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/__init__.py +0 -0
  481. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/__init__.pyi +0 -0
  482. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/py.typed +0 -0
  483. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
  484. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/temporal_snr_maps.py +0 -0
  485. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
  486. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
  487. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
  488. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/tests/test_temporal_snr_maps.py +0 -0
  489. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
  490. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
  491. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/tests/test_brainprint.py +0 -0
  492. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/tests/test_ets_rss.py +0 -0
  493. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/tests/test_lost_regions.py +0 -0
  494. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/tests/test_maps_aggregation.py +0 -0
  495. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/tests/test_marker_utils.py +0 -0
  496. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/tests/test_markers_base.py +0 -0
  497. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
  498. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
  499. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/markers/utils.py +0 -0
  500. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/onthefly/__init__.py +0 -0
  501. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/onthefly/__init__.pyi +0 -0
  502. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/onthefly/_brainprint.py +0 -0
  503. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/onthefly/py.typed +0 -0
  504. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/onthefly/read_transform.py +0 -0
  505. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/onthefly/tests/test_read_transform.py +0 -0
  506. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/pipeline/__init__.py +0 -0
  507. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/pipeline/__init__.pyi +0 -0
  508. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/pipeline/_data_object_dumper.py +0 -0
  509. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/pipeline/marker_collection.py +0 -0
  510. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/pipeline/pipeline_component_registry.py +0 -0
  511. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/pipeline/pipeline_step_mixin.py +0 -0
  512. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/pipeline/py.typed +0 -0
  513. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/pipeline/tests/test_data_object_dumper.py +0 -0
  514. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/pipeline/tests/test_marker_collection.py +0 -0
  515. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/pipeline/tests/test_pipeline_component_registry.py +0 -0
  516. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
  517. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
  518. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/pipeline/tests/test_workdir_manager.py +0 -0
  519. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/pipeline/utils.py +0 -0
  520. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/pipeline/workdir_manager.py +0 -0
  521. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/__init__.py +0 -0
  522. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/__init__.pyi +0 -0
  523. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/_temporal_filter.py +0 -0
  524. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/_temporal_slicer.py +0 -0
  525. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/confounds/__init__.py +0 -0
  526. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/confounds/__init__.pyi +0 -0
  527. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
  528. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/confounds/py.typed +0 -0
  529. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/py.typed +0 -0
  530. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/smoothing/__init__.py +0 -0
  531. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/smoothing/__init__.pyi +0 -0
  532. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/smoothing/_afni_smoothing.py +0 -0
  533. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/smoothing/_fsl_smoothing.py +0 -0
  534. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/smoothing/_nilearn_smoothing.py +0 -0
  535. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/smoothing/py.typed +0 -0
  536. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/smoothing/smoothing.py +0 -0
  537. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/smoothing/tests/test_smoothing.py +0 -0
  538. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/tests/test_temporal_filter.py +0 -0
  539. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/tests/test_temporal_slicer.py +0 -0
  540. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/warping/__init__.py +0 -0
  541. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/warping/__init__.pyi +0 -0
  542. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/warping/_ants_warper.py +0 -0
  543. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/warping/_fsl_warper.py +0 -0
  544. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/warping/py.typed +0 -0
  545. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/warping/space_warper.py +0 -0
  546. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/preprocess/warping/tests/test_space_warper.py +0 -0
  547. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/py.typed +0 -0
  548. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/stats.py +0 -0
  549. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/storage/__init__.py +0 -0
  550. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/storage/__init__.pyi +0 -0
  551. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/storage/py.typed +0 -0
  552. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/storage/tests/data/collected_h5io_fork.hdf5 +0 -0
  553. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/storage/tests/test_hdf5.py +0 -0
  554. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/storage/tests/test_pandas_base.py +0 -0
  555. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/testing/__init__.py +0 -0
  556. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/testing/__init__.pyi +0 -0
  557. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
  558. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/testing/datagrabbers.py +0 -0
  559. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/testing/py.typed +0 -0
  560. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/testing/registry.py +0 -0
  561. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/testing/tests/test_adhdtesting_datagrabber.py +0 -0
  562. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
  563. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
  564. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
  565. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/testing/tests/test_testing_registry.py +0 -0
  566. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/testing/tests/test_testing_utils.py +0 -0
  567. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/testing/tests/test_uclacnpvbmtesting_datagrabber.py +0 -0
  568. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/testing/utils.py +0 -0
  569. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/tests/test_main.py +0 -0
  570. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/tests/test_stats.py +0 -0
  571. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/typing/__init__.py +0 -0
  572. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/typing/__init__.pyi +0 -0
  573. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/typing/_typing.py +0 -0
  574. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/typing/py.typed +0 -0
  575. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/utils/__init__.py +0 -0
  576. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/utils/__init__.pyi +0 -0
  577. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/utils/_config.py +0 -0
  578. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/utils/_yaml.py +0 -0
  579. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/utils/fs.py +0 -0
  580. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/utils/helpers.py +0 -0
  581. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/utils/logging.py +0 -0
  582. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/utils/py.typed +0 -0
  583. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/utils/singleton.py +0 -0
  584. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/utils/tests/test_config.py +0 -0
  585. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/utils/tests/test_fs.py +0 -0
  586. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/utils/tests/test_helpers.py +0 -0
  587. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer/utils/tests/test_logging.py +0 -0
  588. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer.egg-info/dependency_links.txt +0 -0
  589. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer.egg-info/entry_points.txt +0 -0
  590. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer.egg-info/requires.txt +0 -0
  591. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/junifer.egg-info/top_level.txt +0 -0
  592. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/justfile +0 -0
  593. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/pyproject.toml +0 -0
  594. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/scripts/start.sh +0 -0
  595. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/setup.cfg +0 -0
  596. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/setup.py +0 -0
  597. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/tools/create_aomic1000_example_dataset.py +0 -0
  598. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/tools/create_aomicpiop1_example_dataset.py +0 -0
  599. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/tools/create_aomicpiop2_example_dataset.py +0 -0
  600. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/tools/create_bids_example_dataset.py +0 -0
  601. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/tools/create_bids_example_dataset_sessions.py +0 -0
  602. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
  603. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/tools/create_hcp1200_example_dataset.py +0 -0
  604. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/tox.ini +0 -0
  605. {junifer-0.0.8.dev306 → junifer-0.0.8.dev314}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: junifer
3
- Version: 0.0.8.dev306
3
+ Version: 0.0.8.dev314
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 partial element selectors (e.g., only the subject) always being reported as invalid by :func:`.run`, after computing their elements by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Fix a relative ``datadir`` of the DataGrabber in the YAML being relative to the current directory (e.g., the job directory when queueing) instead of the YAML file by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Use only the replacements of the data types to grab as element keys in :class:`.PatternDataGrabber` (e.g., only ``subject`` with VBM data), so the data that does not depend on, e.g., the task is not processed once for each task by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Find the elements of :class:`.DataladAOMICPIOP1`, :class:`.DataladAOMICPIOP2`, :class:`.HCP1200` and :class:`.DMCC13Benchmark` in the dataset, so only the elements with data are listed, and return absolute paths in :class:`.PatternDataGrabber` by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Require the element selectors to have the same number of values, and each data type to be grabbed by only one of the DataGrabbers of :class:`.MultipleDataGrabber` by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Document the elements of the DataGrabbers, combining datasets with :class:`.MultipleDataGrabber`, complete and partial elements, and restricting the values of the replacements by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Run complete elements (with a value for each element key, e.g., in each queued job) without searching the dataset for its elements by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Allow restricting the values of the replacements to grab in :class:`.PatternDataGrabber`, with ``replacements`` as a dictionary or with fields linked with ``_REPLACEMENT_FIELDS`` (e.g., ``tasks`` in the built-in DataGrabbers), and using the ``*`` and ``?`` wildcards in the patterns to find the elements by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Allow :class:`.MultipleDataGrabber` to combine DataGrabbers with different element keys, joining their elements on the common keys, and to replace nested data types (e.g., the confounds of ``BOLD``) with a DataGrabber that only grabs them by `Fede Raimondo`_
@@ -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`_
@@ -48,6 +48,13 @@ acquired for each task, but once in the entire session. So in this case, the
48
48
  ``T1w`` image for the element (``sub001``, ``ses1``, ``rest``) will be the same
49
49
  as the ``T1w`` image for the element (``sub001``, ``ses1``, ``stroop``).
50
50
 
51
+ When the DataGrabber only grabs some of the data types, the elements only have
52
+ the items that these data types need. For example, if only the ``T1w`` image is
53
+ grabbed, the elements are (``subject``, ``session``), e.g., (``sub001``,
54
+ ``ses1``), so that the same ``T1w`` image is not processed once for each task.
55
+ For the :class:`.PatternDataGrabber` (see below), the items that the data types
56
+ need are the replacements in their patterns.
57
+
51
58
  We will now continue this section using as an example, a dataset in BIDS format
52
59
  in which 9 subjects (``sub-01`` to ``sub-09``) were scanned each during 3
53
60
  sessions (``ses-01``, ``ses-02``, ``ses-03``) and each session included a
@@ -200,6 +207,102 @@ to set the ``datadir``.
200
207
  kind: ExampleBIDSDataGrabber
201
208
  datadir: /data/project/test/data
202
209
 
210
+ The DataGrabber finds the elements by searching the dataset for the files that
211
+ match the pattern of each data type. An element is only available if it has the
212
+ files of all the data types to grab. In our BIDS example, ``ses-03`` only has
213
+ anatomical data, so the elements with ``ses-03`` are only available when only
214
+ the ``T1w`` data type is grabbed.
215
+
216
+
217
+ .. _extending_datagrabbers_replacement_values:
218
+
219
+ Restricting the values of the replacements
220
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
221
+
222
+ By default, the DataGrabber grabs all the values of the replacements found in
223
+ the dataset. To only grab some of them, ``replacements`` can be a dictionary
224
+ with the values to grab for each replacement (or ``None`` to grab all of them).
225
+ For example, to only grab the first two sessions of our BIDS example with the
226
+ :class:`.PatternDataGrabber` in the YAML file:
227
+
228
+ .. code-block:: yaml
229
+
230
+ datagrabber:
231
+ kind: PatternDataGrabber
232
+ datadir: /data/project/test/data
233
+ types:
234
+ - T1w
235
+ - BOLD
236
+ patterns:
237
+ T1w:
238
+ pattern: "{subject}/{session}/anat/{subject}_{session}_T1w.nii.gz"
239
+ space: native
240
+ BOLD:
241
+ pattern: "{subject}/{session}/func/{subject}_{session}_task-rest_bold.nii.gz"
242
+ space: MNI152NLin6Asym
243
+ replacements:
244
+ subject: null
245
+ session:
246
+ - ses-01
247
+ - ses-02
248
+
249
+ The elements with other values are not listed, and grabbing them raises an
250
+ error. The values are ignored if the data types to grab do not use the
251
+ replacement, e.g., the ``session`` values with a data type that is the same for
252
+ all the sessions.
253
+
254
+ A DataGrabber can also take the values to grab from one of its fields, e.g.,
255
+ ``sessions``, by linking the field to the replacement with
256
+ ``_REPLACEMENT_FIELDS``. The values of the field can be strings or enumerations
257
+ (a :class:`enum.StrEnum` is recommended, so its members are also the strings),
258
+ and the replacement cannot have values in ``replacements`` too:
259
+
260
+ .. code-block:: python
261
+
262
+ from enum import StrEnum
263
+ from typing import ClassVar
264
+
265
+ from junifer.api.decorators import register_datagrabber
266
+ from junifer.datagrabber import DataType, PatternDataGrabber
267
+ from junifer.typing import DataGrabberPatterns
268
+
269
+
270
+ class Sessions(StrEnum):
271
+ ses_01 = "ses-01"
272
+ ses_02 = "ses-02"
273
+ ses_03 = "ses-03"
274
+
275
+
276
+ @register_datagrabber
277
+ class ExampleBIDSDataGrabber(PatternDataGrabber):
278
+
279
+ types: list[DataType] = [DataType.T1w, DataType.BOLD]
280
+ patterns: DataGrabberPatterns = {
281
+ "T1w": {
282
+ "pattern": "{subject}/{session}/anat/{subject}_{session}_T1w.nii.gz",
283
+ "space": "native",
284
+ },
285
+ "BOLD": {
286
+ "pattern": "{subject}/{session}/func/{subject}_{session}_task-rest_bold.nii.gz",
287
+ "space": "MNI152NLin6Asym",
288
+ },
289
+ }
290
+ replacements: list[str] = ["subject", "session"]
291
+ sessions: list[Sessions] = list(Sessions)
292
+ # Only grab the sessions in the `sessions` field
293
+ _REPLACEMENT_FIELDS: ClassVar[dict[str, str]] = {"session": "sessions"}
294
+
295
+ Then, the sessions to grab can be set in the YAML file:
296
+
297
+ .. code-block:: yaml
298
+
299
+ datagrabber:
300
+ kind: ExampleBIDSDataGrabber
301
+ datadir: /data/project/test/data
302
+ sessions:
303
+ - ses-01
304
+ - ses-02
305
+
203
306
 
204
307
  Optional: Using datalad
205
308
  ~~~~~~~~~~~~~~~~~~~~~~~
@@ -296,20 +399,38 @@ This approach can be used directly from the YAML, like so:
296
399
  uri: "https://cerebra.fz-juelich.de/junifer/datalad-example-bids-ses.git"
297
400
  rootdir: example_bids_ses
298
401
 
402
+ .. _extending_datagrabbers_path_expansion:
403
+
299
404
  Advanced: Using Unix-like path expansion directives
300
405
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
301
406
 
302
407
  It is also possible to use some advanced Unix-like path expansion tricks to
303
408
  define our patterns.
304
409
 
305
- A very common thing would be to use ``*`` to match any number of
306
- characters but we cannot use it right after a replacement like:
410
+ A very common thing would be to use ``*`` to match any number of characters
411
+ or ``?`` to match a single character, both to find the elements and to grab
412
+ their data. For example, if the acquisition of the BOLD images depends on the
413
+ task (e.g., ``sub-01_task-rest_acq-mb3_bold.nii.gz`` and
414
+ ``sub-01_task-stroop_acq-seq_bold.nii.gz``), the pattern can match any
415
+ acquisition, so the task values are ``rest`` and ``stroop``:
307
416
 
308
417
  .. code-block:: python
309
418
 
310
- "derivatives/freesurfer/{subject}*"
419
+ "{subject}/func/{subject}_task-{task}_acq-*_bold.nii.gz"
420
+
421
+ Similarly, ``?`` can match the first character of ``rfMRI`` (resting-state)
422
+ and ``tfMRI`` (task) in the HCP dataset:
423
+
424
+ .. code-block:: python
311
425
 
312
- or if there are multiple files or no files which can be globbed.
426
+ "{subject}/MNINonLinear/Results/?fMRI_{task}_{phase_encoding}/?fMRI_{task}_{phase_encoding}.nii.gz"
427
+
428
+ The pattern must match exactly one file for each element, and we cannot use
429
+ ``*`` right after a replacement like:
430
+
431
+ .. code-block:: python
432
+
433
+ "derivatives/freesurfer/{subject}*"
313
434
 
314
435
  We can also use ``[]`` and ``[!]`` to glob certain tricky files like with the
315
436
  case of FreeSurfer derivatives. The file structure seen in a typical
@@ -357,7 +478,13 @@ need to implement the following methods:
357
478
 
358
479
  - ``get_item``: to get a single item from the dataset.
359
480
  - ``get_elements``: to get the list of all elements present in the dataset
360
- - ``get_element_keys``: to get the keys of the elements in the dataset.
481
+ - ``get_element_keys``: to get the keys of the elements in the dataset. They
482
+ also give the order of the values in each element, which must match the
483
+ parameters of ``get_item``.
484
+
485
+ Optionally, if the data of some data types does not depend on all the keys of
486
+ the element, we can also implement ``get_type_element_keys`` (see
487
+ :ref:`extending_datagrabbers_type_keys`).
361
488
 
362
489
  .. note::
363
490
 
@@ -396,17 +523,15 @@ need to remember that for session *ses-03* there is no BOLD data.
396
523
  from itertools import product
397
524
 
398
525
 
399
- def get_elements(self) -> list[str]:
526
+ def get_elements(self) -> list[tuple[str, str]]:
400
527
  subjects = ["sub-01", "sub-02", "sub-03"]
401
528
  sessions = ["ses-01", "ses-02"]
402
529
 
403
530
  # If we are not working on BOLD data, we can add "ses-03"
404
531
  if "BOLD" not in self.types:
405
532
  sessions.append("ses-03")
406
- elements = []
407
- for subject, element in product(subjects, sessions):
408
- elements.append({"subject": subject, "session": session})
409
- return elements
533
+ # The values of each element, in the order of the element keys
534
+ return list(product(subjects, sessions))
410
535
 
411
536
 
412
537
  And finally, we can implement the ``get_element_keys`` method. This method needs
@@ -419,11 +544,39 @@ method, in the same order.
419
544
  def get_element_keys(self) -> list[str]:
420
545
  return ["subject", "session"]
421
546
 
547
+ .. _extending_datagrabbers_type_keys:
548
+
549
+ Data types with different keys
550
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
551
+
552
+ By default, the data of every data type depends on all the element keys. If
553
+ the data of a data type only depends on some of them, the DataGrabber can say
554
+ so by implementing ``get_type_element_keys``, which returns the element keys
555
+ that the data of a data type depends on. For example, if the ``T1w`` image of
556
+ our dataset was acquired once for each subject, instead of once for each
557
+ session:
558
+
559
+ .. code-block:: python
560
+
561
+ def get_type_element_keys(self, data_type: str) -> list[str]:
562
+ if data_type == "T1w":
563
+ return ["subject"]
564
+ return ["subject", "session"]
565
+
566
+ Then, the ``T1w`` data (and the features computed from it) is stored once for
567
+ each subject, instead of once for each session (see :ref:`internals`). The
568
+ element keys must still be all the keys that the data types to grab depend on:
569
+ if only ``T1w`` was grabbed, ``get_element_keys`` should return
570
+ ``["subject"]`` (and ``get_elements`` and ``get_item`` should only use the
571
+ subject).
572
+
422
573
 
423
574
  So, to summarise, our DataGrabber will look like this:
424
575
 
425
576
  .. code-block:: python
426
577
 
578
+ from itertools import product
579
+
427
580
  from junifer.api.decorators import register_datagrabber
428
581
  from junifer.datagrabber import BaseDataGrabber
429
582
 
@@ -445,18 +598,15 @@ So, to summarise, our DataGrabber will look like this:
445
598
  }
446
599
  return out
447
600
 
448
- def get_elements(self) -> list[str]:
601
+ def get_elements(self) -> list[tuple[str, str]]:
449
602
  subjects = ["sub-01", "sub-02", "sub-03"]
450
603
  sessions = ["ses-01", "ses-02"]
451
604
 
452
605
  # If we are not working on BOLD data, we can add "ses-03"
453
606
  if "BOLD" not in self.types:
454
607
  sessions.append("ses-03")
455
- elements = []
456
- for subject in subjects:
457
- for session in sessions:
458
- elements.append({"subject": subject, "session": session})
459
- return elements
608
+ # The values of each element, in the order of the element keys
609
+ return list(product(subjects, sessions))
460
610
 
461
611
  def get_element_keys(self) -> list[str]:
462
612
  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.