junifer 0.0.8.dev339__tar.gz → 0.0.8.dev346__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 (620) hide show
  1. {junifer-0.0.8.dev339/junifer.egg-info → junifer-0.0.8.dev346}/PKG-INFO +1 -1
  2. junifer-0.0.8.dev346/docs/changes/newsfragments/534.enh +1 -0
  3. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/using/configuring.rst +7 -0
  4. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/_version.py +3 -3
  5. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +196 -46
  6. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +218 -0
  7. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/maps_aggregation.py +2 -0
  8. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/parcel_aggregation.py +3 -1
  9. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346/junifer.egg-info}/PKG-INFO +1 -1
  10. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer.egg-info/SOURCES.txt +1 -0
  11. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer.egg-info/scm_file_list.json +1 -0
  12. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer.egg-info/scm_version.json +2 -2
  13. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.dockerignore +0 -0
  14. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  15. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  16. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
  17. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
  18. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  19. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
  20. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/dependabot.yml +0 -0
  21. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/pull_request_template.md +0 -0
  22. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/workflows/check-stale.yml +0 -0
  23. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/workflows/ci.yml +0 -0
  24. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/workflows/docker-publish.yml +0 -0
  25. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/workflows/docs-preview.yml +0 -0
  26. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/workflows/docs.yml +0 -0
  27. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/workflows/lint.yml +0 -0
  28. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.github/workflows/publish.yml +0 -0
  29. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.gitignore +0 -0
  30. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.gitmodules +0 -0
  31. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.pre-commit-config.yaml +0 -0
  32. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/.python-version +0 -0
  33. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/AUTHORS.rst +0 -0
  34. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/Dockerfile +0 -0
  35. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/Dockerfile-ci +0 -0
  36. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/LICENSE.md +0 -0
  37. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/README.md +0 -0
  38. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/codecov.yml +0 -0
  39. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/conda-env.yml +0 -0
  40. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/Makefile +0 -0
  41. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/_static/css/custom.css +0 -0
  42. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/_static/css/version_selector.css +0 -0
  43. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/_static/js/custom.js +0 -0
  44. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/_templates/versions.html +0 -0
  45. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/api.rst +0 -0
  46. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/cli.rst +0 -0
  47. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/configs.rst +0 -0
  48. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/data.rst +0 -0
  49. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/datagrabbers.rst +0 -0
  50. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/datareaders.rst +0 -0
  51. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/index.rst +0 -0
  52. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/markers.rst +0 -0
  53. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/nilearn.rst +0 -0
  54. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/onthefly.rst +0 -0
  55. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/pipeline.rst +0 -0
  56. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/preprocessing.rst +0 -0
  57. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/stats.rst +0 -0
  58. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/storage.rst +0 -0
  59. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/testing.rst +0 -0
  60. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/api/utils.rst +0 -0
  61. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/builtin.rst +0 -0
  62. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/contributors.inc +0 -0
  63. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/.gitignore +0 -0
  64. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/239.enh +0 -0
  65. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/364.doc +0 -0
  66. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/364.enh +0 -0
  67. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/364.feature +0 -0
  68. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/474.misc +0 -0
  69. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/482.bugfix +0 -0
  70. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/492.bugfix +0 -0
  71. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/499.enh +0 -0
  72. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/502.bugfix +0 -0
  73. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/503.enh +0 -0
  74. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/504.bugfix +0 -0
  75. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/504.misc +0 -0
  76. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/509.enh +0 -0
  77. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/510.bugfix +0 -0
  78. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/511.bugfix +0 -0
  79. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/511.bugfix.1 +0 -0
  80. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/511.change +0 -0
  81. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/511.enh +0 -0
  82. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/511.enh.1 +0 -0
  83. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/511.feature +0 -0
  84. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/511.misc +0 -0
  85. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/511.misc.1 +0 -0
  86. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/513.doc +0 -0
  87. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/513.misc +0 -0
  88. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/514.bugfix +0 -0
  89. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/514.bugfix.1 +0 -0
  90. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/514.enh +0 -0
  91. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/515.doc +0 -0
  92. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/515.enh +0 -0
  93. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/515.enh.1 +0 -0
  94. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/515.misc +0 -0
  95. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/515.misc.1 +0 -0
  96. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/516.bugfix +0 -0
  97. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/516.bugfix.1 +0 -0
  98. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/516.bugfix.2 +0 -0
  99. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/516.change +0 -0
  100. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/516.change.1 +0 -0
  101. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/516.misc +0 -0
  102. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.bugfix +0 -0
  103. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.bugfix.1 +0 -0
  104. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.bugfix.2 +0 -0
  105. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.bugfix.3 +0 -0
  106. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.bugfix.4 +0 -0
  107. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.bugfix.5 +0 -0
  108. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.bugfix.6 +0 -0
  109. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.change +0 -0
  110. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.doc +0 -0
  111. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.misc +0 -0
  112. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.misc.1 +0 -0
  113. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.misc.2 +0 -0
  114. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.misc.3 +0 -0
  115. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/520.removal +0 -0
  116. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/521.bugfix +0 -0
  117. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/522.bugfix +0 -0
  118. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/522.enh +0 -0
  119. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/523.misc +0 -0
  120. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.bugfix +0 -0
  121. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.bugfix.1 +0 -0
  122. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.change +0 -0
  123. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.change.1 +0 -0
  124. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.change.2 +0 -0
  125. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.doc +0 -0
  126. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.enh +0 -0
  127. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.feature +0 -0
  128. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/524.feature.1 +0 -0
  129. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.bugfix +0 -0
  130. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.bugfix.1 +0 -0
  131. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.change +0 -0
  132. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.change.1 +0 -0
  133. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.change.2 +0 -0
  134. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.change.3 +0 -0
  135. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.change.4 +0 -0
  136. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.doc +0 -0
  137. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.enh +0 -0
  138. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/525.feature +0 -0
  139. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/528.bugfix +0 -0
  140. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/528.change +0 -0
  141. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/528.doc +0 -0
  142. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/529.bugfix +0 -0
  143. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/529.bugfix.1 +0 -0
  144. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/529.bugfix.2 +0 -0
  145. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/529.bugfix.3 +0 -0
  146. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/529.doc +0 -0
  147. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/529.enh +0 -0
  148. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/530.change +0 -0
  149. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/530.enh +0 -0
  150. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/530.enh.1 +0 -0
  151. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/531.enh +0 -0
  152. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/533.enh +0 -0
  153. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/changes/newsfragments/533.enh.1 +0 -0
  154. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/conf.py +0 -0
  155. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/contribution.rst +0 -0
  156. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/confounds_format.rst +0 -0
  157. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/coordinates.rst +0 -0
  158. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/data_dump_asset.rst +0 -0
  159. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/data_registries.rst +0 -0
  160. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/data_types.rst +0 -0
  161. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/datagrabber.rst +0 -0
  162. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/dependencies.rst +0 -0
  163. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/extension.rst +0 -0
  164. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/index.rst +0 -0
  165. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/logging.rst +0 -0
  166. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/maps.rst +0 -0
  167. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/marker.rst +0 -0
  168. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/masks.rst +0 -0
  169. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/parcellations.rst +0 -0
  170. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/plugins.rst +0 -0
  171. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/extending/preprocessor.rst +0 -0
  172. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/faq.rst +0 -0
  173. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/help.rst +0 -0
  174. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/images/junifer_logo.png +0 -0
  175. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/index.rst +0 -0
  176. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/installation.rst +0 -0
  177. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/internals.rst +0 -0
  178. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/links.inc +0 -0
  179. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/maintaining.rst +0 -0
  180. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/poly.py +0 -0
  181. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/poly_files/patches/version_banner.html +0 -0
  182. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/poly_files/patches/versions.html +0 -0
  183. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/poly_files/templates/index.html +0 -0
  184. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/starting.rst +0 -0
  185. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/understanding/data.rst +0 -0
  186. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/understanding/datagrabber.rst +0 -0
  187. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/understanding/datareader.rst +0 -0
  188. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/understanding/index.rst +0 -0
  189. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/understanding/marker.rst +0 -0
  190. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/understanding/pipeline.rst +0 -0
  191. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/understanding/preprocess.rst +0 -0
  192. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/understanding/storage.rst +0 -0
  193. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/using/codeless.rst +0 -0
  194. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/using/dumping.rst +0 -0
  195. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/using/index.rst +0 -0
  196. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/using/masks.rst +0 -0
  197. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/using/queueing.rst +0 -0
  198. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/using/running.rst +0 -0
  199. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/docs/whats_new.rst +0 -0
  200. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/README.rst +0 -0
  201. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/norun_hcpfc_pearson.py +0 -0
  202. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/norun_ukbvm_gmd.py +0 -0
  203. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/run_compute_parcel_mean.py +0 -0
  204. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/run_datagrabber_bids_datalad.py +0 -0
  205. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/run_ets_rss_marker.py +0 -0
  206. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/run_junifer_julearn.py +0 -0
  207. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/run_run_gmd_mean.py +0 -0
  208. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/yamls/gmd_mean.yaml +0 -0
  209. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
  210. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/yamls/partly_cloudy_agg_mean_tian.yml +0 -0
  211. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/examples/yamls/ukb_gmd_mean.yaml +0 -0
  212. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/ignore_words.txt +0 -0
  213. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/__init__.py +0 -0
  214. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/__init__.pyi +0 -0
  215. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/__init__.py +0 -0
  216. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/__init__.pyi +0 -0
  217. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/decorators.py +0 -0
  218. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/functions.py +0 -0
  219. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/py.typed +0 -0
  220. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/queue_context/__init__.py +0 -0
  221. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/queue_context/__init__.pyi +0 -0
  222. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/queue_context/gnu_parallel_local_adapter.py +0 -0
  223. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/queue_context/htcondor_adapter.py +0 -0
  224. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/queue_context/py.typed +0 -0
  225. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/queue_context/queue_context_adapter.py +0 -0
  226. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +0 -0
  227. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/queue_context/tests/test_htcondor_adapter.py +0 -0
  228. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
  229. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/afni/3dRSFC +0 -0
  230. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/afni/3dReHo +0 -0
  231. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/afni/afni +0 -0
  232. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/afni/run_afni_docker.sh +0 -0
  233. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/ants/ResampleImage +0 -0
  234. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/ants/antsApplyTransforms +0 -0
  235. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
  236. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/ants/run_ants_docker.sh +0 -0
  237. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/freesurfer/mri_binarize +0 -0
  238. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/freesurfer/mri_mc +0 -0
  239. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/freesurfer/mri_pretess +0 -0
  240. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/freesurfer/mris_convert +0 -0
  241. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/freesurfer/run_freesurfer_docker.sh +0 -0
  242. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/fsl/applywarp +0 -0
  243. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/fsl/flirt +0 -0
  244. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/fsl/img2imgcoord +0 -0
  245. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
  246. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/fsl/std2imgcoord +0 -0
  247. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/run_conda.bash +0 -0
  248. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/run_conda.zsh +0 -0
  249. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/run_venv.bash +0 -0
  250. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/res/run_venv.zsh +0 -0
  251. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/tests/test_decorators.py +0 -0
  252. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/api/tests/test_functions.py +0 -0
  253. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/__init__.py +0 -0
  254. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/__init__.pyi +0 -0
  255. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/cli.py +0 -0
  256. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/parser.py +0 -0
  257. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/py.typed +0 -0
  258. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/tests/data/gmd_mean.yaml +0 -0
  259. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/tests/data/gmd_mean_htcondor.yaml +0 -0
  260. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +0 -0
  261. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/tests/test_cli.py +0 -0
  262. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/tests/test_cli_utils.py +0 -0
  263. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/cli/utils.py +0 -0
  264. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/__init__.py +0 -0
  265. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/__init__.pyi +0 -0
  266. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/__init__.py +0 -0
  267. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/__init__.pyi +0 -0
  268. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
  269. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/__init__.pyi +0 -0
  270. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
  271. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
  272. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
  273. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/py.typed +0 -0
  274. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
  275. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
  276. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
  277. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
  278. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
  279. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
  280. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
  281. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/juseless/py.typed +0 -0
  282. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/configs/py.typed +0 -0
  283. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/conftest.py +0 -0
  284. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/__init__.py +0 -0
  285. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/__init__.pyi +0 -0
  286. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/_dispatch.py +0 -0
  287. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/coordinates/__init__.py +0 -0
  288. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/coordinates/__init__.pyi +0 -0
  289. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/coordinates/_ants_coordinates_warper.py +0 -0
  290. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/coordinates/_coordinates.py +0 -0
  291. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/coordinates/_fsl_coordinates_warper.py +0 -0
  292. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/coordinates/tests/test_coordinates.py +0 -0
  293. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/coordinates/tests/test_coordinates_names.py +0 -0
  294. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/maps/__init__.py +0 -0
  295. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/maps/__init__.pyi +0 -0
  296. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/maps/_ants_maps_warper.py +0 -0
  297. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/maps/_fsl_maps_warper.py +0 -0
  298. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/maps/_maps.py +0 -0
  299. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/maps/tests/test_maps.py +0 -0
  300. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/masks/__init__.py +0 -0
  301. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/masks/__init__.pyi +0 -0
  302. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/masks/_ants_mask_warper.py +0 -0
  303. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/masks/_fsl_mask_warper.py +0 -0
  304. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/masks/_masks.py +0 -0
  305. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/masks/tests/test_masks.py +0 -0
  306. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/parcellations/__init__.py +0 -0
  307. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/parcellations/__init__.pyi +0 -0
  308. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/parcellations/_ants_parcellation_warper.py +0 -0
  309. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/parcellations/_fsl_parcellation_warper.py +0 -0
  310. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/parcellations/_parcellations.py +0 -0
  311. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/parcellations/tests/test_parcellations.py +0 -0
  312. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/pipeline_data_registry_base.py +0 -0
  313. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/py.typed +0 -0
  314. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/template_spaces.py +0 -0
  315. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/tests/test_data_utils.py +0 -0
  316. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/tests/test_dispatch.py +0 -0
  317. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/tests/test_template_spaces.py +0 -0
  318. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/data/utils.py +0 -0
  319. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/__init__.py +0 -0
  320. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/__init__.pyi +0 -0
  321. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/__init__.py +0 -0
  322. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/__init__.pyi +0 -0
  323. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/_types.py +0 -0
  324. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/id1000.py +0 -0
  325. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/piop1.py +0 -0
  326. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/piop2.py +0 -0
  327. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/py.typed +0 -0
  328. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
  329. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
  330. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
  331. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/base.py +0 -0
  332. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/datalad_base.py +0 -0
  333. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/dmcc13_benchmark.py +0 -0
  334. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/hcp1200/__init__.py +0 -0
  335. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/hcp1200/__init__.pyi +0 -0
  336. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
  337. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
  338. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/hcp1200/py.typed +0 -0
  339. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
  340. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/multiple.py +0 -0
  341. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/pattern.py +0 -0
  342. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/pattern_datalad.py +0 -0
  343. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/pattern_validation_mixin.py +0 -0
  344. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/py.typed +0 -0
  345. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/tests/test_base.py +0 -0
  346. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
  347. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +0 -0
  348. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/tests/test_multiple.py +0 -0
  349. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/tests/test_pattern.py +0 -0
  350. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
  351. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datagrabber/tests/test_pattern_validation_mixin.py +0 -0
  352. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datareader/__init__.py +0 -0
  353. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datareader/__init__.pyi +0 -0
  354. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datareader/default.py +0 -0
  355. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datareader/py.typed +0 -0
  356. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/datareader/tests/test_default_reader.py +0 -0
  357. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.codecov.yml +0 -0
  358. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.codespellignore +0 -0
  359. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  360. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  361. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  362. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/questions-help-support.md +0 -0
  363. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/dependabot.yml +0 -0
  364. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/workflows/build.yml +0 -0
  365. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/workflows/code-style.yml +0 -0
  366. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/workflows/doc.yml +0 -0
  367. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/workflows/publish.yml +0 -0
  368. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.github/workflows/pytest.yml +0 -0
  369. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/.gitignore +0 -0
  370. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/LICENSE +0 -0
  371. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/README.md +0 -0
  372. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/__init__.py +0 -0
  373. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/_version.py +0 -0
  374. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/asymmetry.py +0 -0
  375. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/brainprint.py +0 -0
  376. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/cli/__init__.py +0 -0
  377. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/cli/help_text.py +0 -0
  378. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/cli/parser.py +0 -0
  379. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/cli/utils.py +0 -0
  380. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/commands/__init__.py +0 -0
  381. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/commands/sys_info.py +0 -0
  382. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/surfaces.py +0 -0
  383. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/utils/__init__.py +0 -0
  384. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/utils/_config.py +0 -0
  385. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/utils/tests/__init__.py +0 -0
  386. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/utils/tests/test_config.py +0 -0
  387. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/brainprint/utils/utils.py +0 -0
  388. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/Makefile +0 -0
  389. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/_static/.gitkeep +0 -0
  390. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/_templates/autosummary/class.rst +0 -0
  391. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/_templates/autosummary/function.rst +0 -0
  392. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/_templates/autosummary/module.rst +0 -0
  393. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/api/index.rst +0 -0
  394. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/conf.py +0 -0
  395. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/index.rst +0 -0
  396. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/links.inc +0 -0
  397. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/make.bat +0 -0
  398. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/doc/references.bib +0 -0
  399. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/pyproject.toml +0 -0
  400. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/BrainPrint/setup.py +0 -0
  401. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/__init__.py +0 -0
  402. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/__init__.pyi +0 -0
  403. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/nilearn/__init__.py +0 -0
  404. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/nilearn/__init__.pyi +0 -0
  405. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/nilearn/junifer_connectivity_measure.py +0 -0
  406. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/nilearn/py.typed +0 -0
  407. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +0 -0
  408. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/external/py.typed +0 -0
  409. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/__init__.py +0 -0
  410. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/__init__.pyi +0 -0
  411. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/base.py +0 -0
  412. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/brainprint.py +0 -0
  413. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/__init__.py +0 -0
  414. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/complexity_base.py +0 -0
  415. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/hurst_exponent.py +0 -0
  416. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
  417. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/perm_entropy.py +0 -0
  418. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/py.typed +0 -0
  419. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/range_entropy.py +0 -0
  420. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/range_entropy_auc.py +0 -0
  421. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/sample_entropy.py +0 -0
  422. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
  423. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_complexity_registry.py +0 -0
  424. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
  425. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
  426. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
  427. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
  428. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
  429. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
  430. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
  431. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
  432. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/ets_rss.py +0 -0
  433. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/__init__.py +0 -0
  434. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/__init__.pyi +0 -0
  435. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/_afni_falff.py +0 -0
  436. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/_junifer_falff.py +0 -0
  437. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/falff_base.py +0 -0
  438. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/falff_maps.py +0 -0
  439. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/falff_parcels.py +0 -0
  440. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/falff_spheres.py +0 -0
  441. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/py.typed +0 -0
  442. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/tests/test_falff_maps.py +0 -0
  443. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/tests/test_falff_mask.py +0 -0
  444. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
  445. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
  446. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/__init__.py +0 -0
  447. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/__init__.pyi +0 -0
  448. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
  449. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/edge_functional_connectivity_maps.py +0 -0
  450. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
  451. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
  452. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
  453. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/functional_connectivity_maps.py +0 -0
  454. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
  455. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
  456. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/py.typed +0 -0
  457. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
  458. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_maps.py +0 -0
  459. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
  460. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
  461. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
  462. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_maps.py +0 -0
  463. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
  464. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
  465. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/py.typed +0 -0
  466. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/__init__.py +0 -0
  467. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/__init__.pyi +0 -0
  468. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/_afni_reho.py +0 -0
  469. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/_junifer_reho.py +0 -0
  470. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/py.typed +0 -0
  471. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/reho_base.py +0 -0
  472. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/reho_maps.py +0 -0
  473. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/reho_parcels.py +0 -0
  474. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/reho_spheres.py +0 -0
  475. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/tests/test_junifer_reho.py +0 -0
  476. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/tests/test_reho_maps.py +0 -0
  477. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
  478. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
  479. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/sphere_aggregation.py +0 -0
  480. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/__init__.py +0 -0
  481. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/__init__.pyi +0 -0
  482. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/py.typed +0 -0
  483. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
  484. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/temporal_snr_maps.py +0 -0
  485. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
  486. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
  487. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
  488. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/tests/test_temporal_snr_maps.py +0 -0
  489. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
  490. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
  491. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/tests/test_brainprint.py +0 -0
  492. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/tests/test_ets_rss.py +0 -0
  493. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/tests/test_lost_regions.py +0 -0
  494. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/tests/test_maps_aggregation.py +0 -0
  495. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/tests/test_marker_utils.py +0 -0
  496. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/tests/test_markers_base.py +0 -0
  497. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
  498. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
  499. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/markers/utils.py +0 -0
  500. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/onthefly/__init__.py +0 -0
  501. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/onthefly/__init__.pyi +0 -0
  502. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/onthefly/_brainprint.py +0 -0
  503. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/onthefly/py.typed +0 -0
  504. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/onthefly/read_transform.py +0 -0
  505. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/onthefly/tests/test_read_transform.py +0 -0
  506. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/__init__.py +0 -0
  507. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/__init__.pyi +0 -0
  508. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/_data_object_dumper.py +0 -0
  509. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/marker_collection.py +0 -0
  510. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/pipeline_component_registry.py +0 -0
  511. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/pipeline_step_mixin.py +0 -0
  512. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/py.typed +0 -0
  513. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/tests/test_data_object_dumper.py +0 -0
  514. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/tests/test_marker_collection.py +0 -0
  515. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/tests/test_pipeline_component_registry.py +0 -0
  516. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
  517. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
  518. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/tests/test_workdir_manager.py +0 -0
  519. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/update_meta_mixin.py +0 -0
  520. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/utils.py +0 -0
  521. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/pipeline/workdir_manager.py +0 -0
  522. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/__init__.py +0 -0
  523. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/__init__.pyi +0 -0
  524. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/_temporal_filter.py +0 -0
  525. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/_temporal_slicer.py +0 -0
  526. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/base.py +0 -0
  527. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/confounds/__init__.py +0 -0
  528. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/confounds/__init__.pyi +0 -0
  529. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
  530. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/confounds/py.typed +0 -0
  531. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +0 -0
  532. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/py.typed +0 -0
  533. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/smoothing/__init__.py +0 -0
  534. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/smoothing/__init__.pyi +0 -0
  535. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/smoothing/_afni_smoothing.py +0 -0
  536. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/smoothing/_fsl_smoothing.py +0 -0
  537. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/smoothing/_nilearn_smoothing.py +0 -0
  538. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/smoothing/py.typed +0 -0
  539. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/smoothing/smoothing.py +0 -0
  540. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/smoothing/tests/test_smoothing.py +0 -0
  541. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/tests/test_preprocess_base.py +0 -0
  542. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/tests/test_temporal_filter.py +0 -0
  543. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/tests/test_temporal_slicer.py +0 -0
  544. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/__init__.py +0 -0
  545. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/__init__.pyi +0 -0
  546. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/_ants_warper.py +0 -0
  547. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/_fsl_warper.py +0 -0
  548. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/_utils.py +0 -0
  549. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/py.typed +0 -0
  550. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/space_warper.py +0 -0
  551. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/tests/test_space_warper.py +0 -0
  552. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/preprocess/warping/tests/test_warping_utils.py +0 -0
  553. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/py.typed +0 -0
  554. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/stats.py +0 -0
  555. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/__init__.py +0 -0
  556. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/__init__.pyi +0 -0
  557. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/base.py +0 -0
  558. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/hdf5.py +0 -0
  559. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/pandas_base.py +0 -0
  560. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/py.typed +0 -0
  561. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/sqlite.py +0 -0
  562. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/tests/data/collected_h5io_fork.hdf5 +0 -0
  563. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/tests/test_hdf5.py +0 -0
  564. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/tests/test_pandas_base.py +0 -0
  565. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/tests/test_repeated_storage.py +0 -0
  566. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/tests/test_sqlite.py +0 -0
  567. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/tests/test_storage_base.py +0 -0
  568. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/tests/test_utils.py +0 -0
  569. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/storage/utils.py +0 -0
  570. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/__init__.py +0 -0
  571. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/__init__.pyi +0 -0
  572. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
  573. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/datagrabbers.py +0 -0
  574. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/py.typed +0 -0
  575. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/registry.py +0 -0
  576. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/tests/test_adhdtesting_datagrabber.py +0 -0
  577. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
  578. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
  579. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
  580. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/tests/test_testing_registry.py +0 -0
  581. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/tests/test_testing_utils.py +0 -0
  582. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/tests/test_uclacnpvbmtesting_datagrabber.py +0 -0
  583. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/testing/utils.py +0 -0
  584. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/tests/test_main.py +0 -0
  585. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/tests/test_stats.py +0 -0
  586. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/typing/__init__.py +0 -0
  587. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/typing/__init__.pyi +0 -0
  588. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/typing/_typing.py +0 -0
  589. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/typing/py.typed +0 -0
  590. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/__init__.py +0 -0
  591. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/__init__.pyi +0 -0
  592. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/_config.py +0 -0
  593. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/_yaml.py +0 -0
  594. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/fs.py +0 -0
  595. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/helpers.py +0 -0
  596. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/logging.py +0 -0
  597. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/py.typed +0 -0
  598. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/singleton.py +0 -0
  599. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/tests/test_config.py +0 -0
  600. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/tests/test_fs.py +0 -0
  601. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/tests/test_helpers.py +0 -0
  602. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer/utils/tests/test_logging.py +0 -0
  603. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer.egg-info/dependency_links.txt +0 -0
  604. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer.egg-info/entry_points.txt +0 -0
  605. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer.egg-info/requires.txt +0 -0
  606. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/junifer.egg-info/top_level.txt +0 -0
  607. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/justfile +0 -0
  608. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/pyproject.toml +0 -0
  609. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/scripts/start.sh +0 -0
  610. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/setup.cfg +0 -0
  611. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/setup.py +0 -0
  612. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/tools/create_aomic1000_example_dataset.py +0 -0
  613. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/tools/create_aomicpiop1_example_dataset.py +0 -0
  614. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/tools/create_aomicpiop2_example_dataset.py +0 -0
  615. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/tools/create_bids_example_dataset.py +0 -0
  616. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/tools/create_bids_example_dataset_sessions.py +0 -0
  617. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
  618. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/tools/create_hcp1200_example_dataset.py +0 -0
  619. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/tox.ini +0 -0
  620. {junifer-0.0.8.dev339 → junifer-0.0.8.dev346}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: junifer
3
- Version: 0.0.8.dev339
3
+ Version: 0.0.8.dev346
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
+ Read only the signals of the voxels of the spheres, in chunks of ``markers.spheres.chunksize`` volumes (default 100), in :class:`.JuniferNiftiSpheresMasker`, instead of loading the whole 4D data, reducing the memory used by the sphere-based markers (e.g., :class:`.SphereAggregation` and :class:`.FunctionalConnectivitySpheres`) on BOLD data, with the same results, and do not change the input data when it has NaN values by `Fede Raimondo`_
@@ -69,3 +69,10 @@ Available Configurations
69
69
  - | Number of volumes of 4D data to warp at once with
70
70
  | :class:`.SpaceWarper` (default 100). The memory used by ANTs and FSL
71
71
  | grows with the number of volumes, so smaller chunks use less memory
72
+ * - ``JUNIFER_MARKERS_SPHERES_CHUNKSIZE``
73
+ - ``markers.spheres.chunksize``
74
+ - int
75
+ - | Number of volumes of 4D data to read at once to extract the signals
76
+ | of spheres (e.g., :class:`.SphereAggregation`) (default 100). Only
77
+ | the signals of the voxels of the spheres are kept, so the whole data
78
+ | is never in memory, and smaller chunks use less memory
@@ -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.dev339'
22
- __version_tuple__ = version_tuple = (0, 0, 8, 'dev339')
21
+ __version__ = version = '0.0.8.dev346'
22
+ __version_tuple__ = version_tuple = (0, 0, 8, 'dev346')
23
23
 
24
- __commit_id__ = commit_id = 'gd12ff17f7'
24
+ __commit_id__ = commit_id = 'g936d23c84'
@@ -15,7 +15,7 @@ from nilearn.maskers.base_masker import filter_and_extract
15
15
  from sklearn import neighbors
16
16
  from sklearn.utils.validation import check_is_fitted
17
17
 
18
- from ...utils import raise_error, warn_with_log
18
+ from ...utils import config, raise_error, warn_with_log
19
19
 
20
20
 
21
21
  if TYPE_CHECKING:
@@ -24,6 +24,7 @@ if TYPE_CHECKING:
24
24
  from nibabel import Nifti1Image, Nifti2Image
25
25
  from numpy.typing import ArrayLike, DTypeLike
26
26
  from pandas import DataFrame
27
+ from scipy.sparse import lil_matrix
27
28
 
28
29
 
29
30
  __all__ = ["JuniferNiftiSpheresMasker"]
@@ -62,14 +63,40 @@ __all__ = ["JuniferNiftiSpheresMasker"]
62
63
  # DAMAGE.
63
64
 
64
65
 
65
- def _apply_mask_and_get_affinity(
66
+ def _get_chunk_size() -> int:
67
+ """Get the number of volumes to read at once.
68
+
69
+ Returns
70
+ -------
71
+ int
72
+ The value of ``markers.spheres.chunksize`` (default 100).
73
+
74
+ Raises
75
+ ------
76
+ ValueError
77
+ If ``markers.spheres.chunksize`` is not a positive integer.
78
+
79
+ """
80
+ chunk_size = config.get("markers.spheres.chunksize", 100)
81
+ if (
82
+ isinstance(chunk_size, bool)
83
+ or not isinstance(chunk_size, int)
84
+ or chunk_size < 1
85
+ ):
86
+ raise_error(
87
+ "`markers.spheres.chunksize` must be a positive integer, "
88
+ f"but is {chunk_size}"
89
+ )
90
+ return chunk_size
91
+
92
+
93
+ def _get_sphere_voxels(
66
94
  seeds, niimg, radius, allow_overlap, mask_img=None
67
- ):
68
- """Apply mask and get affinity matrix for given seeds.
95
+ ) -> tuple[np.ndarray, "lil_matrix"]:
96
+ """Get the voxels of the spheres at given seed locations.
69
97
 
70
- Utility function to get only the rows which are occupied by sphere at
71
- given seed locations and the provided radius. Rows are in target_affine and
72
- target_shape space.
98
+ The voxels only depend on the geometry (and the mask), so the data of
99
+ ``niimg`` is not read.
73
100
 
74
101
  Parameters
75
102
  ----------
@@ -79,8 +106,6 @@ def _apply_mask_and_get_affinity(
79
106
  niimg : 3D/4D Niimg-like object
80
107
  See :ref:`extracting_data`.
81
108
  Images to process.
82
- If a 3D niimg is provided, a singleton dimension will be added to
83
- the output to represent the single scan in the niimg.
84
109
  radius : float
85
110
  Indicates, in millimeters, the radius for the sphere around the seed.
86
111
  allow_overlap : boolean
@@ -92,9 +117,9 @@ def _apply_mask_and_get_affinity(
92
117
 
93
118
  Returns
94
119
  -------
95
- X : 2D numpy.ndarray
96
- Signal for each brain voxel in the (masked) niimgs.
97
- shape: (number of scans, number of voxels)
120
+ voxels : 1D numpy.ndarray
121
+ The flat (C order) index in ``niimg`` of each voxel (column of ``A``):
122
+ the voxels in the mask or all the voxels if there is no mask.
98
123
  A : scipy.sparse.lil_matrix
99
124
  Contains the boolean indices for each sphere.
100
125
  shape: (number of seeds, number of voxels)
@@ -102,54 +127,38 @@ def _apply_mask_and_get_affinity(
102
127
  Raises
103
128
  ------
104
129
  ValueError
105
- If ``niimg`` and ``mask_img`` are both provided or
130
+ If ``niimg`` and ``mask_img`` are both not provided or
106
131
  if overlap is detected between spheres.
107
132
 
108
- Warns
109
- -----
110
- RuntimeWarning
111
- If the provided images contain NaN, they will be converted to zeroes.
112
-
113
133
  """
114
134
  seeds = list(seeds)
115
-
116
135
  # Compute world coordinates of all in-mask voxels.
117
136
  if niimg is None:
137
+ if mask_img is None:
138
+ raise_error("Either a niimg or a mask_img must be provided.")
118
139
  mask, affine = masking.load_mask_img(mask_img)
140
+ shape = mask.shape
119
141
  # Get coordinate for all voxels inside of mask
120
142
  mask_coords = np.asarray(np.nonzero(mask)).T.tolist()
121
- X = None
122
-
123
143
  elif mask_img is not None:
124
144
  affine = niimg.affine
145
+ shape = niimg.shape[:3]
125
146
  mask_img = check_niimg_3d(mask_img)
126
147
  mask_img = image.resample_img(
127
148
  mask_img,
128
149
  target_affine=affine,
129
- target_shape=niimg.shape[:3],
150
+ target_shape=shape,
130
151
  interpolation="nearest",
131
152
  )
132
153
  mask, _ = masking.load_mask_img(mask_img)
133
154
  mask_coords = list(zip(*np.where(mask != 0), strict=False))
134
-
135
- X = masking.apply_mask_fmri(niimg, mask_img)
136
-
137
- elif niimg is not None:
138
- affine = niimg.affine
139
- if np.isnan(np.sum(safe_get_data(niimg))):
140
- warn_with_log(
141
- "The imgs you have fed into fit_transform() contains NaN "
142
- "values which will be converted to zeroes."
143
- )
144
- X = safe_get_data(niimg, True).reshape([-1, niimg.shape[3]]).T
145
- else:
146
- X = safe_get_data(niimg).reshape([-1, niimg.shape[3]]).T
147
-
148
- mask_coords = list(np.ndindex(niimg.shape[:3]))
149
-
150
155
  else:
151
- raise_error("Either a niimg or a mask_img must be provided.")
152
-
156
+ affine = niimg.affine
157
+ shape = niimg.shape[:3]
158
+ mask_coords = list(np.ndindex(shape))
159
+ voxels = np.ravel_multi_index(
160
+ tuple(np.asarray(mask_coords, dtype=int).reshape(-1, 3).T), shape
161
+ )
153
162
  # For each seed, get coordinates of nearest voxel
154
163
  nearests = []
155
164
  for sx, sy, sz in seeds:
@@ -190,6 +199,132 @@ def _apply_mask_and_get_affinity(
190
199
  if (not allow_overlap) and np.any(A.sum(axis=0) >= 2):
191
200
  raise_error("Overlap detected between spheres")
192
201
 
202
+ return voxels, A
203
+
204
+
205
+ def _read_signals(niimg, voxels, masked) -> np.ndarray:
206
+ """Read the signals of some voxels, a few volumes at a time.
207
+
208
+ The data is read in chunks of ``markers.spheres.chunksize`` volumes and
209
+ only the signals of ``voxels`` are kept, so the whole data is never in
210
+ memory. The values are the same as extracting the signals from the whole
211
+ data with :func:`nilearn.masking.apply_mask_fmri` (``masked``) or
212
+ :func:`nilearn._utils.niimg.safe_get_data` (not ``masked``).
213
+
214
+ Parameters
215
+ ----------
216
+ niimg : 4D Niimg-like object
217
+ The image to read.
218
+ voxels : 1D numpy.ndarray
219
+ The flat (C order) indices of the voxels to read.
220
+ masked : bool
221
+ Whether the voxels are the ones of a mask: as
222
+ :func:`nilearn.masking.apply_mask_fmri` does, the signals are then
223
+ float32 if the data is not floating point, and the non-finite values
224
+ are set to 0. Otherwise, the signals keep the data type of the image
225
+ and the non-finite values are set to 0 only if the image has NaN
226
+ values, with a warning.
227
+
228
+ Returns
229
+ -------
230
+ numpy.ndarray of shape (number of scans, number of voxels)
231
+ The signals of the voxels.
232
+
233
+ """
234
+ n_scans = niimg.shape[3]
235
+ chunk_size = _get_chunk_size()
236
+ signals = None
237
+ has_nan = False
238
+ for start in range(0, n_scans, chunk_size):
239
+ chunk = np.asanyarray(niimg.dataobj[..., start : start + chunk_size])
240
+ if not masked and not has_nan:
241
+ has_nan = bool(np.isnan(np.sum(chunk)))
242
+ chunk = chunk.reshape(-1, chunk.shape[-1])[voxels].T
243
+ if masked and chunk.dtype.kind != "f":
244
+ chunk = chunk.astype(np.float32)
245
+ if signals is None:
246
+ signals = np.empty((n_scans, len(voxels)), dtype=chunk.dtype)
247
+ signals[start : start + chunk.shape[0]] = chunk
248
+ if masked or has_nan:
249
+ if has_nan:
250
+ warn_with_log(
251
+ "The imgs you have fed into fit_transform() contains NaN "
252
+ "values which will be converted to zeroes."
253
+ )
254
+ signals[~np.isfinite(signals)] = 0
255
+ return signals
256
+
257
+
258
+ def _apply_mask_and_get_affinity(
259
+ seeds, niimg, radius, allow_overlap, mask_img=None
260
+ ):
261
+ """Apply mask and get affinity matrix for given seeds.
262
+
263
+ Utility function to get only the rows which are occupied by sphere at
264
+ given seed locations and the provided radius. Rows are in target_affine and
265
+ target_shape space.
266
+
267
+ Parameters
268
+ ----------
269
+ seeds : List of triplets of coordinates in native space
270
+ Seed definitions. List of coordinates of the seeds in the same space
271
+ as target_affine.
272
+ niimg : 3D/4D Niimg-like object
273
+ See :ref:`extracting_data`.
274
+ Images to process.
275
+ If a 3D niimg is provided, a singleton dimension will be added to
276
+ the output to represent the single scan in the niimg.
277
+ radius : float
278
+ Indicates, in millimeters, the radius for the sphere around the seed.
279
+ allow_overlap : boolean
280
+ If False, a ValueError is raised if VOIs overlap
281
+ mask_img : Niimg-like object, optional
282
+ Mask to apply to regions before extracting signals. If niimg is None,
283
+ mask_img is used as a reference space in which the spheres 'indices are
284
+ placed.
285
+
286
+ Returns
287
+ -------
288
+ X : 2D numpy.ndarray
289
+ Signal for each brain voxel in the (masked) niimgs.
290
+ shape: (number of scans, number of voxels)
291
+ A : scipy.sparse.lil_matrix
292
+ Contains the boolean indices for each sphere.
293
+ shape: (number of seeds, number of voxels)
294
+
295
+ Raises
296
+ ------
297
+ ValueError
298
+ If ``niimg`` and ``mask_img`` are both provided or
299
+ if overlap is detected between spheres.
300
+
301
+ Warns
302
+ -----
303
+ RuntimeWarning
304
+ If the provided images contain NaN, they will be converted to zeroes.
305
+
306
+ """
307
+ _, A = _get_sphere_voxels(
308
+ seeds, niimg, radius, allow_overlap, mask_img=mask_img
309
+ )
310
+ X = None
311
+ if niimg is not None and mask_img is not None:
312
+ mask_img = image.resample_img(
313
+ check_niimg_3d(mask_img),
314
+ target_affine=niimg.affine,
315
+ target_shape=niimg.shape[:3],
316
+ interpolation="nearest",
317
+ )
318
+ X = masking.apply_mask_fmri(niimg, mask_img)
319
+ elif niimg is not None:
320
+ if np.isnan(np.sum(safe_get_data(niimg))):
321
+ warn_with_log(
322
+ "The imgs you have fed into fit_transform() contains NaN "
323
+ "values which will be converted to zeroes."
324
+ )
325
+ X = safe_get_data(niimg, True).reshape([-1, niimg.shape[3]]).T
326
+ else:
327
+ X = safe_get_data(niimg).reshape([-1, niimg.shape[3]]).T
193
328
  return X, A
194
329
 
195
330
 
@@ -198,16 +333,17 @@ def _iter_signals_from_spheres(
198
333
  ):
199
334
  """Iterate over spheres.
200
335
 
336
+ Only the signals of the voxels of the spheres are read, a few volumes at
337
+ a time (see :func:`_read_signals`), so the whole data is never in memory.
338
+
201
339
  Parameters
202
340
  ----------
203
341
  seeds : :obj:`list` of triplets of coordinates in native space
204
342
  Seed definitions. List of coordinates of the seeds in the same space
205
343
  as the images (typically MNI or TAL).
206
- niimg : 3D/4D Niimg-like object
344
+ niimg : 4D Niimg-like object
207
345
  See :ref:`extracting_data`.
208
346
  Images to process.
209
- If a 3D niimg is provided, a singleton dimension will be added to
210
- the output to represent the single scan in the niimg.
211
347
  radius: float
212
348
  Indicates, in millimeters, the radius for the sphere around the seed.
213
349
  allow_overlap: boolean
@@ -218,11 +354,17 @@ def _iter_signals_from_spheres(
218
354
  Mask to apply to regions before extracting signals.
219
355
 
220
356
  """
221
- X, A = _apply_mask_and_get_affinity(
357
+ voxels, A = _get_sphere_voxels(
222
358
  seeds, niimg, radius, allow_overlap, mask_img=mask_img
223
359
  )
224
- for row in A.rows:
225
- yield X[:, row]
360
+ rows = [np.asarray(row, dtype=int) for row in A.rows]
361
+ # The voxels of any sphere, and their position in the signals read
362
+ used = np.unique(np.concatenate([np.zeros(0, dtype=int), *rows]))
363
+ position = np.full(len(voxels), -1, dtype=int)
364
+ position[used] = np.arange(len(used))
365
+ signals = _read_signals(niimg, voxels[used], masked=mask_img is not None)
366
+ for row in rows:
367
+ yield signals[:, position[row]]
226
368
 
227
369
 
228
370
  class _JuniferExtractionFunctor:
@@ -321,6 +463,11 @@ class JuniferNiftiSpheresMasker(NiftiSpheresMasker):
321
463
  * it allows to pass any callable as the ``agg_func`` parameter.
322
464
  * empty spheres do not create an error. Instead, ``agg_func`` is applied to
323
465
  an empty array and the result is passed.
466
+ * only the signals of the voxels of the spheres are read, a few volumes at
467
+ a time (``markers.spheres.chunksize``), so the whole data is never in
468
+ memory.
469
+ * ``reports`` is False by default, as the data for the reports (e.g., the
470
+ middle volume of the resampled images) needs the whole data in memory.
324
471
 
325
472
  Parameters
326
473
  ----------
@@ -359,6 +506,9 @@ class JuniferNiftiSpheresMasker(NiftiSpheresMasker):
359
506
  self.agg_func = agg_func
360
507
  # nilearn's default (False) is deprecated, use the new equivalent
361
508
  kwargs.setdefault("standardize", None)
509
+ # The reports are not used, and computing their data at fit time
510
+ # loads (and resamples) the whole data
511
+ kwargs.setdefault("reports", False)
362
512
  super().__init__(
363
513
  seeds=seeds,
364
514
  radius=radius,
@@ -3,6 +3,8 @@
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
4
  # License: AGPL
5
5
 
6
+ from pathlib import Path
7
+
6
8
  import nibabel
7
9
  import numpy as np
8
10
  import pytest
@@ -12,6 +14,12 @@ from nilearn.maskers import NiftiSpheresMasker
12
14
  from numpy.testing import assert_array_equal
13
15
 
14
16
  from junifer.external.nilearn import JuniferNiftiSpheresMasker
17
+ from junifer.external.nilearn.junifer_nifti_spheres_masker import (
18
+ _apply_mask_and_get_affinity,
19
+ _get_sphere_voxels,
20
+ _iter_signals_from_spheres,
21
+ )
22
+ from junifer.testing import config_override
15
23
 
16
24
 
17
25
  # New BSD License
@@ -397,3 +405,213 @@ def test_junifer_and_nilearn_mean_agg_are_equal(
397
405
  # Checks
398
406
  assert junifer_output.shape == nilearn_output.shape
399
407
  np.testing.assert_almost_equal(junifer_output, nilearn_output)
408
+
409
+
410
+ def _spheres_data(
411
+ tmp_path: Path, dtype: str = "float32", with_nan: bool = True
412
+ ) -> tuple[nibabel.Nifti1Image, nibabel.Nifti1Image, list]:
413
+ """Create a file-backed 4D image, a mask and seeds for the spheres."""
414
+ rng = np.random.default_rng(42)
415
+ affine = np.diag([3.0, 3.0, 3.0, 1.0])
416
+ affine[:3, 3] = -30
417
+ data = rng.normal(100, 10, size=(21, 21, 21, 23))
418
+ if with_nan:
419
+ data[10, 10, 10, 3] = np.nan
420
+ nibabel.save(
421
+ nibabel.Nifti1Image(data.astype(dtype), affine), tmp_path / "data.nii"
422
+ )
423
+ mask = np.zeros((21, 21, 21), dtype="int8")
424
+ mask[4:17, 3:18, 5:16] = 1
425
+ mask_img = nibabel.Nifti1Image(mask, affine)
426
+ # The last seed is outside the image, so its sphere is empty
427
+ seeds = [(0, 0, 0), (12, -9, 6), (-24, 24, 24), (100, 100, 100)]
428
+ return nibabel.load(tmp_path / "data.nii"), mask_img, seeds
429
+
430
+
431
+ @pytest.mark.parametrize("chunk_size", [1, 5, 23, 100])
432
+ @pytest.mark.parametrize("masked", [True, False])
433
+ @pytest.mark.parametrize(
434
+ "dtype, with_nan",
435
+ [
436
+ ("float32", True),
437
+ ("float32", False),
438
+ ("float64", True),
439
+ ("int16", False),
440
+ ],
441
+ )
442
+ def test_iter_signals_from_spheres_chunks(
443
+ tmp_path: Path, chunk_size: int, masked: bool, dtype: str, with_nan: bool
444
+ ) -> None:
445
+ """Test the signals of the spheres read in chunks of volumes.
446
+
447
+ They are the same as the ones extracted from the whole data.
448
+
449
+ Parameters
450
+ ----------
451
+ tmp_path : pathlib.Path
452
+ The path to the test directory.
453
+ chunk_size : int
454
+ The parametrized number of volumes to read at once.
455
+ masked : bool
456
+ The parametrized use of a mask.
457
+ dtype : str
458
+ The parametrized data type.
459
+ with_nan : bool
460
+ The parametrized presence of a NaN value in the data.
461
+
462
+ """
463
+ img, mask_img, seeds = _spheres_data(tmp_path, dtype, with_nan)
464
+ mask_img = mask_img if masked else None
465
+ X, A = _apply_mask_and_get_affinity(
466
+ seeds, img, radius=4.0, allow_overlap=True, mask_img=mask_img
467
+ )
468
+ with config_override("markers.spheres.chunksize", chunk_size):
469
+ signals = list(
470
+ _iter_signals_from_spheres(
471
+ seeds, img, radius=4.0, allow_overlap=True, mask_img=mask_img
472
+ )
473
+ )
474
+ assert len(signals) == len(seeds)
475
+ assert signals[-1].shape == (23, 0)
476
+ for row, t_signals in zip(A.rows, signals, strict=True):
477
+ assert t_signals.dtype == X.dtype
478
+ assert_array_equal(t_signals, X[:, row])
479
+
480
+
481
+ def test_JuniferNiftiSpheresMasker_input_unchanged(tmp_path: Path) -> None:
482
+ """Test the masker does not change the input data.
483
+
484
+ Parameters
485
+ ----------
486
+ tmp_path : pathlib.Path
487
+ The path to the test directory.
488
+
489
+ """
490
+ img, _, seeds = _spheres_data(tmp_path)
491
+ data = np.asarray(img.dataobj).copy()
492
+ in_memory = nibabel.Nifti1Image(data.copy(), img.affine)
493
+ with pytest.warns(RuntimeWarning, match="NaN values"):
494
+ JuniferNiftiSpheresMasker(
495
+ seeds=seeds, radius=4.0, allow_overlap=True
496
+ ).fit_transform(in_memory)
497
+ # The NaN is still there
498
+ assert_array_equal(np.asarray(in_memory.dataobj), data)
499
+
500
+
501
+ @pytest.mark.parametrize("chunk_size", [0, -1, 1.5, True, "10"])
502
+ def test_JuniferNiftiSpheresMasker_chunk_size_error(
503
+ tmp_path: Path, chunk_size: object
504
+ ) -> None:
505
+ """Test the masker with an invalid number of volumes to read at once.
506
+
507
+ Parameters
508
+ ----------
509
+ tmp_path : pathlib.Path
510
+ The path to the test directory.
511
+ chunk_size : object
512
+ The parametrized invalid number of volumes.
513
+
514
+ """
515
+ img, _, seeds = _spheres_data(tmp_path)
516
+ with config_override("markers.spheres.chunksize", chunk_size):
517
+ with pytest.raises(ValueError, match="must be a positive integer"):
518
+ JuniferNiftiSpheresMasker(seeds=seeds, radius=4.0).fit_transform(
519
+ img
520
+ )
521
+
522
+
523
+ def test_JuniferNiftiSpheresMasker_reports() -> None:
524
+ """Test the reports are disabled by default, as they load the data."""
525
+ assert JuniferNiftiSpheresMasker(seeds=[(1, 1, 1)]).reports is False
526
+ masker = JuniferNiftiSpheresMasker(seeds=[(1, 1, 1)], reports=True)
527
+ assert masker.reports is True
528
+
529
+
530
+ def test_get_sphere_voxels_mask_only(tmp_path: Path) -> None:
531
+ """Test the voxels of the spheres with only a mask, without an image.
532
+
533
+ Parameters
534
+ ----------
535
+ tmp_path : pathlib.Path
536
+ The path to the test directory.
537
+
538
+ """
539
+ img, mask_img, seeds = _spheres_data(tmp_path)
540
+ voxels, A = _get_sphere_voxels(
541
+ seeds, img, radius=4.0, allow_overlap=True, mask_img=mask_img
542
+ )
543
+ mask_voxels, mask_A = _get_sphere_voxels(
544
+ seeds, None, radius=4.0, allow_overlap=True, mask_img=mask_img
545
+ )
546
+ assert_array_equal(mask_voxels, voxels)
547
+ assert mask_A.rows.tolist() == A.rows.tolist()
548
+ # No signals without an image
549
+ X, _ = _apply_mask_and_get_affinity(
550
+ seeds, None, radius=4.0, allow_overlap=True, mask_img=mask_img
551
+ )
552
+ assert X is None
553
+ with pytest.raises(ValueError, match="Either a niimg or a mask_img"):
554
+ _get_sphere_voxels(seeds, None, radius=4.0, allow_overlap=True)
555
+
556
+
557
+ @pytest.mark.parametrize("dtype", ["auto", "float64"])
558
+ def test_JuniferNiftiSpheresMasker_dtype(tmp_path: Path, dtype: str) -> None:
559
+ """Test the data type of the signals is the same as with nilearn.
560
+
561
+ Parameters
562
+ ----------
563
+ tmp_path : pathlib.Path
564
+ The path to the test directory.
565
+ dtype : str
566
+ The parametrized data type of the extraction.
567
+
568
+ """
569
+ img, _, seeds = _spheres_data(tmp_path, "float32", with_nan=False)
570
+ junifer_signals = JuniferNiftiSpheresMasker(
571
+ seeds=seeds[:3], radius=4.0, allow_overlap=True, dtype=dtype
572
+ ).fit_transform(img)
573
+ nilearn_signals = NiftiSpheresMasker(
574
+ seeds=seeds[:3], radius=4.0, allow_overlap=True, dtype=dtype
575
+ ).fit_transform(img)
576
+ assert junifer_signals.dtype == nilearn_signals.dtype
577
+ np.testing.assert_allclose(junifer_signals, nilearn_signals, rtol=1e-6)
578
+
579
+
580
+ @pytest.mark.parametrize("chunk_size", [5, 100])
581
+ @pytest.mark.parametrize("masked", [True, False])
582
+ @pytest.mark.parametrize("with_nan", [True, False])
583
+ def test_junifer_and_nilearn_spheres_are_equal(
584
+ tmp_path: Path, chunk_size: int, masked: bool, with_nan: bool
585
+ ) -> None:
586
+ """Test the signals of the spheres are the same as with nilearn.
587
+
588
+ The signals are read in chunks of volumes from a file-backed image.
589
+
590
+ Parameters
591
+ ----------
592
+ tmp_path : pathlib.Path
593
+ The path to the test directory.
594
+ chunk_size : int
595
+ The parametrized number of volumes to read at once.
596
+ masked : bool
597
+ The parametrized use of a mask.
598
+ with_nan : bool
599
+ The parametrized presence of a NaN value in the data.
600
+
601
+ """
602
+ img, mask_img, seeds = _spheres_data(tmp_path, with_nan=with_nan)
603
+ # Only the seeds with voxels in the mask, as nilearn fails for empty
604
+ # spheres
605
+ params = {
606
+ "seeds": seeds[:2],
607
+ "radius": 4.0,
608
+ "allow_overlap": True,
609
+ "mask_img": mask_img if masked else None,
610
+ }
611
+ with config_override("markers.spheres.chunksize", chunk_size):
612
+ junifer_signals = JuniferNiftiSpheresMasker(**params).fit_transform(
613
+ img
614
+ )
615
+ nilearn_signals = NiftiSpheresMasker(**params).fit_transform(img)
616
+ assert junifer_signals.dtype == nilearn_signals.dtype
617
+ np.testing.assert_allclose(junifer_signals, nilearn_signals, rtol=1e-6)
@@ -194,6 +194,8 @@ class MapsAggregation(BaseMarker):
194
194
  mask_img=mask_img,
195
195
  resampling_target=None,
196
196
  standardize=None,
197
+ # Not used, and computing their data at fit time reads the data
198
+ reports=False,
197
199
  )
198
200
  # Mask the input data and extract data
199
201
  # nilearn maskers return 1D arrays for 3D images, keep 2D
@@ -220,7 +220,9 @@ class ParcelAggregation(BaseMarker):
220
220
  # tailored to the input image, so no target affine is needed (it
221
221
  # would make nilearn crop and copy the input image)
222
222
  logger.debug("Masking")
223
- masker = NiftiMasker(parcellation_bin, standardize=None)
223
+ # No reports, as they are not used and computing their data at fit
224
+ # time reads the data
225
+ masker = NiftiMasker(parcellation_bin, standardize=None, reports=False)
224
226
  # Mask the input data and the parcellation
225
227
  # nilearn maskers return 1D arrays for 3D images, keep 2D
226
228
  data = np.atleast_2d(masker.fit_transform(t_input_img))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: junifer
3
- Version: 0.0.8.dev339
3
+ Version: 0.0.8.dev346
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>
@@ -157,6 +157,7 @@ docs/changes/newsfragments/530.enh.1
157
157
  docs/changes/newsfragments/531.enh
158
158
  docs/changes/newsfragments/533.enh
159
159
  docs/changes/newsfragments/533.enh.1
160
+ docs/changes/newsfragments/534.enh
160
161
  docs/extending/confounds_format.rst
161
162
  docs/extending/coordinates.rst
162
163
  docs/extending/data_dump_asset.rst
@@ -141,6 +141,7 @@
141
141
  "docs/changes/newsfragments/531.enh",
142
142
  "docs/changes/newsfragments/533.enh",
143
143
  "docs/changes/newsfragments/533.enh.1",
144
+ "docs/changes/newsfragments/534.enh",
144
145
  "docs/conf.py",
145
146
  "docs/contribution.rst",
146
147
  "docs/extending/confounds_format.rst",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "tag": "0.0.7",
3
- "distance": 339,
4
- "node": "gd12ff17f7d2d27a6d19b9984c848cbc330517746",
3
+ "distance": 346,
4
+ "node": "g936d23c84af77f42851ae98deb7080b16556b831",
5
5
  "dirty": false,
6
6
  "branch": "main",
7
7
  "node_date": "2026-10-19"