junifer 0.0.8.dev253__tar.gz → 0.0.8.dev257__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 (569) hide show
  1. {junifer-0.0.8.dev253/junifer.egg-info → junifer-0.0.8.dev257}/PKG-INFO +1 -1
  2. junifer-0.0.8.dev257/docs/changes/newsfragments/514.bugfix +1 -0
  3. junifer-0.0.8.dev257/docs/changes/newsfragments/514.bugfix.1 +1 -0
  4. junifer-0.0.8.dev257/docs/changes/newsfragments/514.enh +1 -0
  5. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/_version.py +3 -3
  6. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/reho/_afni_reho.py +6 -0
  7. junifer-0.0.8.dev257/junifer/markers/reho/_junifer_reho.py +272 -0
  8. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/reho/reho_base.py +61 -2
  9. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/reho/reho_maps.py +4 -2
  10. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/reho/reho_parcels.py +4 -2
  11. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/reho/reho_spheres.py +4 -2
  12. junifer-0.0.8.dev257/junifer/markers/reho/tests/test_junifer_reho.py +178 -0
  13. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/reho/tests/test_reho_maps.py +14 -9
  14. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/reho/tests/test_reho_parcels.py +10 -9
  15. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/reho/tests/test_reho_spheres.py +1 -1
  16. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257/junifer.egg-info}/PKG-INFO +1 -1
  17. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer.egg-info/SOURCES.txt +4 -0
  18. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer.egg-info/scm_file_list.json +4 -0
  19. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer.egg-info/scm_version.json +2 -2
  20. junifer-0.0.8.dev253/junifer/markers/reho/_junifer_reho.py +0 -284
  21. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.dockerignore +0 -0
  22. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  23. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  24. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
  25. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
  26. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  27. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
  28. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.github/dependabot.yml +0 -0
  29. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.github/pull_request_template.md +0 -0
  30. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.github/workflows/check-stale.yml +0 -0
  31. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.github/workflows/ci.yml +0 -0
  32. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.github/workflows/docker-publish.yml +0 -0
  33. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.github/workflows/docs-preview.yml +0 -0
  34. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.github/workflows/docs.yml +0 -0
  35. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.github/workflows/lint.yml +0 -0
  36. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.github/workflows/publish.yml +0 -0
  37. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.gitignore +0 -0
  38. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.gitmodules +0 -0
  39. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.pre-commit-config.yaml +0 -0
  40. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/.python-version +0 -0
  41. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/AUTHORS.rst +0 -0
  42. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/Dockerfile +0 -0
  43. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/Dockerfile-ci +0 -0
  44. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/LICENSE.md +0 -0
  45. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/README.md +0 -0
  46. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/codecov.yml +0 -0
  47. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/conda-env.yml +0 -0
  48. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/Makefile +0 -0
  49. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/_static/css/custom.css +0 -0
  50. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/_static/css/version_selector.css +0 -0
  51. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/_static/js/custom.js +0 -0
  52. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/_templates/versions.html +0 -0
  53. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/api/api.rst +0 -0
  54. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/api/cli.rst +0 -0
  55. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/api/configs.rst +0 -0
  56. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/api/data.rst +0 -0
  57. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/api/datagrabbers.rst +0 -0
  58. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/api/datareaders.rst +0 -0
  59. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/api/index.rst +0 -0
  60. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/api/markers.rst +0 -0
  61. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/api/nilearn.rst +0 -0
  62. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/api/onthefly.rst +0 -0
  63. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/api/pipeline.rst +0 -0
  64. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/api/preprocessing.rst +0 -0
  65. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/api/stats.rst +0 -0
  66. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/api/storage.rst +0 -0
  67. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/api/testing.rst +0 -0
  68. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/api/utils.rst +0 -0
  69. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/builtin.rst +0 -0
  70. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/contributors.inc +0 -0
  71. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/.gitignore +0 -0
  72. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/239.enh +0 -0
  73. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/364.doc +0 -0
  74. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/364.enh +0 -0
  75. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/364.feature +0 -0
  76. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/474.misc +0 -0
  77. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/482.bugfix +0 -0
  78. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/492.bugfix +0 -0
  79. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/499.enh +0 -0
  80. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/502.bugfix +0 -0
  81. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/503.enh +0 -0
  82. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/510.bugfix +0 -0
  83. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/511.bugfix +0 -0
  84. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/511.bugfix.1 +0 -0
  85. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/511.change +0 -0
  86. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/511.enh +0 -0
  87. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/511.enh.1 +0 -0
  88. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/511.feature +0 -0
  89. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/511.misc +0 -0
  90. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/511.misc.1 +0 -0
  91. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/513.doc +0 -0
  92. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/changes/newsfragments/513.misc +0 -0
  93. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/conf.py +0 -0
  94. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/contribution.rst +0 -0
  95. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/extending/confounds_format.rst +0 -0
  96. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/extending/coordinates.rst +0 -0
  97. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/extending/data_dump_asset.rst +0 -0
  98. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/extending/data_registries.rst +0 -0
  99. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/extending/data_types.rst +0 -0
  100. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/extending/datagrabber.rst +0 -0
  101. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/extending/dependencies.rst +0 -0
  102. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/extending/extension.rst +0 -0
  103. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/extending/index.rst +0 -0
  104. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/extending/logging.rst +0 -0
  105. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/extending/maps.rst +0 -0
  106. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/extending/marker.rst +0 -0
  107. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/extending/masks.rst +0 -0
  108. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/extending/parcellations.rst +0 -0
  109. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/extending/plugins.rst +0 -0
  110. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/extending/preprocessor.rst +0 -0
  111. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/faq.rst +0 -0
  112. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/help.rst +0 -0
  113. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/images/junifer_logo.png +0 -0
  114. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/index.rst +0 -0
  115. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/installation.rst +0 -0
  116. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/links.inc +0 -0
  117. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/maintaining.rst +0 -0
  118. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/poly.py +0 -0
  119. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/poly_files/patches/version_banner.html +0 -0
  120. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/poly_files/patches/versions.html +0 -0
  121. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/poly_files/templates/index.html +0 -0
  122. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/starting.rst +0 -0
  123. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/understanding/data.rst +0 -0
  124. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/understanding/datagrabber.rst +0 -0
  125. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/understanding/datareader.rst +0 -0
  126. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/understanding/index.rst +0 -0
  127. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/understanding/marker.rst +0 -0
  128. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/understanding/pipeline.rst +0 -0
  129. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/understanding/preprocess.rst +0 -0
  130. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/understanding/storage.rst +0 -0
  131. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/using/codeless.rst +0 -0
  132. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/using/configuring.rst +0 -0
  133. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/using/dumping.rst +0 -0
  134. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/using/index.rst +0 -0
  135. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/using/masks.rst +0 -0
  136. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/using/queueing.rst +0 -0
  137. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/using/running.rst +0 -0
  138. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/docs/whats_new.rst +0 -0
  139. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/examples/README.rst +0 -0
  140. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/examples/norun_hcpfc_pearson.py +0 -0
  141. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/examples/norun_ukbvm_gmd.py +0 -0
  142. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/examples/run_compute_parcel_mean.py +0 -0
  143. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/examples/run_datagrabber_bids_datalad.py +0 -0
  144. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/examples/run_ets_rss_marker.py +0 -0
  145. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/examples/run_junifer_julearn.py +0 -0
  146. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/examples/run_run_gmd_mean.py +0 -0
  147. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/examples/yamls/gmd_mean.yaml +0 -0
  148. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
  149. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/examples/yamls/partly_cloudy_agg_mean_tian.yml +0 -0
  150. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/examples/yamls/ukb_gmd_mean.yaml +0 -0
  151. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/ignore_words.txt +0 -0
  152. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/__init__.py +0 -0
  153. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/__init__.pyi +0 -0
  154. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/__init__.py +0 -0
  155. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/__init__.pyi +0 -0
  156. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/decorators.py +0 -0
  157. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/functions.py +0 -0
  158. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/py.typed +0 -0
  159. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/queue_context/__init__.py +0 -0
  160. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/queue_context/__init__.pyi +0 -0
  161. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/queue_context/gnu_parallel_local_adapter.py +0 -0
  162. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/queue_context/htcondor_adapter.py +0 -0
  163. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/queue_context/py.typed +0 -0
  164. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/queue_context/queue_context_adapter.py +0 -0
  165. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +0 -0
  166. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/queue_context/tests/test_htcondor_adapter.py +0 -0
  167. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
  168. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/afni/3dRSFC +0 -0
  169. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/afni/3dReHo +0 -0
  170. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/afni/afni +0 -0
  171. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/afni/run_afni_docker.sh +0 -0
  172. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/ants/ResampleImage +0 -0
  173. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/ants/antsApplyTransforms +0 -0
  174. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
  175. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/ants/run_ants_docker.sh +0 -0
  176. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/freesurfer/mri_binarize +0 -0
  177. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/freesurfer/mri_mc +0 -0
  178. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/freesurfer/mri_pretess +0 -0
  179. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/freesurfer/mris_convert +0 -0
  180. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/freesurfer/run_freesurfer_docker.sh +0 -0
  181. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/fsl/applywarp +0 -0
  182. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/fsl/flirt +0 -0
  183. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/fsl/img2imgcoord +0 -0
  184. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
  185. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/fsl/std2imgcoord +0 -0
  186. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/run_conda.bash +0 -0
  187. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/run_conda.zsh +0 -0
  188. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/run_venv.bash +0 -0
  189. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/res/run_venv.zsh +0 -0
  190. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/tests/test_decorators.py +0 -0
  191. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/api/tests/test_functions.py +0 -0
  192. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/cli/__init__.py +0 -0
  193. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/cli/__init__.pyi +0 -0
  194. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/cli/cli.py +0 -0
  195. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/cli/parser.py +0 -0
  196. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/cli/py.typed +0 -0
  197. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/cli/tests/data/gmd_mean.yaml +0 -0
  198. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/cli/tests/data/gmd_mean_htcondor.yaml +0 -0
  199. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +0 -0
  200. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/cli/tests/test_cli.py +0 -0
  201. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/cli/tests/test_cli_utils.py +0 -0
  202. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/cli/utils.py +0 -0
  203. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/__init__.py +0 -0
  204. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/__init__.pyi +0 -0
  205. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/juseless/__init__.py +0 -0
  206. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/juseless/__init__.pyi +0 -0
  207. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
  208. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/juseless/datagrabbers/__init__.pyi +0 -0
  209. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
  210. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
  211. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
  212. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/juseless/datagrabbers/py.typed +0 -0
  213. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
  214. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
  215. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
  216. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
  217. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
  218. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
  219. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
  220. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/juseless/py.typed +0 -0
  221. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/configs/py.typed +0 -0
  222. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/conftest.py +0 -0
  223. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/__init__.py +0 -0
  224. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/__init__.pyi +0 -0
  225. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/_dispatch.py +0 -0
  226. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/coordinates/__init__.py +0 -0
  227. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/coordinates/__init__.pyi +0 -0
  228. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/coordinates/_ants_coordinates_warper.py +0 -0
  229. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/coordinates/_coordinates.py +0 -0
  230. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/coordinates/_fsl_coordinates_warper.py +0 -0
  231. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/coordinates/tests/test_coordinates.py +0 -0
  232. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/coordinates/tests/test_coordinates_names.py +0 -0
  233. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/maps/__init__.py +0 -0
  234. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/maps/__init__.pyi +0 -0
  235. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/maps/_ants_maps_warper.py +0 -0
  236. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/maps/_fsl_maps_warper.py +0 -0
  237. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/maps/_maps.py +0 -0
  238. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/maps/tests/test_maps.py +0 -0
  239. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/masks/__init__.py +0 -0
  240. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/masks/__init__.pyi +0 -0
  241. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/masks/_ants_mask_warper.py +0 -0
  242. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/masks/_fsl_mask_warper.py +0 -0
  243. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/masks/_masks.py +0 -0
  244. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/masks/tests/test_masks.py +0 -0
  245. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/parcellations/__init__.py +0 -0
  246. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/parcellations/__init__.pyi +0 -0
  247. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/parcellations/_ants_parcellation_warper.py +0 -0
  248. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/parcellations/_fsl_parcellation_warper.py +0 -0
  249. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/parcellations/_parcellations.py +0 -0
  250. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/parcellations/tests/test_parcellations.py +0 -0
  251. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/pipeline_data_registry_base.py +0 -0
  252. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/py.typed +0 -0
  253. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/template_spaces.py +0 -0
  254. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/tests/test_data_utils.py +0 -0
  255. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/tests/test_dispatch.py +0 -0
  256. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/tests/test_template_spaces.py +0 -0
  257. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/data/utils.py +0 -0
  258. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/__init__.py +0 -0
  259. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/__init__.pyi +0 -0
  260. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/aomic/__init__.py +0 -0
  261. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/aomic/__init__.pyi +0 -0
  262. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/aomic/_types.py +0 -0
  263. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/aomic/id1000.py +0 -0
  264. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/aomic/piop1.py +0 -0
  265. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/aomic/piop2.py +0 -0
  266. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/aomic/py.typed +0 -0
  267. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
  268. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
  269. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
  270. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/base.py +0 -0
  271. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/datalad_base.py +0 -0
  272. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/dmcc13_benchmark.py +0 -0
  273. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/hcp1200/__init__.py +0 -0
  274. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/hcp1200/__init__.pyi +0 -0
  275. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
  276. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
  277. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/hcp1200/py.typed +0 -0
  278. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
  279. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/multiple.py +0 -0
  280. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/pattern.py +0 -0
  281. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/pattern_datalad.py +0 -0
  282. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/pattern_validation_mixin.py +0 -0
  283. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/py.typed +0 -0
  284. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/tests/test_base.py +0 -0
  285. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
  286. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +0 -0
  287. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/tests/test_multiple.py +0 -0
  288. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/tests/test_pattern.py +0 -0
  289. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
  290. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datagrabber/tests/test_pattern_validation_mixin.py +0 -0
  291. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datareader/__init__.py +0 -0
  292. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datareader/__init__.pyi +0 -0
  293. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datareader/default.py +0 -0
  294. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datareader/py.typed +0 -0
  295. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/datareader/tests/test_default_reader.py +0 -0
  296. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/.codecov.yml +0 -0
  297. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/.codespellignore +0 -0
  298. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  299. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  300. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  301. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/questions-help-support.md +0 -0
  302. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/.github/dependabot.yml +0 -0
  303. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/.github/workflows/build.yml +0 -0
  304. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/.github/workflows/code-style.yml +0 -0
  305. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/.github/workflows/doc.yml +0 -0
  306. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/.github/workflows/publish.yml +0 -0
  307. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/.github/workflows/pytest.yml +0 -0
  308. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/.gitignore +0 -0
  309. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/LICENSE +0 -0
  310. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/README.md +0 -0
  311. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/brainprint/__init__.py +0 -0
  312. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/brainprint/_version.py +0 -0
  313. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/brainprint/asymmetry.py +0 -0
  314. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/brainprint/brainprint.py +0 -0
  315. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/brainprint/cli/__init__.py +0 -0
  316. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/brainprint/cli/help_text.py +0 -0
  317. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/brainprint/cli/parser.py +0 -0
  318. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/brainprint/cli/utils.py +0 -0
  319. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/brainprint/commands/__init__.py +0 -0
  320. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/brainprint/commands/sys_info.py +0 -0
  321. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/brainprint/surfaces.py +0 -0
  322. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/brainprint/utils/__init__.py +0 -0
  323. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/brainprint/utils/_config.py +0 -0
  324. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/brainprint/utils/tests/__init__.py +0 -0
  325. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/brainprint/utils/tests/test_config.py +0 -0
  326. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/brainprint/utils/utils.py +0 -0
  327. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/doc/Makefile +0 -0
  328. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/doc/_static/.gitkeep +0 -0
  329. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/doc/_templates/autosummary/class.rst +0 -0
  330. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/doc/_templates/autosummary/function.rst +0 -0
  331. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/doc/_templates/autosummary/module.rst +0 -0
  332. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/doc/api/index.rst +0 -0
  333. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/doc/conf.py +0 -0
  334. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/doc/index.rst +0 -0
  335. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/doc/links.inc +0 -0
  336. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/doc/make.bat +0 -0
  337. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/doc/references.bib +0 -0
  338. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/pyproject.toml +0 -0
  339. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/BrainPrint/setup.py +0 -0
  340. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/__init__.py +0 -0
  341. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/__init__.pyi +0 -0
  342. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/.coveragerc +0 -0
  343. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/.gitattributes +0 -0
  344. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/.gitignore +0 -0
  345. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/.travis.yml +0 -0
  346. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/.vscode/launch.json +0 -0
  347. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/.vscode/settings.json +0 -0
  348. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/LICENSE.txt +0 -0
  349. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/MANIFEST.in +0 -0
  350. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/Makefile +0 -0
  351. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/README.rst +0 -0
  352. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/azure-pipelines.yml +0 -0
  353. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/h5io/__init__.py +0 -0
  354. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/h5io/_h5io.py +0 -0
  355. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/h5io/_version.py +0 -0
  356. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/h5io/chunked_array.py +0 -0
  357. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/h5io/chunked_list.py +0 -0
  358. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/h5io/tests/__init__.py +0 -0
  359. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/h5io/tests/test_chunked_array.py +0 -0
  360. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/h5io/tests/test_chunked_list.py +0 -0
  361. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/h5io/tests/test_io.py +0 -0
  362. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/setup.cfg +0 -0
  363. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/setup.py +0 -0
  364. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/h5io/versioneer.py +0 -0
  365. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/nilearn/__init__.py +0 -0
  366. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/nilearn/__init__.pyi +0 -0
  367. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/nilearn/junifer_connectivity_measure.py +0 -0
  368. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
  369. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/nilearn/py.typed +0 -0
  370. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +0 -0
  371. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
  372. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/external/py.typed +0 -0
  373. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/__init__.py +0 -0
  374. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/__init__.pyi +0 -0
  375. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/base.py +0 -0
  376. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/brainprint.py +0 -0
  377. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/__init__.py +0 -0
  378. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/__init__.pyi +0 -0
  379. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/complexity_base.py +0 -0
  380. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/hurst_exponent.py +0 -0
  381. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
  382. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/perm_entropy.py +0 -0
  383. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/py.typed +0 -0
  384. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/range_entropy.py +0 -0
  385. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/range_entropy_auc.py +0 -0
  386. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/sample_entropy.py +0 -0
  387. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
  388. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
  389. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
  390. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
  391. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
  392. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
  393. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
  394. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
  395. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
  396. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/ets_rss.py +0 -0
  397. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/falff/__init__.py +0 -0
  398. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/falff/__init__.pyi +0 -0
  399. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/falff/_afni_falff.py +0 -0
  400. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/falff/_junifer_falff.py +0 -0
  401. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/falff/falff_base.py +0 -0
  402. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/falff/falff_maps.py +0 -0
  403. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/falff/falff_parcels.py +0 -0
  404. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/falff/falff_spheres.py +0 -0
  405. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/falff/py.typed +0 -0
  406. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/falff/tests/test_falff_maps.py +0 -0
  407. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
  408. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
  409. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/__init__.py +0 -0
  410. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/__init__.pyi +0 -0
  411. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
  412. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/edge_functional_connectivity_maps.py +0 -0
  413. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
  414. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
  415. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
  416. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/functional_connectivity_maps.py +0 -0
  417. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
  418. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
  419. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/py.typed +0 -0
  420. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
  421. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_maps.py +0 -0
  422. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
  423. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
  424. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
  425. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_maps.py +0 -0
  426. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
  427. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
  428. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/maps_aggregation.py +0 -0
  429. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/parcel_aggregation.py +0 -0
  430. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/py.typed +0 -0
  431. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/reho/__init__.py +0 -0
  432. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/reho/__init__.pyi +0 -0
  433. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/reho/py.typed +0 -0
  434. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/sphere_aggregation.py +0 -0
  435. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/temporal_snr/__init__.py +0 -0
  436. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/temporal_snr/__init__.pyi +0 -0
  437. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/temporal_snr/py.typed +0 -0
  438. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
  439. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/temporal_snr/temporal_snr_maps.py +0 -0
  440. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
  441. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
  442. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
  443. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/temporal_snr/tests/test_temporal_snr_maps.py +0 -0
  444. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
  445. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
  446. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/tests/test_brainprint.py +0 -0
  447. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/tests/test_ets_rss.py +0 -0
  448. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/tests/test_maps_aggregation.py +0 -0
  449. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/tests/test_marker_utils.py +0 -0
  450. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/tests/test_markers_base.py +0 -0
  451. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
  452. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
  453. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/markers/utils.py +0 -0
  454. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/onthefly/__init__.py +0 -0
  455. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/onthefly/__init__.pyi +0 -0
  456. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/onthefly/_brainprint.py +0 -0
  457. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/onthefly/py.typed +0 -0
  458. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/onthefly/read_transform.py +0 -0
  459. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/onthefly/tests/test_read_transform.py +0 -0
  460. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/pipeline/__init__.py +0 -0
  461. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/pipeline/__init__.pyi +0 -0
  462. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/pipeline/_data_object_dumper.py +0 -0
  463. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/pipeline/marker_collection.py +0 -0
  464. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/pipeline/pipeline_component_registry.py +0 -0
  465. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/pipeline/pipeline_step_mixin.py +0 -0
  466. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/pipeline/py.typed +0 -0
  467. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/pipeline/tests/test_data_object_dumper.py +0 -0
  468. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/pipeline/tests/test_marker_collection.py +0 -0
  469. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/pipeline/tests/test_pipeline_component_registry.py +0 -0
  470. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
  471. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
  472. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/pipeline/tests/test_workdir_manager.py +0 -0
  473. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/pipeline/update_meta_mixin.py +0 -0
  474. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/pipeline/utils.py +0 -0
  475. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/pipeline/workdir_manager.py +0 -0
  476. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/__init__.py +0 -0
  477. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/__init__.pyi +0 -0
  478. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/_temporal_filter.py +0 -0
  479. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/_temporal_slicer.py +0 -0
  480. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/base.py +0 -0
  481. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/confounds/__init__.py +0 -0
  482. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/confounds/__init__.pyi +0 -0
  483. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
  484. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/confounds/py.typed +0 -0
  485. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +0 -0
  486. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/py.typed +0 -0
  487. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/smoothing/__init__.py +0 -0
  488. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/smoothing/__init__.pyi +0 -0
  489. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/smoothing/_afni_smoothing.py +0 -0
  490. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/smoothing/_fsl_smoothing.py +0 -0
  491. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/smoothing/_nilearn_smoothing.py +0 -0
  492. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/smoothing/py.typed +0 -0
  493. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/smoothing/smoothing.py +0 -0
  494. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/smoothing/tests/test_smoothing.py +0 -0
  495. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/tests/test_preprocess_base.py +0 -0
  496. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/tests/test_temporal_filter.py +0 -0
  497. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/tests/test_temporal_slicer.py +0 -0
  498. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/warping/__init__.py +0 -0
  499. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/warping/__init__.pyi +0 -0
  500. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/warping/_ants_warper.py +0 -0
  501. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/warping/_fsl_warper.py +0 -0
  502. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/warping/py.typed +0 -0
  503. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/warping/space_warper.py +0 -0
  504. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/preprocess/warping/tests/test_space_warper.py +0 -0
  505. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/py.typed +0 -0
  506. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/stats.py +0 -0
  507. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/storage/__init__.py +0 -0
  508. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/storage/__init__.pyi +0 -0
  509. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/storage/base.py +0 -0
  510. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/storage/hdf5.py +0 -0
  511. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/storage/pandas_base.py +0 -0
  512. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/storage/py.typed +0 -0
  513. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/storage/sqlite.py +0 -0
  514. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/storage/tests/test_hdf5.py +0 -0
  515. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/storage/tests/test_pandas_base.py +0 -0
  516. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/storage/tests/test_sqlite.py +0 -0
  517. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/storage/tests/test_storage_base.py +0 -0
  518. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/storage/tests/test_utils.py +0 -0
  519. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/storage/utils.py +0 -0
  520. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/testing/__init__.py +0 -0
  521. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/testing/__init__.pyi +0 -0
  522. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
  523. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/testing/datagrabbers.py +0 -0
  524. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/testing/py.typed +0 -0
  525. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/testing/registry.py +0 -0
  526. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/testing/tests/test_adhdtesting_datagrabber.py +0 -0
  527. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
  528. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
  529. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
  530. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/testing/tests/test_testing_registry.py +0 -0
  531. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/testing/tests/test_testing_utils.py +0 -0
  532. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/testing/utils.py +0 -0
  533. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/tests/test_main.py +0 -0
  534. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/tests/test_stats.py +0 -0
  535. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/typing/__init__.py +0 -0
  536. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/typing/__init__.pyi +0 -0
  537. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/typing/_typing.py +0 -0
  538. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/typing/py.typed +0 -0
  539. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/utils/__init__.py +0 -0
  540. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/utils/__init__.pyi +0 -0
  541. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/utils/_config.py +0 -0
  542. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/utils/_yaml.py +0 -0
  543. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/utils/fs.py +0 -0
  544. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/utils/helpers.py +0 -0
  545. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/utils/logging.py +0 -0
  546. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/utils/py.typed +0 -0
  547. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/utils/singleton.py +0 -0
  548. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/utils/tests/test_config.py +0 -0
  549. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/utils/tests/test_fs.py +0 -0
  550. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/utils/tests/test_helpers.py +0 -0
  551. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer/utils/tests/test_logging.py +0 -0
  552. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer.egg-info/dependency_links.txt +0 -0
  553. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer.egg-info/entry_points.txt +0 -0
  554. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer.egg-info/requires.txt +0 -0
  555. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/junifer.egg-info/top_level.txt +0 -0
  556. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/justfile +0 -0
  557. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/pyproject.toml +0 -0
  558. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/scripts/start.sh +0 -0
  559. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/setup.cfg +0 -0
  560. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/setup.py +0 -0
  561. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/tools/create_aomic1000_example_dataset.py +0 -0
  562. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/tools/create_aomicpiop1_example_dataset.py +0 -0
  563. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/tools/create_aomicpiop2_example_dataset.py +0 -0
  564. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/tools/create_bids_example_dataset.py +0 -0
  565. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/tools/create_bids_example_dataset_sessions.py +0 -0
  566. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
  567. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/tools/create_hcp1200_example_dataset.py +0 -0
  568. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/tox.ini +0 -0
  569. {junifer-0.0.8.dev253 → junifer-0.0.8.dev257}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: junifer
3
- Version: 0.0.8.dev253
3
+ Version: 0.0.8.dev257
4
4
  Summary: JUelich NeuroImaging FEature extractoR
5
5
  Author-email: Fede Raimondo <f.raimondo@fz-juelich.de>, Synchon Mandal <s.mandal@fz-juelich.de>
6
6
  Maintainer-email: Fede Raimondo <f.raimondo@fz-juelich.de>, Synchon Mandal <s.mandal@fz-juelich.de>
@@ -0,0 +1 @@
1
+ Fix ReHo computation with ``using="junifer"`` including neighbours outside the mask, checking the wrong centre voxel for ``nneigh=125``, setting voxels outside the mask to 1 instead of 0, skipping voxels at the edges of the volume and setting fully tied neighbourhoods to 1 instead of 0, so that it matches AFNI's ``3dReHo`` by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Use the ``masks`` parameter of :class:`.ReHoMaps`, :class:`.ReHoParcels` and :class:`.ReHoSpheres` to restrict the ReHo computation for both ``using="junifer"`` and ``using="afni"``, instead of an MNI152 brain mask resampled to the input data (wrong for native space) only for ``using="junifer"``. Without ``masks``, both use the voxels with non-zero time series, so that both implementations give the same results by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Vectorize ReHo computation with ``using="junifer"``, making it about 5 times faster 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.dev253'
22
- __version_tuple__ = version_tuple = (0, 0, 8, 'dev253')
21
+ __version__ = version = '0.0.8.dev257'
22
+ __version_tuple__ = version_tuple = (0, 0, 8, 'dev257')
23
23
 
24
- __commit_id__ = commit_id = 'gad12935a9'
24
+ __commit_id__ = commit_id = 'g19ea0a56d'
@@ -55,6 +55,7 @@ class AFNIReHo(metaclass=Singleton):
55
55
  self,
56
56
  input_path: Path,
57
57
  nneigh: int = 27,
58
+ mask_path: Path | None = None,
58
59
  neigh_rad: float | None = None,
59
60
  neigh_x: float | None = None,
60
61
  neigh_y: float | None = None,
@@ -78,6 +79,9 @@ class AFNIReHo(metaclass=Singleton):
78
79
  * 27 : for face-, edge-, and node-wise neighbors
79
80
 
80
81
  (default 27).
82
+ mask_path : pathlib.Path or None, optional
83
+ Path to the mask to restrict the computation to, passed to
84
+ ``3dReHo`` as ``-mask``. If None, no mask is used (default None).
81
85
  neigh_rad : positive float, optional
82
86
  The radius of a desired neighbourhood (default None).
83
87
  neigh_x : positive float, optional
@@ -143,6 +147,8 @@ class AFNIReHo(metaclass=Singleton):
143
147
  f"-prefix {reho_out_path_prefix.resolve()}",
144
148
  f"-inset {input_path.resolve()}",
145
149
  ]
150
+ if mask_path is not None:
151
+ reho_cmd.append(f"-mask {mask_path.resolve()}")
146
152
  # Check ellipsoidal / cuboidal volume arguments
147
153
  if neigh_rad:
148
154
  reho_cmd.append(f"-neigh_RAD {neigh_rad}")
@@ -0,0 +1,272 @@
1
+ """Provide class for computing regional homogeneity (ReHo) using junifer."""
2
+
3
+ # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
+ # License: AGPL
5
+
6
+ from functools import lru_cache
7
+ from pathlib import Path
8
+ from typing import (
9
+ TYPE_CHECKING,
10
+ ClassVar,
11
+ )
12
+
13
+ import nibabel as nib
14
+ import numpy as np
15
+ import scipy as sp
16
+ from nilearn import image as nimg
17
+
18
+ from ...pipeline import WorkDirManager
19
+ from ...typing import Dependencies
20
+ from ...utils import raise_error
21
+ from ...utils.singleton import Singleton
22
+ from ..base import logger
23
+
24
+
25
+ if TYPE_CHECKING:
26
+ from nibabel.nifti1 import Nifti1Image
27
+
28
+
29
+ __all__ = ["JuniferReHo"]
30
+
31
+
32
+ class JuniferReHo(metaclass=Singleton):
33
+ """Class for computing ReHo using junifer.
34
+
35
+ It's designed as a singleton with caching for efficient computation.
36
+
37
+ """
38
+
39
+ _DEPENDENCIES: ClassVar[Dependencies] = {"numpy", "nilearn", "scipy"}
40
+
41
+ def __del__(self) -> None:
42
+ """Terminate the class."""
43
+ # Clear the computation cache
44
+ logger.debug("Clearing cache for ReHo computation via junifer")
45
+ self.compute.cache_clear()
46
+
47
+ @lru_cache(maxsize=None, typed=True)
48
+ def compute(
49
+ self,
50
+ input_path: Path,
51
+ nneigh: int = 27,
52
+ mask_path: Path | None = None,
53
+ ) -> tuple["Nifti1Image", Path]:
54
+ """Compute ReHo map.
55
+
56
+ Parameters
57
+ ----------
58
+ input_path : pathlib.Path
59
+ Path to the input data.
60
+ nneigh : {7, 19, 27, 125}, optional
61
+ Number of voxels in the neighbourhood, inclusive. Can be:
62
+
63
+ * 7 : for facewise neighbours only
64
+ * 19 : for face- and edge-wise neighbours
65
+ * 27 : for face-, edge-, and node-wise neighbors
66
+ * 125 : for 5x5 cuboidal volume
67
+
68
+ (default 27).
69
+ mask_path : pathlib.Path or None, optional
70
+ Path to the mask to restrict the computation to. Voxels outside
71
+ the mask are excluded from every neighbourhood and set to 0 in
72
+ the output. If None, voxels with non-zero time series are used,
73
+ same as AFNI's ``3dReHo`` without ``-mask`` (default None).
74
+
75
+ Returns
76
+ -------
77
+ Niimg-like object
78
+ The ReHo map as NIfTI.
79
+ pathlib.Path
80
+ The path to the ReHo map as NIfTI.
81
+
82
+ Raises
83
+ ------
84
+ ValueError
85
+ If ``nneigh`` is invalid.
86
+
87
+ """
88
+ valid_nneigh = (7, 19, 27, 125)
89
+ if nneigh not in valid_nneigh:
90
+ raise_error(
91
+ f"Invalid value for `nneigh`, should be one of: {valid_nneigh}"
92
+ )
93
+
94
+ logger.debug("Creating cache for ReHo computation via junifer")
95
+
96
+ # Get scan data
97
+ niimg = nib.load(input_path)
98
+ niimg_data = niimg.get_fdata(caching="unchanged")
99
+ # Get scan dimensions
100
+ n_x, n_y, n_z, n_t = niimg_data.shape
101
+
102
+ # Get mask as bool array
103
+ if mask_path is not None:
104
+ logical_mask = np.squeeze(nib.load(mask_path).get_fdata()) != 0
105
+ else:
106
+ # Same as AFNI's 3dReHo without -mask
107
+ logical_mask = np.sum(np.abs(niimg_data), axis=-1) > 1e-6
108
+
109
+ # Get rank of every voxel across time series and tied rank correction
110
+ # for every voxel
111
+ ranks_niimg_data, tied_rank_corrections = _rank_with_ties(niimg_data)
112
+ del niimg_data
113
+
114
+ # Create mask cluster and set start and end indices
115
+ if nneigh in (7, 19, 27):
116
+ mask_cluster = np.ones((3, 3, 3))
117
+
118
+ if nneigh == 7:
119
+ mask_cluster[0, 0, 0] = 0
120
+ mask_cluster[0, 1, 0] = 0
121
+ mask_cluster[0, 2, 0] = 0
122
+ mask_cluster[0, 0, 1] = 0
123
+ mask_cluster[0, 2, 1] = 0
124
+ mask_cluster[0, 0, 2] = 0
125
+ mask_cluster[0, 1, 2] = 0
126
+ mask_cluster[0, 2, 2] = 0
127
+ mask_cluster[1, 0, 0] = 0
128
+ mask_cluster[1, 2, 0] = 0
129
+ mask_cluster[1, 0, 2] = 0
130
+ mask_cluster[1, 2, 2] = 0
131
+ mask_cluster[2, 0, 0] = 0
132
+ mask_cluster[2, 1, 0] = 0
133
+ mask_cluster[2, 2, 0] = 0
134
+ mask_cluster[2, 0, 1] = 0
135
+ mask_cluster[2, 2, 1] = 0
136
+ mask_cluster[2, 0, 2] = 0
137
+ mask_cluster[2, 1, 2] = 0
138
+ mask_cluster[2, 2, 2] = 0
139
+
140
+ elif nneigh == 19:
141
+ mask_cluster[0, 0, 0] = 0
142
+ mask_cluster[0, 2, 0] = 0
143
+ mask_cluster[2, 0, 0] = 0
144
+ mask_cluster[2, 2, 0] = 0
145
+ mask_cluster[0, 0, 2] = 0
146
+ mask_cluster[0, 2, 2] = 0
147
+ mask_cluster[2, 0, 2] = 0
148
+ mask_cluster[2, 2, 2] = 0
149
+
150
+ elif nneigh == 125:
151
+ mask_cluster = np.ones((5, 5, 5))
152
+
153
+ # Exclude voxels outside the mask from every neighbourhood
154
+ ranks_niimg_data[~logical_mask] = 0
155
+ tied_rank_corrections[~logical_mask] = 0
156
+ # Sum over the neighbourhood of every voxel: number of voxels in the
157
+ # mask, ranks per timepoint and tied rank corrections; at the edges
158
+ # of the volume, only the neighbours within it are used
159
+ n_neighbours = sp.ndimage.correlate(
160
+ logical_mask.astype(np.float64),
161
+ mask_cluster,
162
+ mode="constant",
163
+ )
164
+ neighbourhood_rank_sums = sp.ndimage.correlate(
165
+ ranks_niimg_data,
166
+ mask_cluster[..., np.newaxis],
167
+ mode="constant",
168
+ )
169
+ del ranks_niimg_data
170
+ neighbourhood_tied_rank_corrections = sp.ndimage.correlate(
171
+ tied_rank_corrections,
172
+ mask_cluster,
173
+ mode="constant",
174
+ )
175
+ # Calculate Kendall's coefficient of concordance (KCC)
176
+ np.square(neighbourhood_rank_sums, out=neighbourhood_rank_sums)
177
+ numerator = (12 * np.sum(neighbourhood_rank_sums, axis=-1)) - (
178
+ 3 * n_neighbours**2 * n_t * (n_t + 1) ** 2
179
+ )
180
+ del neighbourhood_rank_sums
181
+ denominator = (n_neighbours**2 * n_t * (n_t**2 - 1)) - (
182
+ n_neighbours * neighbourhood_tied_rank_corrections
183
+ )
184
+ # If all the time series in the neighbourhood are fully tied, the
185
+ # denominator is 0 and KCC is set to 0, same as AFNI's 3dReHo
186
+ with np.errstate(divide="ignore", invalid="ignore"):
187
+ kcc = np.where(denominator == 0, 0.0, numerator / denominator)
188
+
189
+ # Initialize 3D array to store reho map; voxels outside the mask stay
190
+ # at 0, same as AFNI's 3dReHo
191
+ reho_map = np.zeros((n_x, n_y, n_z), dtype=np.float32)
192
+ reho_map[logical_mask] = kcc[logical_mask]
193
+
194
+ # Create new image like target image
195
+ output_data = nimg.new_img_like(
196
+ ref_niimg=niimg,
197
+ data=reho_map,
198
+ copy_header=False,
199
+ )
200
+
201
+ # Create element-scoped tempdir so that the ReHo map is
202
+ # available later as nibabel stores file path reference for
203
+ # loading on computation
204
+ element_tempdir = WorkDirManager().get_element_tempdir(
205
+ prefix="junifer_reho"
206
+ )
207
+ output_path = element_tempdir / "output.nii.gz"
208
+ # Save computed data to file
209
+ nib.save(output_data, output_path)
210
+
211
+ return output_data, output_path # type: ignore
212
+
213
+
214
+ def _rank_with_ties(data: np.ndarray) -> tuple[np.ndarray, np.ndarray]:
215
+ """Rank data along the last axis and compute tied rank corrections.
216
+
217
+ Equivalent to ``scipy.stats.rankdata(data, axis=-1)`` (tied values get
218
+ their average rank and NaN propagates to the whole time series), but
219
+ sorting only once.
220
+
221
+ Parameters
222
+ ----------
223
+ data : numpy.ndarray
224
+ The data to rank along the last axis.
225
+
226
+ Returns
227
+ -------
228
+ numpy.ndarray
229
+ The ranks of ``data`` along the last axis.
230
+ numpy.ndarray
231
+ The tied rank correction, the sum of ``t^3 - t`` over the groups of
232
+ ``t`` tied values, for every element along the last axis.
233
+
234
+ """
235
+ n = data.shape[-1]
236
+ sort_idx = np.argsort(data, axis=-1, kind="stable")
237
+ sorted_data = np.take_along_axis(data, sort_idx, axis=-1)
238
+ positions = np.arange(1, n + 1)
239
+ # Mark the first and last sample of every tie group in sorted order
240
+ is_first = np.ones(data.shape, dtype=bool)
241
+ is_first[..., 1:] = sorted_data[..., 1:] != sorted_data[..., :-1]
242
+ del sorted_data
243
+ is_last = np.ones(data.shape, dtype=bool)
244
+ is_last[..., :-1] = is_first[..., 1:]
245
+ # Min and max rank of the tie group of every sample in sorted order
246
+ min_ranks = np.maximum.accumulate(
247
+ np.where(is_first, positions, 0), axis=-1
248
+ )
249
+ del is_first
250
+ max_ranks = np.flip(
251
+ np.minimum.accumulate(
252
+ np.flip(np.where(is_last, positions, n + 1), axis=-1), axis=-1
253
+ ),
254
+ axis=-1,
255
+ )
256
+ del is_last
257
+ # Every sample belongs to a tie group of size t = max - min + 1, and
258
+ # summing t^2 - 1 over the samples is the same as summing t^3 - t over
259
+ # the tie groups
260
+ tie_sizes = max_ranks - min_ranks + 1
261
+ tied_rank_corrections = np.sum(tie_sizes**2 - 1, axis=-1).astype(
262
+ np.float64
263
+ )
264
+ del tie_sizes
265
+ # Tied values get their average rank; put back in the original order
266
+ ranks = np.empty(data.shape, dtype=np.float64)
267
+ np.put_along_axis(ranks, sort_idx, (min_ranks + max_ranks) / 2, axis=-1)
268
+ # Propagate NaN to the whole time series, same as scipy.stats.rankdata
269
+ has_nan = np.isnan(data).any(axis=-1)
270
+ ranks[has_nan] = np.nan
271
+ tied_rank_corrections[has_nan] = np.nan
272
+ return ranks, tied_rank_corrections
@@ -3,6 +3,7 @@
3
3
  # Authors: Synchon Mandal <s.mandal@fz-juelich.de>
4
4
  # License: AGPL
5
5
 
6
+ import hashlib
6
7
  from enum import Enum
7
8
  from pathlib import Path
8
9
  from typing import (
@@ -12,9 +13,13 @@ from typing import (
12
13
  ClassVar,
13
14
  )
14
15
 
16
+ import nibabel as nib
17
+ import numpy as np
15
18
  from pydantic import BeforeValidator
16
19
 
20
+ from ...data import get_data
17
21
  from ...datagrabber import DataType
22
+ from ...pipeline import WorkDirManager
18
23
  from ...storage import StorageType
19
24
  from ...typing import ConditionalDependencies, MarkerInOutMappings
20
25
  from ...utils import ensure_list_or_none
@@ -98,8 +103,10 @@ class ReHoBase(BaseMarker):
98
103
  The parameters to pass to the aggregation function.
99
104
  See :func:`.get_aggfunc_by_name` for options (default None).
100
105
  masks : str, dict, list of them or None, optional
101
- The specification of the masks to apply to regions before extracting
102
- signals. Check :ref:`Using Masks <using_masks>` for more details.
106
+ The specification of the masks to apply. The ReHo computation is
107
+ restricted to the voxels in the mask, and the mask is also applied
108
+ to regions before extracting signals. Check
109
+ :ref:`Using Masks <using_masks>` for more details.
103
110
  If None, will not apply any mask (default None).
104
111
  name : str or None, optional
105
112
  The name of the marker.
@@ -136,6 +143,7 @@ class ReHoBase(BaseMarker):
136
143
  def _compute(
137
144
  self,
138
145
  input_data: dict[str, Any],
146
+ extra_input: dict[str, Any] | None = None,
139
147
  **reho_params: Any,
140
148
  ) -> tuple["Nifti1Image", Path]:
141
149
  """Compute voxel-wise ReHo.
@@ -151,6 +159,9 @@ class ReHoBase(BaseMarker):
151
159
  ----------
152
160
  input_data : dict
153
161
  The BOLD data as dictionary.
162
+ extra_input : dict, optional
163
+ The other fields in the pipeline data object. Used to compute
164
+ the mask in the space of ``input_data`` (default None).
154
165
  **reho_params : dict
155
166
  Extra keyword arguments for ReHo.
156
167
 
@@ -178,9 +189,22 @@ class ReHoBase(BaseMarker):
178
189
  estimator = AFNIReHo()
179
190
  elif self.using == "junifer":
180
191
  estimator = JuniferReHo()
192
+ # Get mask in the space of the input data
193
+ mask_path = None
194
+ if self.masks is not None:
195
+ logger.debug(f"Masking with {self.masks}")
196
+ mask_path = _save_mask(
197
+ get_data(
198
+ kind="mask",
199
+ names=self.masks,
200
+ target_data=input_data,
201
+ extra_input=extra_input,
202
+ )
203
+ )
181
204
  # Compute reho
182
205
  reho_map, reho_map_path = estimator.compute( # type: ignore
183
206
  input_path=input_data["path"],
207
+ mask_path=mask_path,
184
208
  **reho_params,
185
209
  )
186
210
 
@@ -193,3 +217,38 @@ class ReHoBase(BaseMarker):
193
217
  return reho_map, input_data["path"]
194
218
 
195
219
  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
@@ -116,10 +116,12 @@ class ReHoMaps(ReHoBase):
116
116
  # transformation to native space.
117
117
  if self.reho_params is not None:
118
118
  reho_map, reho_file_path = self._compute(
119
- input_data=input, **self.reho_params
119
+ input_data=input, extra_input=extra_input, **self.reho_params
120
120
  )
121
121
  else:
122
- reho_map, reho_file_path = self._compute(input_data=input)
122
+ reho_map, reho_file_path = self._compute(
123
+ input_data=input, extra_input=extra_input
124
+ )
123
125
 
124
126
  # Perform aggregation on reho map
125
127
  aggregation_input = dict(input.items())
@@ -125,10 +125,12 @@ class ReHoParcels(ReHoBase):
125
125
  # transformation to native space.
126
126
  if self.reho_params is not None:
127
127
  reho_map, reho_file_path = self._compute(
128
- input_data=input, **self.reho_params
128
+ input_data=input, extra_input=extra_input, **self.reho_params
129
129
  )
130
130
  else:
131
- reho_map, reho_file_path = self._compute(input_data=input)
131
+ reho_map, reho_file_path = self._compute(
132
+ input_data=input, extra_input=extra_input
133
+ )
132
134
 
133
135
  # Perform aggregation on reho map
134
136
  aggregation_input = dict(input.items())
@@ -134,10 +134,12 @@ class ReHoSpheres(ReHoBase):
134
134
  # transformation to native space.
135
135
  if self.reho_params is not None:
136
136
  reho_map, reho_file_path = self._compute(
137
- input_data=input, **self.reho_params
137
+ input_data=input, extra_input=extra_input, **self.reho_params
138
138
  )
139
139
  else:
140
- reho_map, reho_file_path = self._compute(input_data=input)
140
+ reho_map, reho_file_path = self._compute(
141
+ input_data=input, extra_input=extra_input
142
+ )
141
143
 
142
144
  # Perform aggregation on reho map
143
145
  aggregation_input = dict(input.items())
@@ -0,0 +1,178 @@
1
+ """Provide tests for ReHo computation using junifer."""
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
+ import scipy as sp
12
+ from numpy.testing import assert_allclose, assert_array_equal
13
+
14
+ from junifer.markers.reho._afni_reho import AFNIReHo
15
+ from junifer.markers.reho._junifer_reho import JuniferReHo, _rank_with_ties
16
+ from junifer.pipeline import WorkDirManager
17
+ from junifer.pipeline.utils import _check_afni
18
+
19
+
20
+ def _tied_rank_corrections(ranks: np.ndarray) -> np.ndarray:
21
+ """Compute tied rank corrections one time series at a time."""
22
+ out = np.zeros(ranks.shape[:-1])
23
+ for idx in np.ndindex(ranks.shape[:-1]):
24
+ _, tie_count = np.unique(ranks[idx], return_counts=True)
25
+ out[idx] = np.sum(tie_count**3 - tie_count)
26
+ return out
27
+
28
+
29
+ @pytest.mark.parametrize(
30
+ "shape, scale",
31
+ [
32
+ ((4, 3, 2, 50), 3), # many ties
33
+ ((3, 3, 3, 30), 100), # few ties
34
+ ((2, 2, 2, 10), 0), # all values tied
35
+ ],
36
+ )
37
+ def test_rank_with_ties(shape: tuple[int, ...], scale: float) -> None:
38
+ """Test ranking with ties against scipy.
39
+
40
+ Parameters
41
+ ----------
42
+ shape : tuple of int
43
+ The shape of the data.
44
+ scale : float
45
+ The scale of the data before rounding.
46
+
47
+ """
48
+ data = np.round(np.random.default_rng(0).normal(size=shape) * scale)
49
+ ranks, tied_rank_corrections = _rank_with_ties(data)
50
+ expected_ranks = sp.stats.rankdata(data, axis=-1)
51
+ assert_array_equal(ranks, expected_ranks)
52
+ assert_array_equal(
53
+ tied_rank_corrections, _tied_rank_corrections(expected_ranks)
54
+ )
55
+
56
+
57
+ def test_rank_with_ties_nan() -> None:
58
+ """Test NaN propagates to the whole time series."""
59
+ data = np.array([[1.0, np.nan, 2.0], [1.0, 3.0, 2.0]])
60
+ ranks, tied_rank_corrections = _rank_with_ties(data)
61
+ assert np.isnan(ranks[0]).all()
62
+ assert np.isnan(tied_rank_corrections[0])
63
+ assert_array_equal(ranks[1], [1, 3, 2])
64
+ assert tied_rank_corrections[1] == 0
65
+
66
+
67
+ def _save(data: np.ndarray, path: Path) -> Path:
68
+ """Save data as NIfTI."""
69
+ nib.save(nib.Nifti1Image(data, np.eye(4)), path)
70
+ return path
71
+
72
+
73
+ def test_JuniferReHo_nan(tmp_path: Path) -> None:
74
+ """Test NaN time series do not give valid ReHo values.
75
+
76
+ Parameters
77
+ ----------
78
+ tmp_path : pathlib.Path
79
+ The path to the test directory.
80
+
81
+ """
82
+ WorkDirManager().workdir = tmp_path
83
+ data = np.random.default_rng(0).normal(size=(7, 7, 7, 20))
84
+ data[3, 3, 3, 5] = np.nan
85
+ bold_path = _save(data.astype(np.float32), tmp_path / "bold_nan.nii")
86
+ mask_path = _save(np.ones((7, 7, 7), dtype=np.uint8), tmp_path / "m.nii")
87
+
88
+ # With a mask including the NaN voxel, every neighbourhood with it is NaN
89
+ reho = JuniferReHo().compute(bold_path, mask_path=mask_path)[0]
90
+ reho = reho.get_fdata()
91
+ assert np.isnan(reho[2:5, 2:5, 2:5]).all()
92
+ reho[2:5, 2:5, 2:5] = 0
93
+ assert np.isfinite(reho).all()
94
+
95
+ # Without mask, the NaN voxel is excluded as AFNI's 3dReHo does
96
+ reho = JuniferReHo().compute(bold_path)[0].get_fdata()
97
+ assert np.isfinite(reho).all()
98
+ assert reho[3, 3, 3] == 0
99
+
100
+
101
+ def test_JuniferReHo_mask(tmp_path: Path) -> None:
102
+ """Test ReHo is restricted to the mask.
103
+
104
+ Parameters
105
+ ----------
106
+ tmp_path : pathlib.Path
107
+ The path to the test directory.
108
+
109
+ """
110
+ WorkDirManager().workdir = tmp_path
111
+ data = np.random.default_rng(0).normal(size=(7, 7, 7, 20))
112
+ bold_path = _save(data.astype(np.float32), tmp_path / "bold.nii")
113
+ mask = np.ones((7, 7, 7), dtype=np.uint8)
114
+ mask[:3] = 0
115
+ mask_path = _save(mask, tmp_path / "mask.nii")
116
+
117
+ masked = JuniferReHo().compute(bold_path, mask_path=mask_path)[0]
118
+ masked = masked.get_fdata()
119
+ unmasked = JuniferReHo().compute(bold_path)[0].get_fdata()
120
+ # Outside the mask is 0
121
+ assert (masked[:3] == 0).all()
122
+ # Next to the mask boundary, neighbours outside the mask are excluded
123
+ assert not np.allclose(masked[3, 1:-1, 1:-1], unmasked[3, 1:-1, 1:-1])
124
+ # Far from the mask boundary, nothing changes
125
+ assert_array_equal(masked[4:-1, 1:-1, 1:-1], unmasked[4:-1, 1:-1, 1:-1])
126
+
127
+
128
+ @pytest.mark.external
129
+ @pytest.mark.skipif(
130
+ _check_afni() is False, reason="requires AFNI to be in PATH"
131
+ )
132
+ @pytest.mark.parametrize("nneigh", [7, 19, 27])
133
+ @pytest.mark.parametrize("use_mask", [False, True])
134
+ def test_JuniferReHo_vs_AFNI(
135
+ tmp_path: Path, nneigh: int, use_mask: bool
136
+ ) -> None:
137
+ """Test junifer and AFNI give the same ReHo map.
138
+
139
+ The data covers the edges of the volume, fully tied neighbourhoods (the
140
+ denominator of KCC is 0), voxels with all-zero time series and ties.
141
+
142
+ Parameters
143
+ ----------
144
+ tmp_path : pathlib.Path
145
+ The path to the test directory.
146
+ nneigh : int
147
+ The number of voxels in the neighbourhood.
148
+ use_mask : bool
149
+ Whether to use a mask.
150
+
151
+ """
152
+ WorkDirManager().workdir = tmp_path
153
+ data = np.round(
154
+ np.random.default_rng(0).normal(size=(9, 8, 7, 25)) * 3
155
+ ).astype(np.float32)
156
+ # Constant time series: fully tied neighbourhoods
157
+ data[:4, :4, :4] = 5
158
+ # All-zero time series: outside AFNI's implicit mask
159
+ data[6:, 5:, 4:] = 0
160
+ bold_path = _save(data, tmp_path / "bold.nii")
161
+ mask_path = None
162
+ if use_mask:
163
+ mask = np.ones(data.shape[:3], dtype=np.uint8)
164
+ mask[:, :, 0] = 0
165
+ mask[4, 4, 3] = 0
166
+ mask_path = _save(mask, tmp_path / "mask.nii")
167
+
168
+ junifer_reho = JuniferReHo().compute(
169
+ bold_path, nneigh=nneigh, mask_path=mask_path
170
+ )[0]
171
+ afni_reho = AFNIReHo().compute(
172
+ bold_path, nneigh=nneigh, mask_path=mask_path
173
+ )[0]
174
+ assert_allclose(
175
+ junifer_reho.get_fdata(),
176
+ np.squeeze(afni_reho.get_fdata()),
177
+ atol=1e-6,
178
+ )