junifer 0.0.8.dev335__tar.gz → 0.0.8.dev339__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.dev335/junifer.egg-info → junifer-0.0.8.dev339}/PKG-INFO +1 -1
  2. junifer-0.0.8.dev339/docs/changes/newsfragments/533.enh +1 -0
  3. junifer-0.0.8.dev339/docs/changes/newsfragments/533.enh.1 +1 -0
  4. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/_version.py +3 -3
  5. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/_afni_falff.py +12 -2
  6. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/_junifer_falff.py +19 -7
  7. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/falff_base.py +23 -3
  8. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/falff_maps.py +1 -1
  9. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/falff_parcels.py +1 -1
  10. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/falff_spheres.py +1 -1
  11. junifer-0.0.8.dev339/junifer/markers/falff/tests/test_falff_mask.py +99 -0
  12. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/reho_base.py +3 -40
  13. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/tests/test_marker_utils.py +40 -1
  14. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/utils.py +44 -0
  15. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/tests/test_workdir_manager.py +24 -0
  16. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/workdir_manager.py +23 -13
  17. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/_temporal_filter.py +4 -2
  18. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/_temporal_slicer.py +4 -2
  19. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/confounds/fmriprep_confound_remover.py +4 -2
  20. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +7 -0
  21. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/smoothing/_nilearn_smoothing.py +4 -1
  22. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/smoothing/tests/test_smoothing.py +6 -0
  23. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/tests/test_temporal_filter.py +6 -0
  24. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/tests/test_temporal_slicer.py +6 -0
  25. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339/junifer.egg-info}/PKG-INFO +1 -1
  26. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer.egg-info/SOURCES.txt +3 -0
  27. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer.egg-info/scm_file_list.json +3 -0
  28. junifer-0.0.8.dev339/junifer.egg-info/scm_version.json +8 -0
  29. junifer-0.0.8.dev335/junifer.egg-info/scm_version.json +0 -8
  30. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.dockerignore +0 -0
  31. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  32. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  33. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
  34. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
  35. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  36. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
  37. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/dependabot.yml +0 -0
  38. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/pull_request_template.md +0 -0
  39. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/workflows/check-stale.yml +0 -0
  40. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/workflows/ci.yml +0 -0
  41. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/workflows/docker-publish.yml +0 -0
  42. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/workflows/docs-preview.yml +0 -0
  43. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/workflows/docs.yml +0 -0
  44. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/workflows/lint.yml +0 -0
  45. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.github/workflows/publish.yml +0 -0
  46. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.gitignore +0 -0
  47. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.gitmodules +0 -0
  48. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.pre-commit-config.yaml +0 -0
  49. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/.python-version +0 -0
  50. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/AUTHORS.rst +0 -0
  51. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/Dockerfile +0 -0
  52. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/Dockerfile-ci +0 -0
  53. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/LICENSE.md +0 -0
  54. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/README.md +0 -0
  55. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/codecov.yml +0 -0
  56. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/conda-env.yml +0 -0
  57. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/Makefile +0 -0
  58. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/_static/css/custom.css +0 -0
  59. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/_static/css/version_selector.css +0 -0
  60. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/_static/js/custom.js +0 -0
  61. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/_templates/versions.html +0 -0
  62. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/api.rst +0 -0
  63. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/cli.rst +0 -0
  64. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/configs.rst +0 -0
  65. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/data.rst +0 -0
  66. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/datagrabbers.rst +0 -0
  67. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/datareaders.rst +0 -0
  68. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/index.rst +0 -0
  69. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/markers.rst +0 -0
  70. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/nilearn.rst +0 -0
  71. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/onthefly.rst +0 -0
  72. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/pipeline.rst +0 -0
  73. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/preprocessing.rst +0 -0
  74. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/stats.rst +0 -0
  75. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/storage.rst +0 -0
  76. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/testing.rst +0 -0
  77. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/api/utils.rst +0 -0
  78. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/builtin.rst +0 -0
  79. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/contributors.inc +0 -0
  80. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/.gitignore +0 -0
  81. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/239.enh +0 -0
  82. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/364.doc +0 -0
  83. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/364.enh +0 -0
  84. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/364.feature +0 -0
  85. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/474.misc +0 -0
  86. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/482.bugfix +0 -0
  87. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/492.bugfix +0 -0
  88. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/499.enh +0 -0
  89. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/502.bugfix +0 -0
  90. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/503.enh +0 -0
  91. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/504.bugfix +0 -0
  92. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/504.misc +0 -0
  93. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/509.enh +0 -0
  94. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/510.bugfix +0 -0
  95. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/511.bugfix +0 -0
  96. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/511.bugfix.1 +0 -0
  97. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/511.change +0 -0
  98. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/511.enh +0 -0
  99. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/511.enh.1 +0 -0
  100. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/511.feature +0 -0
  101. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/511.misc +0 -0
  102. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/511.misc.1 +0 -0
  103. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/513.doc +0 -0
  104. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/513.misc +0 -0
  105. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/514.bugfix +0 -0
  106. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/514.bugfix.1 +0 -0
  107. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/514.enh +0 -0
  108. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/515.doc +0 -0
  109. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/515.enh +0 -0
  110. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/515.enh.1 +0 -0
  111. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/515.misc +0 -0
  112. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/515.misc.1 +0 -0
  113. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/516.bugfix +0 -0
  114. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/516.bugfix.1 +0 -0
  115. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/516.bugfix.2 +0 -0
  116. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/516.change +0 -0
  117. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/516.change.1 +0 -0
  118. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/516.misc +0 -0
  119. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.bugfix +0 -0
  120. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.bugfix.1 +0 -0
  121. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.bugfix.2 +0 -0
  122. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.bugfix.3 +0 -0
  123. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.bugfix.4 +0 -0
  124. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.bugfix.5 +0 -0
  125. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.bugfix.6 +0 -0
  126. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.change +0 -0
  127. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.doc +0 -0
  128. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.misc +0 -0
  129. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.misc.1 +0 -0
  130. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.misc.2 +0 -0
  131. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.misc.3 +0 -0
  132. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/520.removal +0 -0
  133. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/521.bugfix +0 -0
  134. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/522.bugfix +0 -0
  135. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/522.enh +0 -0
  136. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/523.misc +0 -0
  137. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.bugfix +0 -0
  138. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.bugfix.1 +0 -0
  139. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.change +0 -0
  140. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.change.1 +0 -0
  141. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.change.2 +0 -0
  142. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.doc +0 -0
  143. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.enh +0 -0
  144. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.feature +0 -0
  145. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/524.feature.1 +0 -0
  146. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.bugfix +0 -0
  147. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.bugfix.1 +0 -0
  148. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.change +0 -0
  149. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.change.1 +0 -0
  150. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.change.2 +0 -0
  151. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.change.3 +0 -0
  152. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.change.4 +0 -0
  153. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.doc +0 -0
  154. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.enh +0 -0
  155. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/525.feature +0 -0
  156. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/528.bugfix +0 -0
  157. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/528.change +0 -0
  158. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/528.doc +0 -0
  159. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/529.bugfix +0 -0
  160. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/529.bugfix.1 +0 -0
  161. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/529.bugfix.2 +0 -0
  162. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/529.bugfix.3 +0 -0
  163. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/529.doc +0 -0
  164. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/529.enh +0 -0
  165. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/530.change +0 -0
  166. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/530.enh +0 -0
  167. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/530.enh.1 +0 -0
  168. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/changes/newsfragments/531.enh +0 -0
  169. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/conf.py +0 -0
  170. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/contribution.rst +0 -0
  171. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/confounds_format.rst +0 -0
  172. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/coordinates.rst +0 -0
  173. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/data_dump_asset.rst +0 -0
  174. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/data_registries.rst +0 -0
  175. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/data_types.rst +0 -0
  176. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/datagrabber.rst +0 -0
  177. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/dependencies.rst +0 -0
  178. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/extension.rst +0 -0
  179. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/index.rst +0 -0
  180. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/logging.rst +0 -0
  181. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/maps.rst +0 -0
  182. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/marker.rst +0 -0
  183. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/masks.rst +0 -0
  184. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/parcellations.rst +0 -0
  185. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/plugins.rst +0 -0
  186. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/extending/preprocessor.rst +0 -0
  187. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/faq.rst +0 -0
  188. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/help.rst +0 -0
  189. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/images/junifer_logo.png +0 -0
  190. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/index.rst +0 -0
  191. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/installation.rst +0 -0
  192. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/internals.rst +0 -0
  193. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/links.inc +0 -0
  194. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/maintaining.rst +0 -0
  195. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/poly.py +0 -0
  196. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/poly_files/patches/version_banner.html +0 -0
  197. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/poly_files/patches/versions.html +0 -0
  198. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/poly_files/templates/index.html +0 -0
  199. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/starting.rst +0 -0
  200. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/understanding/data.rst +0 -0
  201. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/understanding/datagrabber.rst +0 -0
  202. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/understanding/datareader.rst +0 -0
  203. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/understanding/index.rst +0 -0
  204. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/understanding/marker.rst +0 -0
  205. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/understanding/pipeline.rst +0 -0
  206. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/understanding/preprocess.rst +0 -0
  207. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/understanding/storage.rst +0 -0
  208. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/using/codeless.rst +0 -0
  209. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/using/configuring.rst +0 -0
  210. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/using/dumping.rst +0 -0
  211. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/using/index.rst +0 -0
  212. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/using/masks.rst +0 -0
  213. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/using/queueing.rst +0 -0
  214. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/using/running.rst +0 -0
  215. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/docs/whats_new.rst +0 -0
  216. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/README.rst +0 -0
  217. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/norun_hcpfc_pearson.py +0 -0
  218. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/norun_ukbvm_gmd.py +0 -0
  219. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/run_compute_parcel_mean.py +0 -0
  220. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/run_datagrabber_bids_datalad.py +0 -0
  221. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/run_ets_rss_marker.py +0 -0
  222. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/run_junifer_julearn.py +0 -0
  223. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/run_run_gmd_mean.py +0 -0
  224. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/yamls/gmd_mean.yaml +0 -0
  225. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
  226. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/yamls/partly_cloudy_agg_mean_tian.yml +0 -0
  227. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/examples/yamls/ukb_gmd_mean.yaml +0 -0
  228. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/ignore_words.txt +0 -0
  229. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/__init__.py +0 -0
  230. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/__init__.pyi +0 -0
  231. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/__init__.py +0 -0
  232. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/__init__.pyi +0 -0
  233. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/decorators.py +0 -0
  234. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/functions.py +0 -0
  235. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/py.typed +0 -0
  236. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/queue_context/__init__.py +0 -0
  237. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/queue_context/__init__.pyi +0 -0
  238. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/queue_context/gnu_parallel_local_adapter.py +0 -0
  239. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/queue_context/htcondor_adapter.py +0 -0
  240. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/queue_context/py.typed +0 -0
  241. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/queue_context/queue_context_adapter.py +0 -0
  242. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +0 -0
  243. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/queue_context/tests/test_htcondor_adapter.py +0 -0
  244. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
  245. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/afni/3dRSFC +0 -0
  246. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/afni/3dReHo +0 -0
  247. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/afni/afni +0 -0
  248. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/afni/run_afni_docker.sh +0 -0
  249. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/ants/ResampleImage +0 -0
  250. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/ants/antsApplyTransforms +0 -0
  251. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
  252. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/ants/run_ants_docker.sh +0 -0
  253. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/freesurfer/mri_binarize +0 -0
  254. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/freesurfer/mri_mc +0 -0
  255. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/freesurfer/mri_pretess +0 -0
  256. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/freesurfer/mris_convert +0 -0
  257. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/freesurfer/run_freesurfer_docker.sh +0 -0
  258. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/fsl/applywarp +0 -0
  259. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/fsl/flirt +0 -0
  260. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/fsl/img2imgcoord +0 -0
  261. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
  262. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/fsl/std2imgcoord +0 -0
  263. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/run_conda.bash +0 -0
  264. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/run_conda.zsh +0 -0
  265. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/run_venv.bash +0 -0
  266. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/res/run_venv.zsh +0 -0
  267. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/tests/test_decorators.py +0 -0
  268. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/api/tests/test_functions.py +0 -0
  269. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/__init__.py +0 -0
  270. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/__init__.pyi +0 -0
  271. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/cli.py +0 -0
  272. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/parser.py +0 -0
  273. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/py.typed +0 -0
  274. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/tests/data/gmd_mean.yaml +0 -0
  275. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/tests/data/gmd_mean_htcondor.yaml +0 -0
  276. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +0 -0
  277. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/tests/test_cli.py +0 -0
  278. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/tests/test_cli_utils.py +0 -0
  279. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/cli/utils.py +0 -0
  280. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/__init__.py +0 -0
  281. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/__init__.pyi +0 -0
  282. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/__init__.py +0 -0
  283. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/__init__.pyi +0 -0
  284. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
  285. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/__init__.pyi +0 -0
  286. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
  287. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
  288. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
  289. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/py.typed +0 -0
  290. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
  291. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
  292. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
  293. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
  294. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
  295. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
  296. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
  297. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/juseless/py.typed +0 -0
  298. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/configs/py.typed +0 -0
  299. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/conftest.py +0 -0
  300. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/__init__.py +0 -0
  301. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/__init__.pyi +0 -0
  302. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/_dispatch.py +0 -0
  303. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/coordinates/__init__.py +0 -0
  304. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/coordinates/__init__.pyi +0 -0
  305. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/coordinates/_ants_coordinates_warper.py +0 -0
  306. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/coordinates/_coordinates.py +0 -0
  307. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/coordinates/_fsl_coordinates_warper.py +0 -0
  308. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/coordinates/tests/test_coordinates.py +0 -0
  309. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/coordinates/tests/test_coordinates_names.py +0 -0
  310. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/maps/__init__.py +0 -0
  311. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/maps/__init__.pyi +0 -0
  312. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/maps/_ants_maps_warper.py +0 -0
  313. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/maps/_fsl_maps_warper.py +0 -0
  314. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/maps/_maps.py +0 -0
  315. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/maps/tests/test_maps.py +0 -0
  316. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/masks/__init__.py +0 -0
  317. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/masks/__init__.pyi +0 -0
  318. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/masks/_ants_mask_warper.py +0 -0
  319. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/masks/_fsl_mask_warper.py +0 -0
  320. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/masks/_masks.py +0 -0
  321. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/masks/tests/test_masks.py +0 -0
  322. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/parcellations/__init__.py +0 -0
  323. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/parcellations/__init__.pyi +0 -0
  324. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/parcellations/_ants_parcellation_warper.py +0 -0
  325. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/parcellations/_fsl_parcellation_warper.py +0 -0
  326. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/parcellations/_parcellations.py +0 -0
  327. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/parcellations/tests/test_parcellations.py +0 -0
  328. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/pipeline_data_registry_base.py +0 -0
  329. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/py.typed +0 -0
  330. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/template_spaces.py +0 -0
  331. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/tests/test_data_utils.py +0 -0
  332. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/tests/test_dispatch.py +0 -0
  333. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/tests/test_template_spaces.py +0 -0
  334. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/data/utils.py +0 -0
  335. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/__init__.py +0 -0
  336. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/__init__.pyi +0 -0
  337. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/__init__.py +0 -0
  338. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/__init__.pyi +0 -0
  339. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/_types.py +0 -0
  340. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/id1000.py +0 -0
  341. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/piop1.py +0 -0
  342. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/piop2.py +0 -0
  343. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/py.typed +0 -0
  344. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
  345. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
  346. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
  347. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/base.py +0 -0
  348. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/datalad_base.py +0 -0
  349. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/dmcc13_benchmark.py +0 -0
  350. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/hcp1200/__init__.py +0 -0
  351. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/hcp1200/__init__.pyi +0 -0
  352. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
  353. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
  354. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/hcp1200/py.typed +0 -0
  355. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
  356. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/multiple.py +0 -0
  357. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/pattern.py +0 -0
  358. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/pattern_datalad.py +0 -0
  359. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/pattern_validation_mixin.py +0 -0
  360. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/py.typed +0 -0
  361. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/tests/test_base.py +0 -0
  362. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
  363. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +0 -0
  364. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/tests/test_multiple.py +0 -0
  365. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/tests/test_pattern.py +0 -0
  366. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
  367. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datagrabber/tests/test_pattern_validation_mixin.py +0 -0
  368. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datareader/__init__.py +0 -0
  369. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datareader/__init__.pyi +0 -0
  370. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datareader/default.py +0 -0
  371. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datareader/py.typed +0 -0
  372. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/datareader/tests/test_default_reader.py +0 -0
  373. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.codecov.yml +0 -0
  374. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.codespellignore +0 -0
  375. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  376. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  377. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  378. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/questions-help-support.md +0 -0
  379. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/dependabot.yml +0 -0
  380. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/workflows/build.yml +0 -0
  381. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/workflows/code-style.yml +0 -0
  382. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/workflows/doc.yml +0 -0
  383. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/workflows/publish.yml +0 -0
  384. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.github/workflows/pytest.yml +0 -0
  385. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/.gitignore +0 -0
  386. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/LICENSE +0 -0
  387. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/README.md +0 -0
  388. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/__init__.py +0 -0
  389. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/_version.py +0 -0
  390. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/asymmetry.py +0 -0
  391. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/brainprint.py +0 -0
  392. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/cli/__init__.py +0 -0
  393. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/cli/help_text.py +0 -0
  394. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/cli/parser.py +0 -0
  395. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/cli/utils.py +0 -0
  396. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/commands/__init__.py +0 -0
  397. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/commands/sys_info.py +0 -0
  398. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/surfaces.py +0 -0
  399. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/utils/__init__.py +0 -0
  400. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/utils/_config.py +0 -0
  401. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/utils/tests/__init__.py +0 -0
  402. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/utils/tests/test_config.py +0 -0
  403. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/brainprint/utils/utils.py +0 -0
  404. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/Makefile +0 -0
  405. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/_static/.gitkeep +0 -0
  406. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/_templates/autosummary/class.rst +0 -0
  407. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/_templates/autosummary/function.rst +0 -0
  408. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/_templates/autosummary/module.rst +0 -0
  409. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/api/index.rst +0 -0
  410. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/conf.py +0 -0
  411. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/index.rst +0 -0
  412. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/links.inc +0 -0
  413. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/make.bat +0 -0
  414. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/doc/references.bib +0 -0
  415. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/pyproject.toml +0 -0
  416. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/BrainPrint/setup.py +0 -0
  417. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/__init__.py +0 -0
  418. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/__init__.pyi +0 -0
  419. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/nilearn/__init__.py +0 -0
  420. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/nilearn/__init__.pyi +0 -0
  421. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/nilearn/junifer_connectivity_measure.py +0 -0
  422. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
  423. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/nilearn/py.typed +0 -0
  424. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +0 -0
  425. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
  426. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/external/py.typed +0 -0
  427. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/__init__.py +0 -0
  428. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/__init__.pyi +0 -0
  429. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/base.py +0 -0
  430. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/brainprint.py +0 -0
  431. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/__init__.py +0 -0
  432. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/complexity_base.py +0 -0
  433. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/hurst_exponent.py +0 -0
  434. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
  435. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/perm_entropy.py +0 -0
  436. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/py.typed +0 -0
  437. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/range_entropy.py +0 -0
  438. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/range_entropy_auc.py +0 -0
  439. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/sample_entropy.py +0 -0
  440. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
  441. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_complexity_registry.py +0 -0
  442. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
  443. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
  444. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
  445. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
  446. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
  447. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
  448. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
  449. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
  450. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/ets_rss.py +0 -0
  451. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/__init__.py +0 -0
  452. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/__init__.pyi +0 -0
  453. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/py.typed +0 -0
  454. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/tests/test_falff_maps.py +0 -0
  455. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
  456. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
  457. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/__init__.py +0 -0
  458. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/__init__.pyi +0 -0
  459. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
  460. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/edge_functional_connectivity_maps.py +0 -0
  461. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
  462. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
  463. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
  464. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/functional_connectivity_maps.py +0 -0
  465. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
  466. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
  467. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/py.typed +0 -0
  468. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
  469. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_maps.py +0 -0
  470. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
  471. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
  472. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
  473. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_maps.py +0 -0
  474. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
  475. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
  476. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/maps_aggregation.py +0 -0
  477. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/parcel_aggregation.py +0 -0
  478. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/py.typed +0 -0
  479. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/__init__.py +0 -0
  480. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/__init__.pyi +0 -0
  481. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/_afni_reho.py +0 -0
  482. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/_junifer_reho.py +0 -0
  483. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/py.typed +0 -0
  484. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/reho_maps.py +0 -0
  485. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/reho_parcels.py +0 -0
  486. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/reho_spheres.py +0 -0
  487. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/tests/test_junifer_reho.py +0 -0
  488. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/tests/test_reho_maps.py +0 -0
  489. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
  490. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
  491. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/sphere_aggregation.py +0 -0
  492. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/__init__.py +0 -0
  493. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/__init__.pyi +0 -0
  494. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/py.typed +0 -0
  495. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
  496. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/temporal_snr_maps.py +0 -0
  497. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
  498. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
  499. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
  500. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/tests/test_temporal_snr_maps.py +0 -0
  501. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
  502. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
  503. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/tests/test_brainprint.py +0 -0
  504. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/tests/test_ets_rss.py +0 -0
  505. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/tests/test_lost_regions.py +0 -0
  506. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/tests/test_maps_aggregation.py +0 -0
  507. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/tests/test_markers_base.py +0 -0
  508. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
  509. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
  510. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/onthefly/__init__.py +0 -0
  511. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/onthefly/__init__.pyi +0 -0
  512. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/onthefly/_brainprint.py +0 -0
  513. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/onthefly/py.typed +0 -0
  514. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/onthefly/read_transform.py +0 -0
  515. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/onthefly/tests/test_read_transform.py +0 -0
  516. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/__init__.py +0 -0
  517. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/__init__.pyi +0 -0
  518. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/_data_object_dumper.py +0 -0
  519. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/marker_collection.py +0 -0
  520. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/pipeline_component_registry.py +0 -0
  521. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/pipeline_step_mixin.py +0 -0
  522. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/py.typed +0 -0
  523. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/tests/test_data_object_dumper.py +0 -0
  524. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/tests/test_marker_collection.py +0 -0
  525. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/tests/test_pipeline_component_registry.py +0 -0
  526. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
  527. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
  528. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/update_meta_mixin.py +0 -0
  529. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/pipeline/utils.py +0 -0
  530. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/__init__.py +0 -0
  531. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/__init__.pyi +0 -0
  532. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/base.py +0 -0
  533. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/confounds/__init__.py +0 -0
  534. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/confounds/__init__.pyi +0 -0
  535. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/confounds/py.typed +0 -0
  536. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/py.typed +0 -0
  537. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/smoothing/__init__.py +0 -0
  538. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/smoothing/__init__.pyi +0 -0
  539. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/smoothing/_afni_smoothing.py +0 -0
  540. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/smoothing/_fsl_smoothing.py +0 -0
  541. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/smoothing/py.typed +0 -0
  542. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/smoothing/smoothing.py +0 -0
  543. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/tests/test_preprocess_base.py +0 -0
  544. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/__init__.py +0 -0
  545. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/__init__.pyi +0 -0
  546. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/_ants_warper.py +0 -0
  547. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/_fsl_warper.py +0 -0
  548. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/_utils.py +0 -0
  549. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/py.typed +0 -0
  550. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/space_warper.py +0 -0
  551. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/tests/test_space_warper.py +0 -0
  552. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/preprocess/warping/tests/test_warping_utils.py +0 -0
  553. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/py.typed +0 -0
  554. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/stats.py +0 -0
  555. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/__init__.py +0 -0
  556. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/__init__.pyi +0 -0
  557. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/base.py +0 -0
  558. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/hdf5.py +0 -0
  559. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/pandas_base.py +0 -0
  560. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/py.typed +0 -0
  561. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/sqlite.py +0 -0
  562. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/tests/data/collected_h5io_fork.hdf5 +0 -0
  563. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/tests/test_hdf5.py +0 -0
  564. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/tests/test_pandas_base.py +0 -0
  565. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/tests/test_repeated_storage.py +0 -0
  566. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/tests/test_sqlite.py +0 -0
  567. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/tests/test_storage_base.py +0 -0
  568. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/tests/test_utils.py +0 -0
  569. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/storage/utils.py +0 -0
  570. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/__init__.py +0 -0
  571. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/__init__.pyi +0 -0
  572. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
  573. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/datagrabbers.py +0 -0
  574. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/py.typed +0 -0
  575. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/registry.py +0 -0
  576. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/tests/test_adhdtesting_datagrabber.py +0 -0
  577. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
  578. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
  579. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
  580. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/tests/test_testing_registry.py +0 -0
  581. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/tests/test_testing_utils.py +0 -0
  582. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/tests/test_uclacnpvbmtesting_datagrabber.py +0 -0
  583. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/testing/utils.py +0 -0
  584. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/tests/test_main.py +0 -0
  585. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/tests/test_stats.py +0 -0
  586. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/typing/__init__.py +0 -0
  587. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/typing/__init__.pyi +0 -0
  588. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/typing/_typing.py +0 -0
  589. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/typing/py.typed +0 -0
  590. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/__init__.py +0 -0
  591. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/__init__.pyi +0 -0
  592. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/_config.py +0 -0
  593. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/_yaml.py +0 -0
  594. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/fs.py +0 -0
  595. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/helpers.py +0 -0
  596. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/logging.py +0 -0
  597. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/py.typed +0 -0
  598. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/singleton.py +0 -0
  599. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/tests/test_config.py +0 -0
  600. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/tests/test_fs.py +0 -0
  601. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/tests/test_helpers.py +0 -0
  602. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer/utils/tests/test_logging.py +0 -0
  603. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer.egg-info/dependency_links.txt +0 -0
  604. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer.egg-info/entry_points.txt +0 -0
  605. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer.egg-info/requires.txt +0 -0
  606. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/junifer.egg-info/top_level.txt +0 -0
  607. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/justfile +0 -0
  608. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/pyproject.toml +0 -0
  609. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/scripts/start.sh +0 -0
  610. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/setup.cfg +0 -0
  611. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/setup.py +0 -0
  612. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/tools/create_aomic1000_example_dataset.py +0 -0
  613. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/tools/create_aomicpiop1_example_dataset.py +0 -0
  614. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/tools/create_aomicpiop2_example_dataset.py +0 -0
  615. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/tools/create_bids_example_dataset.py +0 -0
  616. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/tools/create_bids_example_dataset_sessions.py +0 -0
  617. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
  618. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/tools/create_hcp1200_example_dataset.py +0 -0
  619. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/tox.ini +0 -0
  620. {junifer-0.0.8.dev335 → junifer-0.0.8.dev339}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: junifer
3
- Version: 0.0.8.dev335
3
+ Version: 0.0.8.dev339
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
+ Restrict the ALFF and fALFF computation of :class:`.ALFFParcels`, :class:`.ALFFSpheres` and :class:`.ALFFMaps` to the voxels in their ``masks`` (with ``-mask`` for AFNI's ``3dRSFC``), as for ReHo, reducing the memory and time (e.g., from 14.5 GB to 9.4 GB and from 7 to 1 minutes for 1200 volumes with AFNI), and do not write the bandpassed time series with ``3dRSFC`` (``-no_rs_out``), as only the parameters are used by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Keep the data of :class:`.fMRIPrepConfoundRemover`, :class:`.TemporalFilter`, :class:`.TemporalSlicer` and :class:`.Smoothing` (with nilearn) in the saved file (memory-mapped) instead of in memory, as for the other preprocessors, releasing its memory during the next steps of the pipeline (e.g., 5 GB for 1200 volumes while running AFNI) by `Fede Raimondo`_
@@ -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.dev335'
22
- __version_tuple__ = version_tuple = (0, 0, 8, 'dev335')
21
+ __version__ = version = '0.0.8.dev339'
22
+ __version_tuple__ = version_tuple = (0, 0, 8, 'dev339')
23
23
 
24
- __commit_id__ = commit_id = 'g611612030'
24
+ __commit_id__ = commit_id = 'gd12ff17f7'
@@ -57,6 +57,7 @@ class AFNIALFF(metaclass=Singleton):
57
57
  highpass: float,
58
58
  lowpass: float,
59
59
  tr: float | None,
60
+ mask_path: Path | None = None,
60
61
  ) -> tuple["Nifti1Image", "Nifti1Image", Path, Path]:
61
62
  """Compute ALFF + fALFF map.
62
63
 
@@ -70,6 +71,10 @@ class AFNIALFF(metaclass=Singleton):
70
71
  Lowpass cutoff frequency.
71
72
  tr : positive float, optional
72
73
  The Repetition Time of the BOLD data.
74
+ mask_path : pathlib.Path, optional
75
+ Path to the mask to restrict the computation to. The voxels
76
+ outside the mask are set to 0. If None, all the voxels are used
77
+ (default None).
73
78
 
74
79
  Returns
75
80
  -------
@@ -90,18 +95,23 @@ class AFNIALFF(metaclass=Singleton):
90
95
  prefix="afni_lff"
91
96
  )
92
97
 
93
- # Set 3dRSFC command
98
+ # Set 3dRSFC command; only the parameters are needed, not the
99
+ # bandpassed time series (-no_rs_out)
94
100
  lff_out_path_prefix = element_tempdir / "output"
95
101
  bp_cmd = [
96
102
  "3dRSFC",
97
103
  f"-prefix {lff_out_path_prefix.resolve()}",
98
104
  f"-input {input_path.resolve()}",
99
105
  f"-band {highpass} {lowpass}",
100
- "-no_rsfa -nosat -nodetrend",
106
+ "-no_rsfa -nosat -nodetrend -no_rs_out",
101
107
  ]
102
108
  # Check tr
103
109
  if tr is not None:
104
110
  bp_cmd.append(f"-dt {tr}")
111
+ # Restrict the computation to the mask, which reduces the memory and
112
+ # time used by 3dRSFC
113
+ if mask_path is not None:
114
+ bp_cmd.append(f"-mask {mask_path.resolve()}")
105
115
  # Call 3dRSFC
106
116
  run_ext_cmd(name="3dRSFC", cmd=bp_cmd)
107
117
 
@@ -50,6 +50,7 @@ class JuniferALFF(metaclass=Singleton):
50
50
  highpass: float,
51
51
  lowpass: float,
52
52
  tr: float | None,
53
+ mask_path: Path | None = None,
53
54
  ) -> tuple["Nifti1Image", "Nifti1Image", Path, Path]:
54
55
  """Compute ALFF + fALFF map.
55
56
 
@@ -63,6 +64,10 @@ class JuniferALFF(metaclass=Singleton):
63
64
  Lowpass cutoff frequency.
64
65
  tr : positive float, optional
65
66
  The Repetition Time of the BOLD data.
67
+ mask_path : pathlib.Path, optional
68
+ Path to the mask to restrict the computation to. The voxels
69
+ outside the mask are set to 0. If None, all the voxels are used
70
+ (default None).
66
71
 
67
72
  Returns
68
73
  -------
@@ -102,15 +107,22 @@ class JuniferALFF(metaclass=Singleton):
102
107
  f"nyquist = {fft_freqs[-1]}"
103
108
  )
104
109
 
105
- # Process voxels in chunks to bound FFT memory
110
+ # Process voxels (only the ones in the mask, if any) in chunks to
111
+ # bound FFT memory
106
112
  flat = niimg_data.reshape(-1, n_timepoints)
107
- numerator = np.empty(flat.shape[0])
108
- denominator = np.empty(flat.shape[0])
113
+ if mask_path is not None:
114
+ mask_data = np.squeeze(np.asarray(nib.load(mask_path).dataobj))
115
+ voxels = np.flatnonzero(mask_data.reshape(-1) != 0)
116
+ else:
117
+ voxels = np.arange(flat.shape[0])
118
+ numerator = np.zeros(flat.shape[0])
119
+ denominator = np.zeros(flat.shape[0])
109
120
  chunk = 20_000
110
- for start in range(0, flat.shape[0], chunk):
111
- amp = np.abs(sp.fft.rfft(flat[start : start + chunk], axis=-1))
112
- denominator[start : start + chunk] = amp @ weights
113
- numerator[start : start + chunk] = amp @ band_weights
121
+ for start in range(0, len(voxels), chunk):
122
+ t_voxels = voxels[start : start + chunk]
123
+ amp = np.abs(sp.fft.rfft(flat[t_voxels], axis=-1))
124
+ denominator[t_voxels] = amp @ weights
125
+ numerator[t_voxels] = amp @ band_weights
114
126
  spatial_shape = niimg_data.shape[:-1]
115
127
  numerator = numerator.reshape(spatial_shape)
116
128
  denominator = denominator.reshape(spatial_shape)
@@ -17,11 +17,13 @@ from typing import (
17
17
 
18
18
  from pydantic import BeforeValidator, PositiveFloat
19
19
 
20
+ from ...data import get_data
20
21
  from ...datagrabber import DataType
21
22
  from ...storage import StorageType
22
23
  from ...typing import ConditionalDependencies, MarkerInOutMappings
23
24
  from ...utils import ensure_list_or_none
24
25
  from ..base import BaseMarker, logger
26
+ from ..utils import _save_mask
25
27
  from ._afni_falff import AFNIALFF
26
28
  from ._junifer_falff import JuniferALFF
27
29
 
@@ -66,8 +68,10 @@ class ALFFBase(BaseMarker):
66
68
  The parameters to pass to the aggregation function.
67
69
  See :func:`.get_aggfunc_by_name` for options (default None).
68
70
  masks : str, dict, list of them or None, optional
69
- The specification of the masks to apply to regions before extracting
70
- signals. Check :ref:`Using Masks <using_masks>` for more details.
71
+ The specification of the masks to apply. The ALFF and fALFF
72
+ computation is restricted to the voxels in the mask, and the mask is
73
+ also applied to regions before extracting signals. Check
74
+ :ref:`Using Masks <using_masks>` for more details.
71
75
  If None, will not apply any mask (default None).
72
76
  name : str or None, optional
73
77
  The name of the marker.
@@ -115,6 +119,7 @@ class ALFFBase(BaseMarker):
115
119
  def _compute(
116
120
  self,
117
121
  input_data: dict[str, Any],
122
+ extra_input: dict[str, Any] | None = None,
118
123
  ) -> tuple["Nifti1Image", "Nifti1Image", Path, Path]:
119
124
  """Compute ALFF and fALFF.
120
125
 
@@ -123,7 +128,8 @@ class ALFFBase(BaseMarker):
123
128
  input_data : dict
124
129
  The input to the marker.
125
130
  extra_input : dict, optional
126
- The other fields in the pipeline data object (default None).
131
+ The other fields in the pipeline data object. Used to compute
132
+ the mask in the space of ``input_data`` (default None).
127
133
 
128
134
  Returns
129
135
  -------
@@ -144,12 +150,26 @@ class ALFFBase(BaseMarker):
144
150
  estimator = AFNIALFF()
145
151
  elif self.using == "junifer":
146
152
  estimator = JuniferALFF()
153
+ # Get mask in the space of the input data
154
+ mask_path = None
155
+ if self.masks is not None:
156
+ logger.debug(f"Masking with {self.masks}")
157
+ mask_path = _save_mask(
158
+ get_data(
159
+ kind="mask",
160
+ names=self.masks,
161
+ target_data=input_data,
162
+ extra_input=extra_input,
163
+ ),
164
+ prefix="alff_mask",
165
+ )
147
166
  # Compute ALFF + fALFF
148
167
  alff, falff, alff_path, falff_path = estimator.compute( # type: ignore
149
168
  input_path=input_data["path"],
150
169
  highpass=self.highpass,
151
170
  lowpass=self.lowpass,
152
171
  tr=self.tr,
172
+ mask_path=mask_path,
153
173
  )
154
174
 
155
175
  # If the input data space is native already, the original path should
@@ -92,7 +92,7 @@ class ALFFMaps(ALFFBase):
92
92
 
93
93
  # Compute ALFF + fALFF
94
94
  alff_output, falff_output, alff_output_path, falff_output_path = (
95
- self._compute(input_data=input)
95
+ self._compute(input_data=input, extra_input=extra_input)
96
96
  )
97
97
 
98
98
  # Perform aggregation on ALFF + fALFF
@@ -104,7 +104,7 @@ class ALFFParcels(ALFFBase):
104
104
 
105
105
  # Compute ALFF + fALFF
106
106
  alff_output, falff_output, alff_output_path, falff_output_path = (
107
- self._compute(input_data=input)
107
+ self._compute(input_data=input, extra_input=extra_input)
108
108
  )
109
109
 
110
110
  # Perform aggregation on ALFF + fALFF
@@ -113,7 +113,7 @@ class ALFFSpheres(ALFFBase):
113
113
 
114
114
  # Compute ALFF + fALFF
115
115
  alff_output, falff_output, alff_output_path, falff_output_path = (
116
- self._compute(input_data=input)
116
+ self._compute(input_data=input, extra_input=extra_input)
117
117
  )
118
118
 
119
119
  # Perform aggregation on ALFF / fALFF
@@ -0,0 +1,99 @@
1
+ """Provide tests for the ALFF and fALFF computation with masks."""
2
+
3
+ # Authors: Federico Raimondo <f.raimondo@fz-juelich.de>
4
+ # License: AGPL
5
+
6
+ from pathlib import Path
7
+
8
+ import nibabel as nib
9
+ import numpy as np
10
+ import pytest
11
+ from numpy.testing import assert_allclose, assert_array_equal
12
+
13
+ from junifer.markers.falff._afni_falff import AFNIALFF
14
+ from junifer.markers.falff._junifer_falff import JuniferALFF
15
+ from junifer.pipeline import WorkDirManager
16
+ from junifer.pipeline.utils import _check_afni
17
+
18
+
19
+ def _save(data: np.ndarray, path: Path, tr: float = 2.0) -> Path:
20
+ """Save data as NIfTI, with the TR in the header for 4D data."""
21
+ img = nib.Nifti1Image(data, np.eye(4))
22
+ if data.ndim == 4:
23
+ img.header.set_zooms((1.0, 1.0, 1.0, tr))
24
+ nib.save(img, path)
25
+ return path
26
+
27
+
28
+ def _data(tmp_path: Path) -> tuple[Path, Path, np.ndarray]:
29
+ """Create BOLD data and a mask of half of the voxels."""
30
+ data = np.random.default_rng(0).normal(size=(6, 6, 6, 100)) + 100
31
+ bold_path = _save(data.astype(np.float32), tmp_path / "bold.nii")
32
+ mask = np.zeros((6, 6, 6), dtype=np.uint8)
33
+ mask[3:] = 1
34
+ mask_path = _save(mask, tmp_path / "mask.nii")
35
+ return bold_path, mask_path, mask.astype(bool)
36
+
37
+
38
+ @pytest.mark.parametrize(
39
+ "estimator",
40
+ [
41
+ JuniferALFF,
42
+ pytest.param(
43
+ AFNIALFF,
44
+ marks=pytest.mark.skipif(
45
+ _check_afni() is False, reason="requires AFNI to be in PATH"
46
+ ),
47
+ ),
48
+ ],
49
+ )
50
+ def test_ALFF_mask(
51
+ estimator: type[JuniferALFF | AFNIALFF], tmp_path: Path
52
+ ) -> None:
53
+ """Test the ALFF and fALFF computation is restricted to the mask.
54
+
55
+ The values are computed for each voxel, so inside the mask they are the
56
+ same as without mask, and outside the mask they are 0.
57
+
58
+ Parameters
59
+ ----------
60
+ estimator : JuniferALFF or AFNIALFF
61
+ The ALFF estimator to test.
62
+ tmp_path : pathlib.Path
63
+ The path to the test directory.
64
+
65
+ """
66
+ WorkDirManager().workdir = tmp_path
67
+ bold_path, mask_path, mask = _data(tmp_path)
68
+ kwargs = {"highpass": 0.01, "lowpass": 0.1, "tr": 2.0}
69
+ masked = estimator().compute(bold_path, mask_path=mask_path, **kwargs)
70
+ unmasked = estimator().compute(bold_path, **kwargs)
71
+ for i_map in range(2): # ALFF and fALFF
72
+ t_masked = masked[i_map].get_fdata()
73
+ t_unmasked = unmasked[i_map].get_fdata()
74
+ assert_array_equal(t_masked[~mask], 0)
75
+ assert (t_masked[mask] > 0).all()
76
+ assert_allclose(t_masked[mask], t_unmasked[mask], rtol=1e-6)
77
+
78
+
79
+ @pytest.mark.skipif(
80
+ _check_afni() is False, reason="requires AFNI to be in PATH"
81
+ )
82
+ def test_AFNIALFF_no_time_series(tmp_path: Path) -> None:
83
+ """Test 3dRSFC does not output the bandpassed time series.
84
+
85
+ Parameters
86
+ ----------
87
+ tmp_path : pathlib.Path
88
+ The path to the test directory.
89
+
90
+ """
91
+ WorkDirManager().workdir = tmp_path
92
+ bold_path, mask_path, _ = _data(tmp_path)
93
+ alff_path = AFNIALFF().compute(
94
+ bold_path, highpass=0.01, lowpass=0.1, tr=2.0, mask_path=mask_path
95
+ )[2]
96
+ # Only the parameters (ALFF, fALFF and mALFF) are in the output directory
97
+ outputs = {x.name for x in alff_path.parent.iterdir()}
98
+ assert not any("_LFF+" in x for x in outputs)
99
+ assert any("_ALFF+" in x for x in outputs)
@@ -3,7 +3,6 @@
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
4
  # License: AGPL
5
5
 
6
- import hashlib
7
6
  from enum import StrEnum
8
7
  from pathlib import Path
9
8
  from typing import (
@@ -13,17 +12,15 @@ from typing import (
13
12
  ClassVar,
14
13
  )
15
14
 
16
- import nibabel as nib
17
- import numpy as np
18
15
  from pydantic import BeforeValidator
19
16
 
20
17
  from ...data import get_data
21
18
  from ...datagrabber import DataType
22
- from ...pipeline import WorkDirManager
23
19
  from ...storage import StorageType
24
20
  from ...typing import ConditionalDependencies, MarkerInOutMappings
25
21
  from ...utils import ensure_list_or_none
26
22
  from ..base import BaseMarker, logger
23
+ from ..utils import _save_mask
27
24
  from ._afni_reho import AFNIReHo
28
25
  from ._junifer_reho import JuniferReHo
29
26
 
@@ -199,7 +196,8 @@ class ReHoBase(BaseMarker):
199
196
  names=self.masks,
200
197
  target_data=input_data,
201
198
  extra_input=extra_input,
202
- )
199
+ ),
200
+ prefix="reho_mask",
203
201
  )
204
202
  # Compute reho
205
203
  reho_map, reho_map_path = estimator.compute( # type: ignore
@@ -217,38 +215,3 @@ class ReHoBase(BaseMarker):
217
215
  return reho_map, input_data["path"]
218
216
 
219
217
  return reho_map, reho_map_path
220
-
221
-
222
- def _save_mask(mask_img: "Nifti1Image") -> Path:
223
- """Save mask to the working directory, named by its content.
224
-
225
- The same mask always gets the same path, so that the cached ReHo
226
- computation can be reused by markers using the same mask.
227
-
228
- Parameters
229
- ----------
230
- mask_img : Niimg-like object
231
- The mask to save.
232
-
233
- Returns
234
- -------
235
- pathlib.Path
236
- The path to the saved mask.
237
-
238
- """
239
- mask_data = np.squeeze(np.asarray(mask_img.dataobj)) != 0
240
- digest = hashlib.sha256()
241
- digest.update(str(mask_data.shape).encode())
242
- digest.update(np.packbits(mask_data).tobytes())
243
- digest.update(mask_img.affine.tobytes())
244
- mask_path = (
245
- WorkDirManager().workdir / f"reho_mask_{digest.hexdigest()[:16]}.nii"
246
- )
247
- if not mask_path.exists():
248
- nib.save(
249
- nib.Nifti1Image(
250
- mask_data.astype(np.uint8), mask_img.affine, mask_img.header
251
- ),
252
- mask_path,
253
- )
254
- return mask_path
@@ -6,10 +6,14 @@
6
6
  # Synchon Mandal <s.mandal@fz-juelich.de>
7
7
  # License: AGPL
8
8
 
9
+ from pathlib import Path
10
+
11
+ import nibabel as nib
9
12
  import numpy as np
10
13
  import pytest
11
14
 
12
- from junifer.markers.utils import _ets
15
+ from junifer.markers.utils import _ets, _save_mask
16
+ from junifer.pipeline import WorkDirManager
13
17
 
14
18
 
15
19
  def test_ets() -> None:
@@ -48,3 +52,38 @@ def test_ets_incorrect_label_list() -> None:
48
52
  ValueError, match="List of roi names does not correspond"
49
53
  ):
50
54
  _ets(bold_ts, roi_labels)
55
+
56
+
57
+ def test_save_mask(tmp_path: Path) -> None:
58
+ """Test saving masks in the element directory, named by their content.
59
+
60
+ Parameters
61
+ ----------
62
+ tmp_path : pathlib.Path
63
+ The path to the test directory.
64
+
65
+ """
66
+ workdir_mgr = WorkDirManager()
67
+ workdir_mgr.workdir = tmp_path
68
+ data = np.zeros((3, 4, 5), dtype=np.int8)
69
+ data[1, 1:3, 2:4] = 1
70
+ mask = nib.Nifti1Image(data, np.eye(4))
71
+ path = _save_mask(mask, prefix="test_mask")
72
+ # In the element directory, with the voxels in the mask
73
+ assert path.parent == workdir_mgr.elementdir
74
+ assert path.name.startswith("test_mask_")
75
+ assert np.array_equal(np.asarray(nib.load(path).dataobj), data)
76
+ # The same mask (another image) has the same path, a different one not
77
+ assert (
78
+ _save_mask(nib.Nifti1Image(data.copy(), np.eye(4)), prefix="test_mask")
79
+ == path
80
+ )
81
+ other = data.copy()
82
+ other[0, 0, 0] = 1
83
+ assert (
84
+ _save_mask(nib.Nifti1Image(other, np.eye(4)), prefix="test_mask")
85
+ != path
86
+ )
87
+ # Deleted with the element directory
88
+ workdir_mgr.cleanup_elementdir()
89
+ assert not path.exists()
@@ -8,18 +8,62 @@
8
8
  # Amir Omidvarnia <a.omidvarnia@fz-juelich.de>
9
9
  # License: AGPL
10
10
 
11
+ import hashlib
11
12
  import zlib
12
13
  from collections.abc import Callable
14
+ from pathlib import Path
13
15
  from typing import Any
14
16
 
17
+ import nibabel as nib
15
18
  import numpy as np
16
19
  import pandas as pd
17
20
  from nibabel.spatialimages import SpatialImage
18
21
  from scipy.stats import zscore
19
22
 
23
+ from ..pipeline import WorkDirManager
20
24
  from ..utils import raise_error
21
25
 
22
26
 
27
+ def _save_mask(mask_img: SpatialImage, prefix: str) -> Path:
28
+ """Save mask to the element directory, named by its content.
29
+
30
+ The same mask always gets the same path within an element, so that the
31
+ cached computations (e.g., ReHo or ALFF) can be reused by markers using
32
+ the same mask. The element directory is deleted after the element is
33
+ processed.
34
+
35
+ Parameters
36
+ ----------
37
+ mask_img : Niimg-like object
38
+ The mask to save.
39
+ prefix : str
40
+ The prefix of the file name.
41
+
42
+ Returns
43
+ -------
44
+ pathlib.Path
45
+ The path to the saved mask.
46
+
47
+ """
48
+ mask_data = np.squeeze(np.asarray(mask_img.dataobj)) != 0
49
+ digest = hashlib.sha256()
50
+ digest.update(str(mask_data.shape).encode())
51
+ digest.update(np.packbits(mask_data).tobytes())
52
+ digest.update(mask_img.affine.tobytes())
53
+ mask_path = (
54
+ WorkDirManager().get_elementdir()
55
+ / f"{prefix}_{digest.hexdigest()[:16]}.nii"
56
+ )
57
+ if not mask_path.exists():
58
+ nib.save(
59
+ nib.Nifti1Image(
60
+ mask_data.astype(np.uint8), mask_img.affine, mask_img.header
61
+ ),
62
+ mask_path,
63
+ )
64
+ return mask_path
65
+
66
+
23
67
  def _has_data(data: np.ndarray) -> np.ndarray:
24
68
  """Get the columns with data.
25
69
 
@@ -95,6 +95,30 @@ def test_workdir_manager_cleanup_elementdir(
95
95
  assert workdir_mgr.elementdir is None
96
96
 
97
97
 
98
+ def test_workdir_manager_get_elementdir(tmp_path: Path) -> None:
99
+ """Test WorkDirManager gets the element directory correctly.
100
+
101
+ Parameters
102
+ ----------
103
+ tmp_path : pathlib.Path
104
+ The path to the test directory.
105
+
106
+ """
107
+ workdir_mgr = WorkDirManager()
108
+ workdir_mgr.workdir = tmp_path
109
+ assert workdir_mgr.elementdir is None
110
+ # Created on the first call, and the same afterwards
111
+ elementdir = workdir_mgr.get_elementdir()
112
+ assert elementdir.is_dir()
113
+ assert elementdir.parent == tmp_path
114
+ assert workdir_mgr.get_elementdir() == elementdir
115
+ # The element temporary directories are in it
116
+ assert workdir_mgr.get_element_tempdir().parent == elementdir
117
+ workdir_mgr.cleanup_elementdir()
118
+ assert not elementdir.exists()
119
+ assert workdir_mgr.elementdir is None
120
+
121
+
98
122
  def test_workdir_manager_get_and_delete_tempdir(tmp_path: Path) -> None:
99
123
  """Test WorkDirManager gets and deletes temporary directories correctly.
100
124
 
@@ -128,6 +128,26 @@ class WorkDirManager(metaclass=Singleton):
128
128
  """Get element directory."""
129
129
  return self._elementdir # type: ignore
130
130
 
131
+ def get_elementdir(self) -> Path:
132
+ """Get the element directory, creating it if needed.
133
+
134
+ This directory should be available only for the lifetime of an
135
+ element.
136
+
137
+ Returns
138
+ -------
139
+ pathlib.Path
140
+ The path to the element directory.
141
+
142
+ """
143
+ if self._elementdir is None:
144
+ logger.debug(
145
+ "Setting up element directory under "
146
+ f"{self._workdir.resolve()!s}" # type: ignore
147
+ )
148
+ self._elementdir = Path(tempfile.mkdtemp(dir=self._workdir))
149
+ return self._elementdir
150
+
131
151
  def get_element_tempdir(
132
152
  self, prefix: str | None = None, suffix: str | None = None
133
153
  ) -> Path:
@@ -151,22 +171,12 @@ class WorkDirManager(metaclass=Singleton):
151
171
  The path to the temporary directory.
152
172
 
153
173
  """
154
- # Create element directory if not created already
155
- if self._elementdir is None:
156
- logger.debug(
157
- "Setting up element directory under "
158
- f"{self._workdir.resolve()!s}" # type: ignore
159
- )
160
- self._elementdir = Path(tempfile.mkdtemp(dir=self._workdir))
161
-
174
+ elementdir = self.get_elementdir()
162
175
  logger.debug(
163
- "Creating element temporary directory at "
164
- f"{self._elementdir.resolve()!s}"
176
+ f"Creating element temporary directory at {elementdir.resolve()!s}"
165
177
  )
166
178
  return Path(
167
- tempfile.mkdtemp(
168
- dir=self._elementdir, prefix=prefix, suffix=suffix
169
- )
179
+ tempfile.mkdtemp(dir=elementdir, prefix=prefix, suffix=suffix)
170
180
  )
171
181
 
172
182
  def delete_element_tempdir(self, tempdir: Path) -> None:
@@ -201,8 +201,10 @@ class TemporalFilter(BasePreprocessor):
201
201
  {
202
202
  # Update path to sync with "data"
203
203
  "path": filtered_data_path,
204
- # Update data
205
- "data": cleaned_img,
204
+ # Update data, loaded from the file to not keep the
205
+ # in-memory image (memory-mapped, as the file is not
206
+ # compressed)
207
+ "data": nib.load(filtered_data_path),
206
208
  }
207
209
  )
208
210
 
@@ -159,8 +159,10 @@ class TemporalSlicer(BasePreprocessor):
159
159
  {
160
160
  # Update path to sync with "data"
161
161
  "path": sliced_img_path,
162
- # Update data
163
- "data": sliced_img,
162
+ # Update data, loaded from the file to not keep the
163
+ # in-memory image (memory-mapped, as the file is not
164
+ # compressed)
165
+ "data": nib.load(sliced_img_path),
164
166
  }
165
167
  )
166
168
 
@@ -694,8 +694,10 @@ class fMRIPrepConfoundRemover(BasePreprocessor):
694
694
  {
695
695
  # Update path to sync with "data"
696
696
  "path": deconfounded_img_path,
697
- # Update data
698
- "data": cleaned_img,
697
+ # Update data, loaded from the file to not keep the
698
+ # in-memory image (memory-mapped, as the file is not
699
+ # compressed)
700
+ "data": nib.load(deconfounded_img_path),
699
701
  }
700
702
  )
701
703
 
@@ -5,6 +5,7 @@
5
5
  # Synchon Mandal <s.mandal@fz-juelich.de>
6
6
  # License: AGPL
7
7
 
8
+ import nibabel as nib
8
9
  import numpy as np
9
10
  import pandas as pd
10
11
  import pytest
@@ -498,6 +499,9 @@ def test_fMRIPrepConfoundRemover_fit_transform() -> None:
498
499
  # Fit-transform
499
500
  output = confound_remover.fit_transform(element_data)
500
501
  output_img = output["BOLD"]["data"]
502
+ # The data is loaded from the saved file, not kept in memory
503
+ assert nib.is_proxy(output_img.dataobj)
504
+ assert output_img.get_filename() == str(output["BOLD"]["path"])
501
505
  output_bold = output_img.get_fdata()
502
506
  output_tr = output_img.header.get_zooms()[3]
503
507
 
@@ -554,6 +558,9 @@ def test_fMRIPrepConfoundRemover_fit_transform_masks() -> None:
554
558
  # Fit-transform
555
559
  output = confound_remover.fit_transform(element_data)
556
560
  output_img = output["BOLD"]["data"]
561
+ # The data is loaded from the saved file, not kept in memory
562
+ assert nib.is_proxy(output_img.dataobj)
563
+ assert output_img.get_filename() == str(output["BOLD"]["path"])
557
564
  output_bold = output_img.get_fdata()
558
565
  output_tr = output_img.header.get_zooms()[3]
559
566