junifer 0.0.8.dev303__tar.gz → 0.0.8.dev306__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 (603) hide show
  1. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.gitmodules +0 -3
  2. {junifer-0.0.8.dev303/junifer.egg-info → junifer-0.0.8.dev306}/PKG-INFO +2 -1
  3. junifer-0.0.8.dev306/docs/changes/newsfragments/504.bugfix +1 -0
  4. junifer-0.0.8.dev306/docs/changes/newsfragments/504.misc +1 -0
  5. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/_version.py +3 -3
  6. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/tests/test_cli_utils.py +2 -0
  7. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/conftest.py +0 -1
  8. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/hdf5.py +150 -97
  9. junifer-0.0.8.dev306/junifer/storage/tests/data/collected_h5io_fork.hdf5 +0 -0
  10. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/tests/test_hdf5.py +147 -0
  11. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306/junifer.egg-info}/PKG-INFO +2 -1
  12. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer.egg-info/SOURCES.txt +3 -23
  13. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer.egg-info/requires.txt +1 -0
  14. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer.egg-info/scm_file_list.json +3 -23
  15. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer.egg-info/scm_version.json +2 -2
  16. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/pyproject.toml +2 -4
  17. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/uv.lock +15 -0
  18. junifer-0.0.8.dev303/junifer/external/h5io/.coveragerc +0 -7
  19. junifer-0.0.8.dev303/junifer/external/h5io/.gitattributes +0 -1
  20. junifer-0.0.8.dev303/junifer/external/h5io/.gitignore +0 -16
  21. junifer-0.0.8.dev303/junifer/external/h5io/.travis.yml +0 -58
  22. junifer-0.0.8.dev303/junifer/external/h5io/.vscode/launch.json +0 -17
  23. junifer-0.0.8.dev303/junifer/external/h5io/.vscode/settings.json +0 -8
  24. junifer-0.0.8.dev303/junifer/external/h5io/LICENSE.txt +0 -24
  25. junifer-0.0.8.dev303/junifer/external/h5io/MANIFEST.in +0 -2
  26. junifer-0.0.8.dev303/junifer/external/h5io/Makefile +0 -45
  27. junifer-0.0.8.dev303/junifer/external/h5io/README.rst +0 -94
  28. junifer-0.0.8.dev303/junifer/external/h5io/azure-pipelines.yml +0 -39
  29. junifer-0.0.8.dev303/junifer/external/h5io/h5io/__init__.py +0 -15
  30. junifer-0.0.8.dev303/junifer/external/h5io/h5io/_h5io.py +0 -767
  31. junifer-0.0.8.dev303/junifer/external/h5io/h5io/_version.py +0 -1
  32. junifer-0.0.8.dev303/junifer/external/h5io/h5io/chunked_array.py +0 -94
  33. junifer-0.0.8.dev303/junifer/external/h5io/h5io/chunked_list.py +0 -65
  34. junifer-0.0.8.dev303/junifer/external/h5io/h5io/tests/__init__.py +0 -0
  35. junifer-0.0.8.dev303/junifer/external/h5io/h5io/tests/test_chunked_array.py +0 -82
  36. junifer-0.0.8.dev303/junifer/external/h5io/h5io/tests/test_chunked_list.py +0 -46
  37. junifer-0.0.8.dev303/junifer/external/h5io/h5io/tests/test_io.py +0 -312
  38. junifer-0.0.8.dev303/junifer/external/h5io/setup.cfg +0 -14
  39. junifer-0.0.8.dev303/junifer/external/h5io/setup.py +0 -63
  40. junifer-0.0.8.dev303/junifer/external/h5io/versioneer.py +0 -1822
  41. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.dockerignore +0 -0
  42. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  43. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  44. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
  45. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
  46. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  47. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
  48. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/dependabot.yml +0 -0
  49. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/pull_request_template.md +0 -0
  50. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/workflows/check-stale.yml +0 -0
  51. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/workflows/ci.yml +0 -0
  52. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/workflows/docker-publish.yml +0 -0
  53. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/workflows/docs-preview.yml +0 -0
  54. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/workflows/docs.yml +0 -0
  55. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/workflows/lint.yml +0 -0
  56. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.github/workflows/publish.yml +0 -0
  57. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.gitignore +0 -0
  58. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.pre-commit-config.yaml +0 -0
  59. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/.python-version +0 -0
  60. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/AUTHORS.rst +0 -0
  61. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/Dockerfile +0 -0
  62. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/Dockerfile-ci +0 -0
  63. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/LICENSE.md +0 -0
  64. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/README.md +0 -0
  65. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/codecov.yml +0 -0
  66. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/conda-env.yml +0 -0
  67. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/Makefile +0 -0
  68. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/_static/css/custom.css +0 -0
  69. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/_static/css/version_selector.css +0 -0
  70. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/_static/js/custom.js +0 -0
  71. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/_templates/versions.html +0 -0
  72. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/api.rst +0 -0
  73. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/cli.rst +0 -0
  74. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/configs.rst +0 -0
  75. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/data.rst +0 -0
  76. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/datagrabbers.rst +0 -0
  77. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/datareaders.rst +0 -0
  78. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/index.rst +0 -0
  79. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/markers.rst +0 -0
  80. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/nilearn.rst +0 -0
  81. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/onthefly.rst +0 -0
  82. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/pipeline.rst +0 -0
  83. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/preprocessing.rst +0 -0
  84. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/stats.rst +0 -0
  85. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/storage.rst +0 -0
  86. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/testing.rst +0 -0
  87. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/api/utils.rst +0 -0
  88. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/builtin.rst +0 -0
  89. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/contributors.inc +0 -0
  90. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/.gitignore +0 -0
  91. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/239.enh +0 -0
  92. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/364.doc +0 -0
  93. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/364.enh +0 -0
  94. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/364.feature +0 -0
  95. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/474.misc +0 -0
  96. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/482.bugfix +0 -0
  97. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/492.bugfix +0 -0
  98. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/499.enh +0 -0
  99. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/502.bugfix +0 -0
  100. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/503.enh +0 -0
  101. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/509.enh +0 -0
  102. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/510.bugfix +0 -0
  103. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/511.bugfix +0 -0
  104. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/511.bugfix.1 +0 -0
  105. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/511.change +0 -0
  106. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/511.enh +0 -0
  107. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/511.enh.1 +0 -0
  108. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/511.feature +0 -0
  109. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/511.misc +0 -0
  110. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/511.misc.1 +0 -0
  111. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/513.doc +0 -0
  112. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/513.misc +0 -0
  113. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/514.bugfix +0 -0
  114. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/514.bugfix.1 +0 -0
  115. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/514.enh +0 -0
  116. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/515.doc +0 -0
  117. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/515.enh +0 -0
  118. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/515.enh.1 +0 -0
  119. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/515.misc +0 -0
  120. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/515.misc.1 +0 -0
  121. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/516.bugfix +0 -0
  122. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/516.bugfix.1 +0 -0
  123. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/516.bugfix.2 +0 -0
  124. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/516.change +0 -0
  125. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/516.change.1 +0 -0
  126. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/516.misc +0 -0
  127. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.bugfix +0 -0
  128. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.bugfix.1 +0 -0
  129. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.bugfix.2 +0 -0
  130. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.bugfix.3 +0 -0
  131. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.bugfix.4 +0 -0
  132. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.bugfix.5 +0 -0
  133. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.bugfix.6 +0 -0
  134. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.change +0 -0
  135. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.doc +0 -0
  136. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.misc +0 -0
  137. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.misc.1 +0 -0
  138. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.misc.2 +0 -0
  139. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.misc.3 +0 -0
  140. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/520.removal +0 -0
  141. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/521.bugfix +0 -0
  142. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/522.bugfix +0 -0
  143. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/522.enh +0 -0
  144. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/changes/newsfragments/523.misc +0 -0
  145. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/conf.py +0 -0
  146. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/contribution.rst +0 -0
  147. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/confounds_format.rst +0 -0
  148. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/coordinates.rst +0 -0
  149. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/data_dump_asset.rst +0 -0
  150. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/data_registries.rst +0 -0
  151. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/data_types.rst +0 -0
  152. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/datagrabber.rst +0 -0
  153. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/dependencies.rst +0 -0
  154. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/extension.rst +0 -0
  155. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/index.rst +0 -0
  156. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/logging.rst +0 -0
  157. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/maps.rst +0 -0
  158. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/marker.rst +0 -0
  159. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/masks.rst +0 -0
  160. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/parcellations.rst +0 -0
  161. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/plugins.rst +0 -0
  162. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/extending/preprocessor.rst +0 -0
  163. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/faq.rst +0 -0
  164. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/help.rst +0 -0
  165. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/images/junifer_logo.png +0 -0
  166. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/index.rst +0 -0
  167. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/installation.rst +0 -0
  168. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/links.inc +0 -0
  169. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/maintaining.rst +0 -0
  170. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/poly.py +0 -0
  171. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/poly_files/patches/version_banner.html +0 -0
  172. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/poly_files/patches/versions.html +0 -0
  173. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/poly_files/templates/index.html +0 -0
  174. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/starting.rst +0 -0
  175. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/understanding/data.rst +0 -0
  176. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/understanding/datagrabber.rst +0 -0
  177. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/understanding/datareader.rst +0 -0
  178. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/understanding/index.rst +0 -0
  179. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/understanding/marker.rst +0 -0
  180. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/understanding/pipeline.rst +0 -0
  181. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/understanding/preprocess.rst +0 -0
  182. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/understanding/storage.rst +0 -0
  183. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/using/codeless.rst +0 -0
  184. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/using/configuring.rst +0 -0
  185. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/using/dumping.rst +0 -0
  186. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/using/index.rst +0 -0
  187. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/using/masks.rst +0 -0
  188. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/using/queueing.rst +0 -0
  189. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/using/running.rst +0 -0
  190. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/docs/whats_new.rst +0 -0
  191. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/README.rst +0 -0
  192. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/norun_hcpfc_pearson.py +0 -0
  193. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/norun_ukbvm_gmd.py +0 -0
  194. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/run_compute_parcel_mean.py +0 -0
  195. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/run_datagrabber_bids_datalad.py +0 -0
  196. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/run_ets_rss_marker.py +0 -0
  197. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/run_junifer_julearn.py +0 -0
  198. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/run_run_gmd_mean.py +0 -0
  199. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/yamls/gmd_mean.yaml +0 -0
  200. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
  201. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/yamls/partly_cloudy_agg_mean_tian.yml +0 -0
  202. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/examples/yamls/ukb_gmd_mean.yaml +0 -0
  203. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/ignore_words.txt +0 -0
  204. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/__init__.py +0 -0
  205. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/__init__.pyi +0 -0
  206. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/__init__.py +0 -0
  207. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/__init__.pyi +0 -0
  208. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/decorators.py +0 -0
  209. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/functions.py +0 -0
  210. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/py.typed +0 -0
  211. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/queue_context/__init__.py +0 -0
  212. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/queue_context/__init__.pyi +0 -0
  213. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/queue_context/gnu_parallel_local_adapter.py +0 -0
  214. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/queue_context/htcondor_adapter.py +0 -0
  215. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/queue_context/py.typed +0 -0
  216. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/queue_context/queue_context_adapter.py +0 -0
  217. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/queue_context/tests/test_gnu_parallel_local_adapter.py +0 -0
  218. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/queue_context/tests/test_htcondor_adapter.py +0 -0
  219. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
  220. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/afni/3dRSFC +0 -0
  221. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/afni/3dReHo +0 -0
  222. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/afni/afni +0 -0
  223. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/afni/run_afni_docker.sh +0 -0
  224. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/ants/ResampleImage +0 -0
  225. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/ants/antsApplyTransforms +0 -0
  226. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/ants/antsApplyTransformsToPoints +0 -0
  227. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/ants/run_ants_docker.sh +0 -0
  228. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/freesurfer/mri_binarize +0 -0
  229. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/freesurfer/mri_mc +0 -0
  230. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/freesurfer/mri_pretess +0 -0
  231. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/freesurfer/mris_convert +0 -0
  232. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/freesurfer/run_freesurfer_docker.sh +0 -0
  233. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/fsl/applywarp +0 -0
  234. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/fsl/flirt +0 -0
  235. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/fsl/img2imgcoord +0 -0
  236. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
  237. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/fsl/std2imgcoord +0 -0
  238. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/run_conda.bash +0 -0
  239. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/run_conda.zsh +0 -0
  240. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/run_venv.bash +0 -0
  241. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/res/run_venv.zsh +0 -0
  242. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/tests/test_decorators.py +0 -0
  243. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/api/tests/test_functions.py +0 -0
  244. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/__init__.py +0 -0
  245. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/__init__.pyi +0 -0
  246. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/cli.py +0 -0
  247. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/parser.py +0 -0
  248. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/py.typed +0 -0
  249. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/tests/data/gmd_mean.yaml +0 -0
  250. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/tests/data/gmd_mean_htcondor.yaml +0 -0
  251. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/tests/data/partly_cloudy_agg_mean_tian.yml +0 -0
  252. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/tests/test_cli.py +0 -0
  253. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/cli/utils.py +0 -0
  254. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/__init__.py +0 -0
  255. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/__init__.pyi +0 -0
  256. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/__init__.py +0 -0
  257. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/__init__.pyi +0 -0
  258. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
  259. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/__init__.pyi +0 -0
  260. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
  261. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
  262. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
  263. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/py.typed +0 -0
  264. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
  265. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
  266. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
  267. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
  268. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
  269. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
  270. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
  271. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/juseless/py.typed +0 -0
  272. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/configs/py.typed +0 -0
  273. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/__init__.py +0 -0
  274. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/__init__.pyi +0 -0
  275. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/_dispatch.py +0 -0
  276. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/coordinates/__init__.py +0 -0
  277. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/coordinates/__init__.pyi +0 -0
  278. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/coordinates/_ants_coordinates_warper.py +0 -0
  279. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/coordinates/_coordinates.py +0 -0
  280. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/coordinates/_fsl_coordinates_warper.py +0 -0
  281. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/coordinates/tests/test_coordinates.py +0 -0
  282. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/coordinates/tests/test_coordinates_names.py +0 -0
  283. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/maps/__init__.py +0 -0
  284. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/maps/__init__.pyi +0 -0
  285. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/maps/_ants_maps_warper.py +0 -0
  286. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/maps/_fsl_maps_warper.py +0 -0
  287. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/maps/_maps.py +0 -0
  288. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/maps/tests/test_maps.py +0 -0
  289. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/masks/__init__.py +0 -0
  290. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/masks/__init__.pyi +0 -0
  291. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/masks/_ants_mask_warper.py +0 -0
  292. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/masks/_fsl_mask_warper.py +0 -0
  293. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/masks/_masks.py +0 -0
  294. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/masks/tests/test_masks.py +0 -0
  295. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/parcellations/__init__.py +0 -0
  296. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/parcellations/__init__.pyi +0 -0
  297. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/parcellations/_ants_parcellation_warper.py +0 -0
  298. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/parcellations/_fsl_parcellation_warper.py +0 -0
  299. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/parcellations/_parcellations.py +0 -0
  300. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/parcellations/tests/test_parcellations.py +0 -0
  301. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/pipeline_data_registry_base.py +0 -0
  302. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/py.typed +0 -0
  303. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/template_spaces.py +0 -0
  304. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/tests/test_data_utils.py +0 -0
  305. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/tests/test_dispatch.py +0 -0
  306. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/tests/test_template_spaces.py +0 -0
  307. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/data/utils.py +0 -0
  308. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/__init__.py +0 -0
  309. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/__init__.pyi +0 -0
  310. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/__init__.py +0 -0
  311. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/__init__.pyi +0 -0
  312. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/_types.py +0 -0
  313. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/id1000.py +0 -0
  314. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/piop1.py +0 -0
  315. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/piop2.py +0 -0
  316. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/py.typed +0 -0
  317. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
  318. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
  319. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
  320. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/base.py +0 -0
  321. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/datalad_base.py +0 -0
  322. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/dmcc13_benchmark.py +0 -0
  323. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/hcp1200/__init__.py +0 -0
  324. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/hcp1200/__init__.pyi +0 -0
  325. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
  326. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
  327. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/hcp1200/py.typed +0 -0
  328. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
  329. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/multiple.py +0 -0
  330. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/pattern.py +0 -0
  331. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/pattern_datalad.py +0 -0
  332. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/pattern_validation_mixin.py +0 -0
  333. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/py.typed +0 -0
  334. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/tests/test_base.py +0 -0
  335. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
  336. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/tests/test_dmcc13_benchmark.py +0 -0
  337. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/tests/test_multiple.py +0 -0
  338. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/tests/test_pattern.py +0 -0
  339. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
  340. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datagrabber/tests/test_pattern_validation_mixin.py +0 -0
  341. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datareader/__init__.py +0 -0
  342. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datareader/__init__.pyi +0 -0
  343. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datareader/default.py +0 -0
  344. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datareader/py.typed +0 -0
  345. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/datareader/tests/test_default_reader.py +0 -0
  346. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.codecov.yml +0 -0
  347. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.codespellignore +0 -0
  348. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  349. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  350. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  351. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/ISSUE_TEMPLATE/questions-help-support.md +0 -0
  352. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/dependabot.yml +0 -0
  353. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/workflows/build.yml +0 -0
  354. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/workflows/code-style.yml +0 -0
  355. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/workflows/doc.yml +0 -0
  356. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/workflows/publish.yml +0 -0
  357. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.github/workflows/pytest.yml +0 -0
  358. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/.gitignore +0 -0
  359. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/LICENSE +0 -0
  360. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/README.md +0 -0
  361. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/__init__.py +0 -0
  362. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/_version.py +0 -0
  363. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/asymmetry.py +0 -0
  364. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/brainprint.py +0 -0
  365. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/cli/__init__.py +0 -0
  366. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/cli/help_text.py +0 -0
  367. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/cli/parser.py +0 -0
  368. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/cli/utils.py +0 -0
  369. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/commands/__init__.py +0 -0
  370. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/commands/sys_info.py +0 -0
  371. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/surfaces.py +0 -0
  372. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/utils/__init__.py +0 -0
  373. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/utils/_config.py +0 -0
  374. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/utils/tests/__init__.py +0 -0
  375. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/utils/tests/test_config.py +0 -0
  376. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/brainprint/utils/utils.py +0 -0
  377. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/Makefile +0 -0
  378. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/_static/.gitkeep +0 -0
  379. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/_templates/autosummary/class.rst +0 -0
  380. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/_templates/autosummary/function.rst +0 -0
  381. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/_templates/autosummary/module.rst +0 -0
  382. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/api/index.rst +0 -0
  383. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/conf.py +0 -0
  384. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/index.rst +0 -0
  385. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/links.inc +0 -0
  386. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/make.bat +0 -0
  387. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/doc/references.bib +0 -0
  388. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/pyproject.toml +0 -0
  389. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/BrainPrint/setup.py +0 -0
  390. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/__init__.py +0 -0
  391. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/__init__.pyi +0 -0
  392. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/nilearn/__init__.py +0 -0
  393. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/nilearn/__init__.pyi +0 -0
  394. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/nilearn/junifer_connectivity_measure.py +0 -0
  395. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
  396. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/nilearn/py.typed +0 -0
  397. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/nilearn/tests/test_junifer_connectivity_measure.py +0 -0
  398. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
  399. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/external/py.typed +0 -0
  400. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/__init__.py +0 -0
  401. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/__init__.pyi +0 -0
  402. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/base.py +0 -0
  403. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/brainprint.py +0 -0
  404. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/__init__.py +0 -0
  405. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/__init__.pyi +0 -0
  406. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/complexity_base.py +0 -0
  407. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/hurst_exponent.py +0 -0
  408. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/multiscale_entropy_auc.py +0 -0
  409. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/perm_entropy.py +0 -0
  410. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/py.typed +0 -0
  411. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/range_entropy.py +0 -0
  412. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/range_entropy_auc.py +0 -0
  413. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/sample_entropy.py +0 -0
  414. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/tests/test_complexity_base.py +0 -0
  415. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/tests/test_hurst_exponent.py +0 -0
  416. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/tests/test_multiscale_entropy_auc.py +0 -0
  417. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/tests/test_perm_entropy.py +0 -0
  418. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/tests/test_range_entropy.py +0 -0
  419. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/tests/test_range_entropy_auc.py +0 -0
  420. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/tests/test_sample_entropy.py +0 -0
  421. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/tests/test_weighted_perm_entropy.py +0 -0
  422. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/complexity/weighted_perm_entropy.py +0 -0
  423. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/ets_rss.py +0 -0
  424. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/__init__.py +0 -0
  425. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/__init__.pyi +0 -0
  426. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/_afni_falff.py +0 -0
  427. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/_junifer_falff.py +0 -0
  428. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/falff_base.py +0 -0
  429. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/falff_maps.py +0 -0
  430. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/falff_parcels.py +0 -0
  431. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/falff_spheres.py +0 -0
  432. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/py.typed +0 -0
  433. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/tests/test_falff_maps.py +0 -0
  434. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
  435. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
  436. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/__init__.py +0 -0
  437. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/__init__.pyi +0 -0
  438. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
  439. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/edge_functional_connectivity_maps.py +0 -0
  440. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
  441. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
  442. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
  443. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/functional_connectivity_maps.py +0 -0
  444. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
  445. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
  446. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/py.typed +0 -0
  447. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
  448. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_maps.py +0 -0
  449. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
  450. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
  451. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
  452. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_maps.py +0 -0
  453. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
  454. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
  455. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/maps_aggregation.py +0 -0
  456. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/parcel_aggregation.py +0 -0
  457. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/py.typed +0 -0
  458. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/__init__.py +0 -0
  459. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/__init__.pyi +0 -0
  460. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/_afni_reho.py +0 -0
  461. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/_junifer_reho.py +0 -0
  462. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/py.typed +0 -0
  463. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/reho_base.py +0 -0
  464. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/reho_maps.py +0 -0
  465. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/reho_parcels.py +0 -0
  466. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/reho_spheres.py +0 -0
  467. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/tests/test_junifer_reho.py +0 -0
  468. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/tests/test_reho_maps.py +0 -0
  469. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
  470. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
  471. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/sphere_aggregation.py +0 -0
  472. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/__init__.py +0 -0
  473. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/__init__.pyi +0 -0
  474. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/py.typed +0 -0
  475. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
  476. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/temporal_snr_maps.py +0 -0
  477. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
  478. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
  479. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
  480. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/tests/test_temporal_snr_maps.py +0 -0
  481. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
  482. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
  483. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/tests/test_brainprint.py +0 -0
  484. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/tests/test_ets_rss.py +0 -0
  485. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/tests/test_lost_regions.py +0 -0
  486. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/tests/test_maps_aggregation.py +0 -0
  487. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/tests/test_marker_utils.py +0 -0
  488. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/tests/test_markers_base.py +0 -0
  489. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
  490. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
  491. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/markers/utils.py +0 -0
  492. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/onthefly/__init__.py +0 -0
  493. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/onthefly/__init__.pyi +0 -0
  494. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/onthefly/_brainprint.py +0 -0
  495. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/onthefly/py.typed +0 -0
  496. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/onthefly/read_transform.py +0 -0
  497. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/onthefly/tests/test_read_transform.py +0 -0
  498. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/__init__.py +0 -0
  499. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/__init__.pyi +0 -0
  500. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/_data_object_dumper.py +0 -0
  501. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/marker_collection.py +0 -0
  502. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/pipeline_component_registry.py +0 -0
  503. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/pipeline_step_mixin.py +0 -0
  504. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/py.typed +0 -0
  505. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/tests/test_data_object_dumper.py +0 -0
  506. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/tests/test_marker_collection.py +0 -0
  507. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/tests/test_pipeline_component_registry.py +0 -0
  508. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
  509. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
  510. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/tests/test_workdir_manager.py +0 -0
  511. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/update_meta_mixin.py +0 -0
  512. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/utils.py +0 -0
  513. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/pipeline/workdir_manager.py +0 -0
  514. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/__init__.py +0 -0
  515. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/__init__.pyi +0 -0
  516. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/_temporal_filter.py +0 -0
  517. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/_temporal_slicer.py +0 -0
  518. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/base.py +0 -0
  519. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/confounds/__init__.py +0 -0
  520. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/confounds/__init__.pyi +0 -0
  521. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
  522. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/confounds/py.typed +0 -0
  523. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +0 -0
  524. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/py.typed +0 -0
  525. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/smoothing/__init__.py +0 -0
  526. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/smoothing/__init__.pyi +0 -0
  527. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/smoothing/_afni_smoothing.py +0 -0
  528. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/smoothing/_fsl_smoothing.py +0 -0
  529. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/smoothing/_nilearn_smoothing.py +0 -0
  530. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/smoothing/py.typed +0 -0
  531. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/smoothing/smoothing.py +0 -0
  532. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/smoothing/tests/test_smoothing.py +0 -0
  533. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/tests/test_preprocess_base.py +0 -0
  534. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/tests/test_temporal_filter.py +0 -0
  535. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/tests/test_temporal_slicer.py +0 -0
  536. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/warping/__init__.py +0 -0
  537. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/warping/__init__.pyi +0 -0
  538. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/warping/_ants_warper.py +0 -0
  539. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/warping/_fsl_warper.py +0 -0
  540. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/warping/py.typed +0 -0
  541. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/warping/space_warper.py +0 -0
  542. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/preprocess/warping/tests/test_space_warper.py +0 -0
  543. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/py.typed +0 -0
  544. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/stats.py +0 -0
  545. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/__init__.py +0 -0
  546. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/__init__.pyi +0 -0
  547. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/base.py +0 -0
  548. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/pandas_base.py +0 -0
  549. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/py.typed +0 -0
  550. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/sqlite.py +0 -0
  551. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/tests/test_pandas_base.py +0 -0
  552. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/tests/test_sqlite.py +0 -0
  553. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/tests/test_storage_base.py +0 -0
  554. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/tests/test_utils.py +0 -0
  555. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/storage/utils.py +0 -0
  556. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/__init__.py +0 -0
  557. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/__init__.pyi +0 -0
  558. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
  559. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/datagrabbers.py +0 -0
  560. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/py.typed +0 -0
  561. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/registry.py +0 -0
  562. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/tests/test_adhdtesting_datagrabber.py +0 -0
  563. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
  564. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
  565. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
  566. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/tests/test_testing_registry.py +0 -0
  567. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/tests/test_testing_utils.py +0 -0
  568. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/tests/test_uclacnpvbmtesting_datagrabber.py +0 -0
  569. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/testing/utils.py +0 -0
  570. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/tests/test_main.py +0 -0
  571. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/tests/test_stats.py +0 -0
  572. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/typing/__init__.py +0 -0
  573. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/typing/__init__.pyi +0 -0
  574. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/typing/_typing.py +0 -0
  575. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/typing/py.typed +0 -0
  576. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/__init__.py +0 -0
  577. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/__init__.pyi +0 -0
  578. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/_config.py +0 -0
  579. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/_yaml.py +0 -0
  580. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/fs.py +0 -0
  581. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/helpers.py +0 -0
  582. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/logging.py +0 -0
  583. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/py.typed +0 -0
  584. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/singleton.py +0 -0
  585. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/tests/test_config.py +0 -0
  586. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/tests/test_fs.py +0 -0
  587. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/tests/test_helpers.py +0 -0
  588. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer/utils/tests/test_logging.py +0 -0
  589. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer.egg-info/dependency_links.txt +0 -0
  590. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer.egg-info/entry_points.txt +0 -0
  591. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/junifer.egg-info/top_level.txt +0 -0
  592. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/justfile +0 -0
  593. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/scripts/start.sh +0 -0
  594. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/setup.cfg +0 -0
  595. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/setup.py +0 -0
  596. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/tools/create_aomic1000_example_dataset.py +0 -0
  597. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/tools/create_aomicpiop1_example_dataset.py +0 -0
  598. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/tools/create_aomicpiop2_example_dataset.py +0 -0
  599. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/tools/create_bids_example_dataset.py +0 -0
  600. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/tools/create_bids_example_dataset_sessions.py +0 -0
  601. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/tools/create_dmcc13_benchmark_example_dataset.py +0 -0
  602. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/tools/create_hcp1200_example_dataset.py +0 -0
  603. {junifer-0.0.8.dev303 → junifer-0.0.8.dev306}/tox.ini +0 -0
@@ -1,6 +1,3 @@
1
- [submodule "junifer/external/h5io"]
2
- path = junifer/external/h5io
3
- url = https://github.com/juaml/h5io
4
1
  [submodule "junifer/external/BrainPrint"]
5
2
  path = junifer/external/BrainPrint
6
3
  url = https://github.com/juaml/BrainPrint.git
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: junifer
3
- Version: 0.0.8.dev303
3
+ Version: 0.0.8.dev306
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>
@@ -37,6 +37,7 @@ Requires-Dist: nilearn<0.15,>=0.14.0
37
37
  Requires-Dist: sqlalchemy<2.2.0,>=2.0.25
38
38
  Requires-Dist: ruamel.yaml<0.20,>=0.17
39
39
  Requires-Dist: h5py>=3.10
40
+ Requires-Dist: h5io<0.3,>=0.2.5
40
41
  Requires-Dist: tqdm<4.71.0,>=4.66.1
41
42
  Requires-Dist: templateflow<26.0.0,>=23.0.0
42
43
  Requires-Dist: lapy<2.0.0,>=1.0.0
@@ -0,0 +1 @@
1
+ Fix the data collected by :class:`.HDF5FeatureStorage` being stored as ``float32`` when ``force_float32=False`` and the ``h5py`` deprecation warning when collecting by `Fede Raimondo`_
@@ -0,0 +1 @@
1
+ Use original ``h5io`` instead of junifer's fork, keeping support for reading the features collected with the fork 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.dev303'
22
- __version_tuple__ = version_tuple = (0, 0, 8, 'dev303')
21
+ __version__ = version = '0.0.8.dev306'
22
+ __version_tuple__ = version_tuple = (0, 0, 8, 'dev306')
23
23
 
24
- __commit_id__ = commit_id = 'g4a74bdf26'
24
+ __commit_id__ = commit_id = 'g442e9f6f1'
@@ -47,6 +47,7 @@ def test_get_dependency_information_short() -> None:
47
47
  "templateflow",
48
48
  "lapy",
49
49
  "h5py",
50
+ "h5io",
50
51
  "lazy_loader",
51
52
  "looseversion",
52
53
  "junifer_data",
@@ -82,6 +83,7 @@ def test_get_dependency_information_long() -> None:
82
83
  "templateflow",
83
84
  "lapy",
84
85
  "h5py",
86
+ "h5io",
85
87
  "lazy_loader",
86
88
  "looseversion",
87
89
  "junifer_data",
@@ -15,7 +15,6 @@ from junifer.utils.singleton import Singleton
15
15
  # Vendored packages, whose tests are not collected. Paths are relative to
16
16
  # this file, so it also works when testing the installed package.
17
17
  _VENDORED = [
18
- Path(__file__).parent / "external" / "h5io",
19
18
  Path(__file__).parent / "external" / "BrainPrint",
20
19
  ]
21
20
 
@@ -4,24 +4,20 @@
4
4
  # Federico Raimondo <f.raimondo@fz-juelich.de>
5
5
  # License: AGPL
6
6
 
7
+ import io
7
8
  from collections import defaultdict
8
9
  from collections.abc import Sequence
9
10
  from pathlib import Path
10
11
  from typing import Any, ClassVar, Literal
11
12
 
13
+ import h5py
12
14
  import numpy as np
13
15
  import pandas as pd
16
+ from h5io import read_hdf5, write_hdf5
14
17
  from pydantic import PositiveInt
15
18
  from tqdm import tqdm
16
19
 
17
20
  from ..api.decorators import register_storage
18
- from ..external.h5io.h5io import (
19
- ChunkedArray,
20
- ChunkedList,
21
- has_hdf5,
22
- read_hdf5,
23
- write_hdf5,
24
- )
25
21
  from ..utils import raise_error
26
22
  from .base import BaseFeatureStorage, MatrixKind, StorageType, logger
27
23
  from .utils import (
@@ -36,21 +32,106 @@ from .utils import (
36
32
  __all__ = ["HDF5FeatureStorage"]
37
33
 
38
34
 
39
- def _create_chunk(
35
+ # Types of the data of collected features in files written with junifer's
36
+ # fork of h5io, and the h5io types they are stored as
37
+ _LEGACY_TYPES = {"chunkedarray": "ndarray", "chunkedlist": "list"}
38
+
39
+
40
+ def _node_type(node: h5py.Group | h5py.Dataset) -> str:
41
+ """Get the h5io type of a node.
42
+
43
+ Parameters
44
+ ----------
45
+ node : h5py.Group or h5py.Dataset
46
+ The node.
47
+
48
+ Returns
49
+ -------
50
+ str
51
+ The type.
52
+
53
+ """
54
+ title = node.attrs["TITLE"]
55
+ return title.decode() if isinstance(title, bytes) else title
56
+
57
+
58
+ def _has_hdf5(fname: str, title: str) -> bool:
59
+ """Check whether a title is in an HDF5 file.
60
+
61
+ Parameters
62
+ ----------
63
+ fname : str
64
+ The HDF5 file.
65
+ title : str
66
+ The title.
67
+
68
+ Returns
69
+ -------
70
+ bool
71
+ Whether the title is in the file.
72
+
73
+ """
74
+ with h5py.File(fname, mode="r") as fid:
75
+ return title in fid
76
+
77
+
78
+ def _read_hdf5(fname: str, title: str) -> Any:
79
+ """Read a title of an HDF5 file.
80
+
81
+ Features collected with junifer's fork of h5io have their data stored with
82
+ types that h5io does not know (see ``_LEGACY_TYPES``). To read them, the
83
+ feature is copied in memory with the h5io types.
84
+
85
+ Parameters
86
+ ----------
87
+ fname : str
88
+ The HDF5 file.
89
+ title : str
90
+ The title.
91
+
92
+ Returns
93
+ -------
94
+ Any
95
+ The data.
96
+
97
+ """
98
+ with h5py.File(fname, mode="r") as fid:
99
+ node = fid.get(title)
100
+ data = node.get("key_data") if isinstance(node, h5py.Group) else None
101
+ if data is not None and _node_type(data) in _LEGACY_TYPES:
102
+ with h5py.File(io.BytesIO(), mode="w") as copy:
103
+ fid.copy(node, copy, name=title)
104
+ copy_data = copy[title]["key_data"]
105
+ copy_data.attrs["TITLE"] = _LEGACY_TYPES[_node_type(data)]
106
+ return read_hdf5(copy, title=title, slash="ignore")
107
+ return read_hdf5(fname, title=title, slash="ignore")
108
+
109
+
110
+ def _write_chunk(
111
+ fname: str,
112
+ key: str,
40
113
  chunk_data: list[np.ndarray],
41
114
  kind: StorageType,
42
115
  element_count: int,
43
116
  chunk_size: int,
44
117
  i_chunk: int,
45
- ) -> ChunkedArray | ChunkedList:
46
- """Create chunked array or list.
118
+ ) -> None:
119
+ """Write a chunk of the data of the elements.
120
+
121
+ The data is written in a dataset (``ndarray`` in h5io) for vectors and
122
+ matrices, with the elements in the last dimension, or in a group of
123
+ datasets (``list`` in h5io) for the other kinds.
47
124
 
48
125
  Parameters
49
126
  ----------
127
+ fname : str
128
+ The HDF5 file.
129
+ key : str
130
+ The name of the dataset or group to write to.
50
131
  chunk_data : list of numpy.ndarray
51
- The data to be chunked.
132
+ The data of the elements in the chunk.
52
133
  kind : :enum:`.StorageType`
53
- The kind of data to be chunked.
134
+ The kind of data.
54
135
  element_count : int
55
136
  The total number of elements.
56
137
  chunk_size : int
@@ -58,37 +139,29 @@ def _create_chunk(
58
139
  i_chunk : int
59
140
  The chunk index.
60
141
 
61
- Returns
62
- -------
63
- ChunkedArray or ChunkedList
64
- The chunked array or list.
65
-
66
142
  """
67
- if kind in ["vector", "matrix"]:
68
- features_data = np.concatenate(chunk_data, axis=-1)
69
- array_shape = [features_data.shape[0]]
70
- array_chunk_size = [features_data.shape[0]]
71
- # Append second dimension for 3D
72
- if features_data.ndim == 3:
73
- array_shape.append(features_data.shape[1])
74
- array_chunk_size.append(features_data.shape[1])
75
- # Append final dimension of element count
76
- array_shape.append(element_count)
77
- # Append final dimension of chunk size
78
- array_chunk_size.append(chunk_size)
79
- out = ChunkedArray(
80
- data=features_data,
81
- shape=tuple(array_shape),
82
- chunk_size=tuple(array_chunk_size),
83
- n_chunk=i_chunk,
84
- )
85
- elif kind in ["timeseries", "scalar_table", "timeseries_2d"]:
86
- out = ChunkedList(
87
- data=chunk_data,
88
- size=element_count,
89
- offset=i_chunk * chunk_size,
90
- )
91
- return out
143
+ offset = i_chunk * chunk_size
144
+ with h5py.File(fname, mode="a") as fid:
145
+ if kind in ["vector", "matrix"]:
146
+ features_data = np.concatenate(chunk_data, axis=-1)
147
+ if key not in fid:
148
+ dataset = fid.create_dataset(
149
+ key,
150
+ shape=(*features_data.shape[:-1], element_count),
151
+ dtype=features_data.dtype,
152
+ chunks=(*features_data.shape[:-1], chunk_size),
153
+ )
154
+ dataset.attrs["TITLE"] = "ndarray"
155
+ n_elements = features_data.shape[-1]
156
+ fid[key][..., offset : offset + n_elements] = features_data
157
+ elif kind in ["timeseries", "scalar_table", "timeseries_2d"]:
158
+ group = fid.require_group(key)
159
+ group.attrs["TITLE"] = "list"
160
+ for i, element_data in enumerate(chunk_data):
161
+ dataset = group.create_dataset(
162
+ f"idx_{offset + i}", data=element_data
163
+ )
164
+ dataset.attrs["TITLE"] = "ndarray"
92
165
 
93
166
 
94
167
  @register_storage
@@ -207,7 +280,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
207
280
  )
208
281
 
209
282
  # Check if group is found in the storage
210
- if not has_hdf5(fname=uri, title="meta"):
283
+ if not _has_hdf5(fname=uri, title="meta"):
211
284
  raise_error(
212
285
  f"Invalid junifer HDF5 file at: {uri}",
213
286
  klass=RuntimeError,
@@ -215,11 +288,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
215
288
 
216
289
  # Read metadata
217
290
  logger.debug(f"Loading HDF5 metadata from: {uri}")
218
- metadata = read_hdf5(
219
- fname=uri,
220
- title="meta",
221
- slash="ignore",
222
- )
291
+ metadata = _read_hdf5(fname=uri, title="meta")
223
292
  logger.debug(f"Loaded HDF5 metadata from: {uri}")
224
293
 
225
294
  return metadata
@@ -236,11 +305,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
236
305
 
237
306
  """
238
307
  # Read metadata
239
- metadata = read_hdf5(
240
- fname=str(self.uri.resolve()),
241
- title="meta",
242
- slash="ignore",
243
- )
308
+ metadata = _read_hdf5(fname=str(self.uri.resolve()), title="meta")
244
309
  return metadata
245
310
 
246
311
  def _read_data(
@@ -280,7 +345,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
280
345
  )
281
346
 
282
347
  # Check if group is found in the storage
283
- if not has_hdf5(fname=uri, title=md5):
348
+ if not _has_hdf5(fname=uri, title=md5):
284
349
  raise_error(
285
350
  f"{md5} not found in HDF5 file at: {uri}",
286
351
  klass=RuntimeError,
@@ -288,11 +353,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
288
353
 
289
354
  # Read data
290
355
  logger.debug(f"Loading HDF5 data for {md5} from: {uri}")
291
- data = read_hdf5(
292
- fname=uri,
293
- title=md5,
294
- slash="ignore",
295
- )
356
+ data = _read_hdf5(fname=uri, title=md5)
296
357
  logger.debug(f"Loaded HDF5 data for {md5} from: {uri}")
297
358
 
298
359
  return data
@@ -345,11 +406,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
345
406
  )
346
407
  )
347
408
  # Parameter check pass; read metadata
348
- metadata = read_hdf5(
349
- fname=str(self.uri.resolve()),
350
- title="meta",
351
- slash="ignore",
352
- )
409
+ metadata = _read_hdf5(fname=str(self.uri.resolve()), title="meta")
353
410
  # Initialize MD5 variable
354
411
  md5: str = ""
355
412
 
@@ -397,11 +454,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
397
454
  md5 = feature_name_duplicates_with_different_md5[0]
398
455
 
399
456
  # Read data from HDF5
400
- hdf_data = read_hdf5(
401
- fname=str(self.uri.resolve()),
402
- title=md5,
403
- slash="ignore",
404
- )
457
+ hdf_data = _read_hdf5(fname=str(self.uri.resolve()), title=md5)
405
458
  return hdf_data
406
459
 
407
460
  def read_df(
@@ -677,7 +730,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
677
730
 
678
731
  # Check if MD5 exists, then read data else create empty dictionary
679
732
  # File should be present here already
680
- if has_hdf5(fname=uri, title=meta_md5):
733
+ if _has_hdf5(fname=uri, title=meta_md5):
681
734
  stored_data = self._read_data(md5=meta_md5, element=element[0])
682
735
  else:
683
736
  logger.debug(f"Creating new data map for {meta_md5} ...")
@@ -1078,6 +1131,13 @@ class HDF5FeatureStorage(BaseFeatureStorage):
1078
1131
  elements = []
1079
1132
  static_data = None
1080
1133
  kind = None
1134
+ # The data is written in chunks to a temporary key (h5io would
1135
+ # delete the previous chunks), and moved to the feature at the end
1136
+ fname = str(self.uri.resolve())
1137
+ data_key = f"collecting_{feature_md5}"
1138
+ with h5py.File(fname, mode="a") as fid:
1139
+ if data_key in fid:
1140
+ del fid[data_key]
1081
1141
  for file_ in tqdm(element_files, desc="file-data"):
1082
1142
  logger.debug(
1083
1143
  f"Reading feature MD5: '{feature_md5}' "
@@ -1085,11 +1145,7 @@ class HDF5FeatureStorage(BaseFeatureStorage):
1085
1145
  )
1086
1146
 
1087
1147
  # Read the data
1088
- t_data = read_hdf5(
1089
- fname=str(file_),
1090
- title=feature_md5,
1091
- slash="ignore",
1092
- )
1148
+ t_data = _read_hdf5(fname=str(file_), title=feature_md5)
1093
1149
  if i_file == 0:
1094
1150
  # Store the "static" data
1095
1151
  static_data = {
@@ -1109,35 +1165,32 @@ class HDF5FeatureStorage(BaseFeatureStorage):
1109
1165
  i_file += 1
1110
1166
  if (i_file % t_chunk_size == 0) or i_file == element_count:
1111
1167
  # If we have reached the chunk size or the end of the
1112
- # elements, write the data
1113
-
1114
- # Store one chunk of data
1115
- to_write = static_data.copy()
1116
- to_write["element"] = []
1117
- # Write data in chunks to avoid memory usage spikes
1118
- # Start with the case for 2D
1119
- # Write chunked array
1120
- to_write["data"] = _create_chunk(
1168
+ # elements, write the data in chunks to avoid memory
1169
+ # usage spikes
1170
+ _write_chunk(
1171
+ fname=fname,
1172
+ key=data_key,
1121
1173
  chunk_data=chunk_data,
1122
1174
  kind=kind,
1123
1175
  element_count=element_count,
1124
1176
  chunk_size=t_chunk_size,
1125
1177
  i_chunk=i_chunk,
1126
1178
  )
1127
- if i_file == element_count:
1128
- to_write["element"] = elements
1129
-
1130
- # Write to HDF5
1131
- write_hdf5(
1132
- fname=str(self.uri.resolve()),
1133
- data=to_write,
1134
- overwrite="update",
1135
- compression=0,
1136
- title=feature_md5,
1137
- slash="error",
1138
- use_json=False,
1139
- )
1140
1179
 
1141
1180
  # Increment counters and data
1142
1181
  i_chunk += 1
1143
1182
  chunk_data = []
1183
+
1184
+ # Write the feature without the data
1185
+ write_hdf5(
1186
+ fname=fname,
1187
+ data={**static_data, "element": elements},
1188
+ overwrite="update",
1189
+ compression=0,
1190
+ title=feature_md5,
1191
+ slash="error",
1192
+ use_json=False,
1193
+ )
1194
+ # Move the data to the feature (as written by h5io)
1195
+ with h5py.File(fname, mode="a") as fid:
1196
+ fid.move(data_key, f"{feature_md5}/key_data")
@@ -10,6 +10,7 @@ from pathlib import Path
10
10
  import h5py
11
11
  import numpy as np
12
12
  import pytest
13
+ from h5io import read_hdf5
13
14
  from numpy.testing import assert_array_equal
14
15
  from pandas.testing import assert_frame_equal
15
16
 
@@ -1166,3 +1167,149 @@ def test_collect_error_single_output() -> None:
1166
1167
  ):
1167
1168
  storage = HDF5FeatureStorage(uri="/tmp", single_output=True)
1168
1169
  storage.collect()
1170
+
1171
+
1172
+ def test_read_collected_with_h5io_fork() -> None:
1173
+ """Test reading features collected with junifer's fork of h5io.
1174
+
1175
+ The file was collected from three elements (``sub-01`` to ``sub-03``),
1176
+ each with a vector, a matrix and a timeseries computed from the element
1177
+ index ``i``.
1178
+
1179
+ """
1180
+ uri = Path(__file__).parent / "data" / "collected_h5io_fork.hdf5"
1181
+ storage = HDF5FeatureStorage(uri=uri)
1182
+ md5s = {meta["name"]: md5 for md5, meta in storage.list_features().items()}
1183
+ elements = [{"subject": f"sub-0{i}"} for i in range(1, 4)]
1184
+ # The vector data is stored as a "chunkedarray"
1185
+ vector = storage.read(feature_md5=md5s["BOLD_vec"])
1186
+ assert vector["element"] == elements
1187
+ assert vector["data"].dtype == np.float32
1188
+ for i in range(3):
1189
+ assert_array_equal(
1190
+ vector["data"][:, i], np.float32(np.array([0.1, 0.2]) + i)
1191
+ )
1192
+ # The matrix data is stored as a "chunkedarray"
1193
+ matrix = storage.read(feature_md5=md5s["BOLD_mat"])
1194
+ assert matrix["element"] == elements
1195
+ for i in range(3):
1196
+ assert_array_equal(
1197
+ matrix["data"][..., i], np.array([[1.0, 0.5], [0.5, 1.0]]) + i
1198
+ )
1199
+ # The timeseries data is stored as a "chunkedlist"
1200
+ timeseries = storage.read(feature_md5=md5s["BOLD_ts"])
1201
+ assert timeseries["element"] == elements
1202
+ assert len(timeseries["data"]) == 3
1203
+ for i in range(3):
1204
+ assert_array_equal(
1205
+ timeseries["data"][i], np.arange(6.0).reshape(3, 2) + i
1206
+ )
1207
+ assert storage.read_df(feature_md5=md5s["BOLD_ts"]).shape == (9, 2)
1208
+
1209
+
1210
+ def _store_and_collect(uri: Path, force_float32: bool) -> HDF5FeatureStorage:
1211
+ """Store a vector and a timeseries for three elements and collect them.
1212
+
1213
+ Parameters
1214
+ ----------
1215
+ uri : pathlib.Path
1216
+ The path to the collected file.
1217
+ force_float32 : bool
1218
+ Whether to store the data as float32.
1219
+
1220
+ Returns
1221
+ -------
1222
+ HDF5FeatureStorage
1223
+ The storage of the collected file.
1224
+
1225
+ """
1226
+ storage = HDF5FeatureStorage(
1227
+ uri=uri,
1228
+ single_output=False,
1229
+ force_float32=force_float32,
1230
+ chunk_size=2,
1231
+ )
1232
+ for i in range(3):
1233
+ meta = {
1234
+ "element": {"subject": f"sub-0{i}"},
1235
+ "dependencies": [],
1236
+ "type": "BOLD",
1237
+ }
1238
+ storage.store(
1239
+ kind="vector",
1240
+ meta={**meta, "marker": {"name": "vec"}},
1241
+ data=np.array([[0.1, 0.2]]) + i,
1242
+ col_names=["a", "b"],
1243
+ )
1244
+ storage.store(
1245
+ kind="timeseries",
1246
+ meta={**meta, "marker": {"name": "ts"}},
1247
+ data=np.arange(6.0).reshape(3, 2) + i,
1248
+ col_names=["a", "b"],
1249
+ )
1250
+ storage.collect()
1251
+ return HDF5FeatureStorage(uri=uri)
1252
+
1253
+
1254
+ @pytest.mark.parametrize(
1255
+ "force_float32, dtype", [(True, np.float32), (False, np.float64)]
1256
+ )
1257
+ def test_collect_dtype(
1258
+ tmp_path: Path, force_float32: bool, dtype: np.dtype
1259
+ ) -> None:
1260
+ """Test collected data keeps its dtype.
1261
+
1262
+ Parameters
1263
+ ----------
1264
+ tmp_path : pathlib.Path
1265
+ The path to the test directory.
1266
+ force_float32 : bool
1267
+ The parametrized casting of the data to float32.
1268
+ dtype : numpy.dtype
1269
+ The parametrized dtype of the collected data.
1270
+
1271
+ """
1272
+ storage = _store_and_collect(tmp_path / "out.hdf5", force_float32)
1273
+ md5s = {meta["name"]: md5 for md5, meta in storage.list_features().items()}
1274
+ vector = storage.read(feature_md5=md5s["BOLD_vec"])
1275
+ timeseries = storage.read(feature_md5=md5s["BOLD_ts"])
1276
+ assert vector["data"].dtype == dtype
1277
+ assert all(x.dtype == dtype for x in timeseries["data"])
1278
+ # The elements are collected in any order
1279
+ for i_element, element in enumerate(vector["element"]):
1280
+ i = int(element["subject"][-1])
1281
+ expected = np.array([0.1, 0.2]) + i
1282
+ assert_array_equal(
1283
+ vector["data"][:, i_element], expected.astype(dtype)
1284
+ )
1285
+
1286
+
1287
+ def test_collect_h5io_types(tmp_path: Path) -> None:
1288
+ """Test collected data is stored with h5io types and can be re-collected.
1289
+
1290
+ Parameters
1291
+ ----------
1292
+ tmp_path : pathlib.Path
1293
+ The path to the test directory.
1294
+
1295
+ """
1296
+ uri = tmp_path / "out.hdf5"
1297
+ storage = _store_and_collect(uri, force_float32=False)
1298
+ collected = {
1299
+ md5: read_hdf5(uri, title=md5) for md5 in storage.list_features()
1300
+ }
1301
+ # The data is only in the features
1302
+ with h5py.File(uri, mode="r") as fid:
1303
+ assert set(fid.keys()) == {"meta", *collected.keys()}
1304
+ # Collect again
1305
+ _store_and_collect(uri, force_float32=False)
1306
+ for md5, feature in collected.items():
1307
+ recollected = read_hdf5(uri, title=md5)
1308
+ assert recollected["element"] == feature["element"]
1309
+ if isinstance(feature["data"], list):
1310
+ for new, old in zip(
1311
+ recollected["data"], feature["data"], strict=True
1312
+ ):
1313
+ assert_array_equal(new, old)
1314
+ else:
1315
+ assert_array_equal(recollected["data"], feature["data"])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: junifer
3
- Version: 0.0.8.dev303
3
+ Version: 0.0.8.dev306
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>
@@ -37,6 +37,7 @@ Requires-Dist: nilearn<0.15,>=0.14.0
37
37
  Requires-Dist: sqlalchemy<2.2.0,>=2.0.25
38
38
  Requires-Dist: ruamel.yaml<0.20,>=0.17
39
39
  Requires-Dist: h5py>=3.10
40
+ Requires-Dist: h5io<0.3,>=0.2.5
40
41
  Requires-Dist: tqdm<4.71.0,>=4.66.1
41
42
  Requires-Dist: templateflow<26.0.0,>=23.0.0
42
43
  Requires-Dist: lapy<2.0.0,>=1.0.0
@@ -76,6 +76,8 @@ docs/changes/newsfragments/492.bugfix
76
76
  docs/changes/newsfragments/499.enh
77
77
  docs/changes/newsfragments/502.bugfix
78
78
  docs/changes/newsfragments/503.enh
79
+ docs/changes/newsfragments/504.bugfix
80
+ docs/changes/newsfragments/504.misc
79
81
  docs/changes/newsfragments/509.enh
80
82
  docs/changes/newsfragments/510.bugfix
81
83
  docs/changes/newsfragments/511.bugfix
@@ -369,29 +371,6 @@ junifer/external/BrainPrint/doc/_templates/autosummary/class.rst
369
371
  junifer/external/BrainPrint/doc/_templates/autosummary/function.rst
370
372
  junifer/external/BrainPrint/doc/_templates/autosummary/module.rst
371
373
  junifer/external/BrainPrint/doc/api/index.rst
372
- junifer/external/h5io/.coveragerc
373
- junifer/external/h5io/.gitattributes
374
- junifer/external/h5io/.gitignore
375
- junifer/external/h5io/.travis.yml
376
- junifer/external/h5io/LICENSE.txt
377
- junifer/external/h5io/MANIFEST.in
378
- junifer/external/h5io/Makefile
379
- junifer/external/h5io/README.rst
380
- junifer/external/h5io/azure-pipelines.yml
381
- junifer/external/h5io/setup.cfg
382
- junifer/external/h5io/setup.py
383
- junifer/external/h5io/versioneer.py
384
- junifer/external/h5io/.vscode/launch.json
385
- junifer/external/h5io/.vscode/settings.json
386
- junifer/external/h5io/h5io/__init__.py
387
- junifer/external/h5io/h5io/_h5io.py
388
- junifer/external/h5io/h5io/_version.py
389
- junifer/external/h5io/h5io/chunked_array.py
390
- junifer/external/h5io/h5io/chunked_list.py
391
- junifer/external/h5io/h5io/tests/__init__.py
392
- junifer/external/h5io/h5io/tests/test_chunked_array.py
393
- junifer/external/h5io/h5io/tests/test_chunked_list.py
394
- junifer/external/h5io/h5io/tests/test_io.py
395
374
  junifer/external/nilearn/__init__.py
396
375
  junifer/external/nilearn/__init__.pyi
397
376
  junifer/external/nilearn/junifer_connectivity_measure.py
@@ -555,6 +534,7 @@ junifer/storage/tests/test_pandas_base.py
555
534
  junifer/storage/tests/test_sqlite.py
556
535
  junifer/storage/tests/test_storage_base.py
557
536
  junifer/storage/tests/test_utils.py
537
+ junifer/storage/tests/data/collected_h5io_fork.hdf5
558
538
  junifer/testing/__init__.py
559
539
  junifer/testing/__init__.pyi
560
540
  junifer/testing/datagrabbers.py
@@ -8,6 +8,7 @@ nilearn<0.15,>=0.14.0
8
8
  sqlalchemy<2.2.0,>=2.0.25
9
9
  ruamel.yaml<0.20,>=0.17
10
10
  h5py>=3.10
11
+ h5io<0.3,>=0.2.5
11
12
  tqdm<4.71.0,>=4.66.1
12
13
  templateflow<26.0.0,>=23.0.0
13
14
  lapy<2.0.0,>=1.0.0