junifer 0.0.4.dev108__tar.gz → 0.0.4.dev133__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 (321) hide show
  1. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/PKG-INFO +1 -1
  2. junifer-0.0.4.dev133/docs/changes/newsfragments/264.feature +1 -0
  3. junifer-0.0.4.dev133/docs/changes/newsfragments/265.feature +1 -0
  4. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/_version.py +2 -2
  5. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/__init__.py +2 -0
  6. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/coordinates.py +72 -7
  7. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/parcellations.py +84 -12
  8. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/tests/test_coordinates.py +22 -1
  9. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/tests/test_parcellations.py +90 -1
  10. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/parcel_aggregation.py +39 -34
  11. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/sphere_aggregation.py +33 -5
  12. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer.egg-info/PKG-INFO +1 -1
  13. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer.egg-info/SOURCES.txt +2 -0
  14. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  15. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  16. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
  17. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
  18. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  19. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
  20. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/.github/pull_request_template.md +0 -0
  21. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/.github/workflows/ci-docs.yml +0 -0
  22. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/.github/workflows/ci.yml +0 -0
  23. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/.github/workflows/docs-preview.yml +0 -0
  24. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/.github/workflows/docs.yml +0 -0
  25. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/.github/workflows/lint.yml +0 -0
  26. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/.github/workflows/pypi.yml +0 -0
  27. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/.gitignore +0 -0
  28. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/.gitmodules +0 -0
  29. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/.pre-commit-config.yaml +0 -0
  30. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/AUTHORS.rst +0 -0
  31. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/LICENSE.md +0 -0
  32. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/README.md +0 -0
  33. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/codecov.yml +0 -0
  34. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/conda-env.yml +0 -0
  35. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/Makefile +0 -0
  36. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/_static/css/custom.css +0 -0
  37. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/_static/js/custom.js +0 -0
  38. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/_templates/versions.html +0 -0
  39. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/api/api.rst +0 -0
  40. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/api/configs.rst +0 -0
  41. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/api/data.rst +0 -0
  42. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/api/datagrabbers.rst +0 -0
  43. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/api/datareaders.rst +0 -0
  44. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/api/index.rst +0 -0
  45. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/api/markers.rst +0 -0
  46. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/api/nilearn.rst +0 -0
  47. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/api/onthefly.rst +0 -0
  48. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/api/pipeline.rst +0 -0
  49. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/api/preprocessing.rst +0 -0
  50. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/api/stats.rst +0 -0
  51. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/api/storage.rst +0 -0
  52. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/api/testing.rst +0 -0
  53. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/api/utils.rst +0 -0
  54. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/builtin.rst +0 -0
  55. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/changes/contributors.inc +0 -0
  56. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/changes/newsfragments/.gitignore +0 -0
  57. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/changes/newsfragments/182.enh +0 -0
  58. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/changes/newsfragments/233.bugfix +0 -0
  59. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/changes/newsfragments/245.change +0 -0
  60. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/changes/newsfragments/245.feature +0 -0
  61. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/changes/newsfragments/247.doc +0 -0
  62. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/changes/newsfragments/248.change +0 -0
  63. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/changes/newsfragments/251.doc +0 -0
  64. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/changes/newsfragments/253.misc +0 -0
  65. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/changes/newsfragments/254.feature +0 -0
  66. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/changes/newsfragments/258.enh +0 -0
  67. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/changes/newsfragments/259.enh +0 -0
  68. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/changes/newsfragments/260.enh +0 -0
  69. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/changes/newsfragments/261.misc +0 -0
  70. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/changes/newsfragments/262.misc +0 -0
  71. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/conf.py +0 -0
  72. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/contribution.rst +0 -0
  73. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/extending/coordinates.rst +0 -0
  74. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/extending/datagrabber.rst +0 -0
  75. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/extending/extension.rst +0 -0
  76. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/extending/index.rst +0 -0
  77. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/extending/marker.rst +0 -0
  78. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/extending/masks.rst +0 -0
  79. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/extending/parcellations.rst +0 -0
  80. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/faq.rst +0 -0
  81. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/help.rst +0 -0
  82. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/images/junifer_logo.png +0 -0
  83. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/index.rst +0 -0
  84. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/installation.rst +0 -0
  85. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/links.inc +0 -0
  86. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/maintaining.rst +0 -0
  87. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/redirect.html +0 -0
  88. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/sphinxext/gh_substitutions.py +0 -0
  89. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/starting.rst +0 -0
  90. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/understanding/data.rst +0 -0
  91. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/understanding/datagrabber.rst +0 -0
  92. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/understanding/datareader.rst +0 -0
  93. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/understanding/index.rst +0 -0
  94. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/understanding/marker.rst +0 -0
  95. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/understanding/pipeline.rst +0 -0
  96. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/understanding/preprocess.rst +0 -0
  97. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/understanding/storage.rst +0 -0
  98. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/using/codeless.rst +0 -0
  99. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/using/index.rst +0 -0
  100. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/using/masks.rst +0 -0
  101. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/using/queueing.rst +0 -0
  102. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/using/running.rst +0 -0
  103. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/docs/whats_new.rst +0 -0
  104. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/examples/README.rst +0 -0
  105. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/examples/norun_hcpfc_pearson.py +0 -0
  106. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/examples/norun_ukbvm_gmd.py +0 -0
  107. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/examples/run_compute_parcel_mean.py +0 -0
  108. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/examples/run_datagrabber_bids_datalad.py +0 -0
  109. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/examples/run_ets_rss_marker.py +0 -0
  110. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/examples/run_junifer_julearn.py +0 -0
  111. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/examples/run_run_gmd_mean.py +0 -0
  112. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/examples/yamls/gmd_mean.yaml +0 -0
  113. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
  114. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/examples/yamls/ukb_gmd_mean.yaml +0 -0
  115. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/ignore_words.txt +0 -0
  116. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/__init__.py +0 -0
  117. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/__init__.py +0 -0
  118. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/cli.py +0 -0
  119. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/decorators.py +0 -0
  120. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/functions.py +0 -0
  121. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/parser.py +0 -0
  122. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
  123. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/res/afni/3dRSFC +0 -0
  124. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/res/afni/3dReHo +0 -0
  125. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/res/afni/afni +0 -0
  126. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/res/afni/run_afni_docker.sh +0 -0
  127. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/res/fsl/applywarp +0 -0
  128. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/res/fsl/flirt +0 -0
  129. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/res/fsl/run_fsl_docker.sh +0 -0
  130. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/res/fsl/std2imgcoord +0 -0
  131. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/res/run_conda.sh +0 -0
  132. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/tests/data/gmd_mean.yaml +0 -0
  133. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/tests/data/gmd_mean_htcondor.yaml +0 -0
  134. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/tests/test_api_utils.py +0 -0
  135. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/tests/test_cli.py +0 -0
  136. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/tests/test_functions.py +0 -0
  137. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/tests/test_parser.py +0 -0
  138. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/api/utils.py +0 -0
  139. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/configs/__init__.py +0 -0
  140. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/configs/juseless/__init__.py +0 -0
  141. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
  142. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
  143. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
  144. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
  145. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
  146. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
  147. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
  148. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
  149. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
  150. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
  151. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
  152. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/CogAC_VOIs.txt +0 -0
  153. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/CogAR_VOIs.txt +0 -0
  154. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/DMNBuckner_VOIs.txt +0 -0
  155. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/Dosenbach2010_MNI_VOIs.txt +0 -0
  156. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/Empathy_VOIs.txt +0 -0
  157. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/Motor_VOIs.txt +0 -0
  158. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/MultiTask_VOIs.txt +0 -0
  159. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/PhysioStress_VOIs.txt +0 -0
  160. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/Power2011_MNI_VOIs.txt +0 -0
  161. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/Power2013_MNI_VOIs.tsv +0 -0
  162. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/Rew_VOIs.txt +0 -0
  163. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/Somatosensory_VOIs.txt +0 -0
  164. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/ToM_VOIs.txt +0 -0
  165. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/VigAtt_VOIs.txt +0 -0
  166. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/WM_VOIs.txt +0 -0
  167. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/eMDN_VOIs.txt +0 -0
  168. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/eSAD_VOIs.txt +0 -0
  169. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/VOIs/meta/extDMN_VOIs.txt +0 -0
  170. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/masks/vickery-patil/CAT12_IXI555_MNI152_TMP_GS_GMprob0.2_clean.nii.gz +0 -0
  171. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/masks/vickery-patil/CAT12_IXI555_MNI152_TMP_GS_GMprob0.2_clean_3mm.nii.gz +0 -0
  172. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/masks/vickery-patil/GMprob0.2_cortex_3mm_NA_rm.nii.gz +0 -0
  173. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/masks.py +0 -0
  174. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/tests/test_data_utils.py +0 -0
  175. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/tests/test_masks.py +0 -0
  176. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/data/utils.py +0 -0
  177. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/__init__.py +0 -0
  178. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/aomic/__init__.py +0 -0
  179. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/aomic/id1000.py +0 -0
  180. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/aomic/piop1.py +0 -0
  181. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/aomic/piop2.py +0 -0
  182. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
  183. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
  184. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
  185. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/base.py +0 -0
  186. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/datalad_base.py +0 -0
  187. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/hcp1200/__init__.py +0 -0
  188. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
  189. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
  190. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
  191. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/multiple.py +0 -0
  192. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/pattern.py +0 -0
  193. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/pattern_datalad.py +0 -0
  194. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/tests/test_base.py +0 -0
  195. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/tests/test_datagrabber_utils.py +0 -0
  196. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
  197. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/tests/test_multiple.py +0 -0
  198. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/tests/test_pattern.py +0 -0
  199. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
  200. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datagrabber/utils.py +0 -0
  201. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datareader/__init__.py +0 -0
  202. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datareader/default.py +0 -0
  203. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/datareader/tests/test_default_reader.py +0 -0
  204. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/external/__init__.py +0 -0
  205. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/external/h5io/h5io/__init__.py +0 -0
  206. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/external/h5io/h5io/_h5io.py +0 -0
  207. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/external/h5io/h5io/_version.py +0 -0
  208. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/external/h5io/h5io/chunked_array.py +0 -0
  209. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/external/h5io/h5io/chunked_list.py +0 -0
  210. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/external/nilearn/__init__.py +0 -0
  211. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
  212. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
  213. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/__init__.py +0 -0
  214. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/base.py +0 -0
  215. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/collection.py +0 -0
  216. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/ets_rss.py +0 -0
  217. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/falff/__init__.py +0 -0
  218. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/falff/falff_base.py +0 -0
  219. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/falff/falff_estimator.py +0 -0
  220. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/falff/falff_parcels.py +0 -0
  221. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/falff/falff_spheres.py +0 -0
  222. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/falff/tests/test_falff_estimator.py +0 -0
  223. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
  224. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
  225. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/functional_connectivity/__init__.py +0 -0
  226. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
  227. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
  228. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
  229. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
  230. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
  231. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
  232. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
  233. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
  234. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
  235. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
  236. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
  237. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
  238. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/reho/__init__.py +0 -0
  239. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/reho/reho_base.py +0 -0
  240. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/reho/reho_estimator.py +0 -0
  241. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/reho/reho_parcels.py +0 -0
  242. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/reho/reho_spheres.py +0 -0
  243. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/reho/tests/test_reho_estimator.py +0 -0
  244. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
  245. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
  246. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/temporal_snr/__init__.py +0 -0
  247. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
  248. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
  249. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
  250. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
  251. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
  252. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
  253. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/tests/test_collection.py +0 -0
  254. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/tests/test_ets_rss.py +0 -0
  255. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/tests/test_marker_utils.py +0 -0
  256. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/tests/test_markers_base.py +0 -0
  257. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
  258. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
  259. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/markers/utils.py +0 -0
  260. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/onthefly/__init__.py +0 -0
  261. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/onthefly/read_transform.py +0 -0
  262. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/onthefly/tests/test_read_transform.py +0 -0
  263. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/pipeline/__init__.py +0 -0
  264. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/pipeline/pipeline_step_mixin.py +0 -0
  265. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/pipeline/registry.py +0 -0
  266. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/pipeline/singleton.py +0 -0
  267. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
  268. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/pipeline/tests/test_registry.py +0 -0
  269. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
  270. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/pipeline/tests/test_workdir_manager.py +0 -0
  271. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/pipeline/update_meta_mixin.py +0 -0
  272. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/pipeline/utils.py +0 -0
  273. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/pipeline/workdir_manager.py +0 -0
  274. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/preprocess/__init__.py +0 -0
  275. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/preprocess/base.py +0 -0
  276. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/preprocess/confounds/__init__.py +0 -0
  277. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
  278. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +0 -0
  279. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/preprocess/tests/test_preprocess_base.py +0 -0
  280. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/stats.py +0 -0
  281. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/storage/__init__.py +0 -0
  282. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/storage/base.py +0 -0
  283. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/storage/hdf5.py +0 -0
  284. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/storage/pandas_base.py +0 -0
  285. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/storage/sqlite.py +0 -0
  286. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/storage/tests/test_hdf5.py +0 -0
  287. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/storage/tests/test_pandas_base.py +0 -0
  288. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/storage/tests/test_sqlite.py +0 -0
  289. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/storage/tests/test_storage_base.py +0 -0
  290. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/storage/tests/test_utils.py +0 -0
  291. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/storage/utils.py +0 -0
  292. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/testing/__init__.py +0 -0
  293. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
  294. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/testing/datagrabbers.py +0 -0
  295. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/testing/registry.py +0 -0
  296. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
  297. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
  298. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
  299. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/testing/tests/test_testing_registry.py +0 -0
  300. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/testing/utils.py +0 -0
  301. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/tests/test_main.py +0 -0
  302. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/tests/test_stats.py +0 -0
  303. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/utils/__init__.py +0 -0
  304. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/utils/fs.py +0 -0
  305. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/utils/logging.py +0 -0
  306. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/utils/tests/test_fs.py +0 -0
  307. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer/utils/tests/test_logging.py +0 -0
  308. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer.egg-info/dependency_links.txt +0 -0
  309. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer.egg-info/entry_points.txt +0 -0
  310. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer.egg-info/requires.txt +0 -0
  311. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/junifer.egg-info/top_level.txt +0 -0
  312. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/pyproject.toml +0 -0
  313. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/setup.cfg +0 -0
  314. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/setup.py +0 -0
  315. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/tools/create_aomic1000_example_dataset.py +0 -0
  316. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/tools/create_aomicpiop1_example_dataset.py +0 -0
  317. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/tools/create_aomicpiop2_example_dataset.py +0 -0
  318. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/tools/create_bids_example_dataset.py +0 -0
  319. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/tools/create_bids_example_dataset_sessions.py +0 -0
  320. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/tools/create_hcp1200_example_dataset.py +0 -0
  321. {junifer-0.0.4.dev108 → junifer-0.0.4.dev133}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: junifer
3
- Version: 0.0.4.dev108
3
+ Version: 0.0.4.dev133
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
+ Introduce :func:`.get_parcellation` to fetch parcellation tailored for the data by `Synchon Mandal`_
@@ -0,0 +1 @@
1
+ Introduce :func:`.get_coordinates` to fetch coordinates tailored for the data by `Synchon Mandal`_
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.0.4.dev108'
16
- __version_tuple__ = version_tuple = (0, 0, 4, 'dev108')
15
+ __version__ = version = '0.0.4.dev133'
16
+ __version_tuple__ = version_tuple = (0, 0, 4, 'dev133')
@@ -8,12 +8,14 @@ from .coordinates import (
8
8
  list_coordinates,
9
9
  load_coordinates,
10
10
  register_coordinates,
11
+ get_coordinates,
11
12
  )
12
13
  from .parcellations import (
13
14
  list_parcellations,
14
15
  load_parcellation,
15
16
  register_parcellation,
16
17
  merge_parcellations,
18
+ get_parcellation,
17
19
  )
18
20
 
19
21
  from .masks import (
@@ -1,11 +1,12 @@
1
1
  """Provide functions for list of coordinates."""
2
2
 
3
3
  # Authors: Federico Raimondo <f.raimondo@fz-juelich.de>
4
+ # Synchon Mandal <s.mandal@fz-juelich.de>
4
5
  # License: AGPL
5
6
 
6
7
  import typing
7
8
  from pathlib import Path
8
- from typing import Dict, List, Optional, Tuple, Union
9
+ from typing import Any, Dict, List, Optional, Tuple, Union
9
10
 
10
11
  import numpy as np
11
12
  import pandas as pd
@@ -57,7 +58,7 @@ def register_coordinates(
57
58
  voi_names: List[str],
58
59
  overwrite: Optional[bool] = False,
59
60
  ) -> None:
60
- """Register coordinates.
61
+ """Register a custom user coordinates.
61
62
 
62
63
  Parameters
63
64
  ----------
@@ -73,6 +74,18 @@ def register_coordinates(
73
74
  overwrite : bool, optional
74
75
  If True, overwrite an existing list of coordinates with the same name.
75
76
  Does not apply to built-in coordinates (default False).
77
+
78
+ Raises
79
+ ------
80
+ ValueError
81
+ If the coordinates name is already registered and overwrite is set to
82
+ False or if the coordinates name is a built-in coordinates or if the
83
+ ``coordinates`` is not a 2D array or if coordinate value does not have
84
+ 3 components or if the ``voi_names`` shape does not match the
85
+ ``coordinates`` shape.
86
+ TypeError
87
+ If ``coordinates`` is not a ``numpy.ndarray``.
88
+
76
89
  """
77
90
  if name in _available_coordinates:
78
91
  if isinstance(_available_coordinates[name], Path):
@@ -90,7 +103,8 @@ def register_coordinates(
90
103
 
91
104
  if not isinstance(coordinates, np.ndarray):
92
105
  raise_error(
93
- f"Coordinates must be a numpy.ndarray, not {type(coordinates)}."
106
+ f"Coordinates must be a `numpy.ndarray`, not {type(coordinates)}.",
107
+ klass=TypeError,
94
108
  )
95
109
  if coordinates.ndim != 2:
96
110
  raise_error(
@@ -102,8 +116,8 @@ def register_coordinates(
102
116
  )
103
117
  if len(voi_names) != coordinates.shape[0]:
104
118
  raise_error(
105
- f"Length of voi_names ({len(voi_names)}) does not match the "
106
- f"number of coordinates ({coordinates.shape[0]})."
119
+ f"Length of `voi_names` ({len(voi_names)}) does not match the "
120
+ f"number of `coordinates` ({coordinates.shape[0]})."
107
121
  )
108
122
  _available_coordinates[name] = {
109
123
  "coords": coordinates,
@@ -112,16 +126,55 @@ def register_coordinates(
112
126
 
113
127
 
114
128
  def list_coordinates() -> List[str]:
115
- """List all the available coordinates lists (VOIs).
129
+ """List all the available coordinates (VOIs).
116
130
 
117
131
  Returns
118
132
  -------
119
133
  list of str
120
134
  A list with all available coordinates names.
135
+
121
136
  """
122
137
  return sorted(_available_coordinates.keys())
123
138
 
124
139
 
140
+ def get_coordinates(
141
+ coords: str,
142
+ target_data: Dict[str, Any],
143
+ extra_input: Optional[Dict[str, Any]] = None,
144
+ ) -> Tuple[ArrayLike, List[str]]:
145
+ """Get coordinates, tailored for the target image.
146
+
147
+ Parameters
148
+ ----------
149
+ coords : str
150
+ The name of the coordinates.
151
+ target_data : dict
152
+ The corresponding item of the data object to which the coordinates
153
+ will be applied.
154
+ extra_input : dict, optional
155
+ The other fields in the data object. Useful for accessing other data
156
+ kinds that needs to be used in the computation of coordinates
157
+ (default None).
158
+
159
+ Returns
160
+ -------
161
+ numpy.ndarray
162
+ The coordinates.
163
+ list of str
164
+ The names of the VOIs.
165
+
166
+ Raises
167
+ ------
168
+ ValueError
169
+ If ``extra_input`` is None when ``target_data``'s space is not MNI.
170
+
171
+ """
172
+ # Load the coordinates
173
+ seeds, labels = load_coordinates(name=coords)
174
+
175
+ return seeds, labels
176
+
177
+
125
178
  def load_coordinates(name: str) -> Tuple[ArrayLike, List[str]]:
126
179
  """Load coordinates.
127
180
 
@@ -137,14 +190,23 @@ def load_coordinates(name: str) -> Tuple[ArrayLike, List[str]]:
137
190
  list of str
138
191
  The names of the VOIs.
139
192
 
193
+ Raises
194
+ ------
195
+ ValueError
196
+ If ``name`` is invalid.
197
+
140
198
  Warns
141
199
  -----
142
200
  DeprecationWarning
143
201
  If ``Power`` is provided as the ``name``.
144
202
 
145
203
  """
204
+ # Check for valid coordinates name
146
205
  if name not in _available_coordinates:
147
- raise_error(f"Coordinates {name} not found.")
206
+ raise_error(
207
+ f"Coordinates {name} not found. "
208
+ f"Valid options are: {list_coordinates()}"
209
+ )
148
210
 
149
211
  # Put up deprecation notice
150
212
  if name == "Power":
@@ -157,8 +219,10 @@ def load_coordinates(name: str) -> Tuple[ArrayLike, List[str]]:
157
219
  category=DeprecationWarning,
158
220
  )
159
221
 
222
+ # Load coordinates
160
223
  t_coord = _available_coordinates[name]
161
224
  if isinstance(t_coord, Path):
225
+ # Load via pandas
162
226
  df_coords = pd.read_csv(t_coord, sep="\t", header=None)
163
227
  coords = df_coords.iloc[:, [0, 1, 2]].to_numpy()
164
228
  names = list(df_coords.iloc[:, [3]].values[:, 0])
@@ -167,4 +231,5 @@ def load_coordinates(name: str) -> Tuple[ArrayLike, List[str]]:
167
231
  coords = typing.cast(ArrayLike, coords)
168
232
  names = t_coord["voi_names"]
169
233
  names = typing.cast(List[str], names)
234
+
170
235
  return coords, names
@@ -9,6 +9,7 @@ import io
9
9
  import shutil
10
10
  import tarfile
11
11
  import tempfile
12
+ import typing
12
13
  import zipfile
13
14
  from pathlib import Path
14
15
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union
@@ -161,8 +162,8 @@ def register_parcellation(
161
162
  )
162
163
  else:
163
164
  raise_error(
164
- f"Parcellation {name} already registered. Set `overwrite=True`"
165
- "to update its value."
165
+ f"Parcellation {name} already registered. Set "
166
+ "`overwrite=True` to update its value."
166
167
  )
167
168
  # Convert str to Path
168
169
  if not isinstance(parcellation_path, Path):
@@ -187,12 +188,68 @@ def list_parcellations() -> List[str]:
187
188
  return sorted(_available_parcellations.keys())
188
189
 
189
190
 
190
- # def _check_resolution(resolution, valid_resolution):
191
- # if resolution is None:
192
- # return None
193
- # if resolution not in valid_resolution:
194
- # raise ValueError(f'Invalid resolution: {resolution}')
195
- # return resolution
191
+ def get_parcellation(
192
+ parcellation: List[str],
193
+ target_data: Dict[str, Any],
194
+ extra_input: Optional[Dict[str, Any]] = None,
195
+ ) -> Tuple["Nifti1Image", List[str]]:
196
+ """Get parcellation, tailored for the target image.
197
+
198
+ Parameters
199
+ ----------
200
+ parcellation : list of str
201
+ The name(s) of the parcellation(s).
202
+ target_data : dict
203
+ The corresponding item of the data object to which the parcellation
204
+ will be applied.
205
+ extra_input : dict, optional
206
+ The other fields in the data object. Useful for accessing other data
207
+ kinds that needs to be used in the computation of parcellations
208
+ (default None).
209
+
210
+ Returns
211
+ -------
212
+ Nifti1Image
213
+ The parcellation image.
214
+ list of str
215
+ Parcellation labels.
216
+
217
+ """
218
+ # Get the min of the voxels sizes and use it as the resolution
219
+ target_img = target_data["data"]
220
+ resolution = np.min(target_img.header.get_zooms()[:3])
221
+
222
+ # Load the parcellations
223
+ all_parcellations = []
224
+ all_labels = []
225
+ for name in parcellation:
226
+ img, labels, _ = load_parcellation(
227
+ name=name,
228
+ resolution=resolution,
229
+ )
230
+ # Resample all of them to the image
231
+ resampled_img = image.resample_to_img(
232
+ source_img=img,
233
+ target_img=target_img,
234
+ interpolation="nearest",
235
+ copy=True,
236
+ )
237
+ all_parcellations.append(resampled_img)
238
+ all_labels.append(labels)
239
+
240
+ # Avoid merging if there is only one parcellation
241
+ if len(all_parcellations) == 1:
242
+ resampled_parcellation_img = all_parcellations[0]
243
+ labels = all_labels[0]
244
+ else:
245
+ # Merge the parcellations
246
+ resampled_parcellation_img, labels = merge_parcellations(
247
+ parcellations_list=all_parcellations,
248
+ parcellations_names=parcellation,
249
+ labels_lists=all_labels,
250
+ )
251
+
252
+ return resampled_parcellation_img, labels
196
253
 
197
254
 
198
255
  def load_parcellation(
@@ -203,8 +260,8 @@ def load_parcellation(
203
260
  ) -> Tuple[Optional["Nifti1Image"], List[str], Path]:
204
261
  """Load a brain parcellation (including a label file).
205
262
 
206
- If it is a built-in parcellaions and file is not present in the
207
- `parcellations_dir` directory, it will be downloaded.
263
+ If it is a built-in parcellation and the file is not present in the
264
+ ``parcellations_dir`` directory, it will be downloaded.
208
265
 
209
266
  Parameters
210
267
  ----------
@@ -231,17 +288,25 @@ def load_parcellation(
231
288
  pathlib.Path
232
289
  File path to the parcellation image.
233
290
 
291
+ Raises
292
+ ------
293
+ ValueError
294
+ If ``name`` is invalid or if the parcellation values and labels
295
+ don't have equal dimension or if the value range is invalid.
296
+
234
297
  """
235
- # Invalid parcellation name
298
+ # Check for valid parcellation name
236
299
  if name not in _available_parcellations:
237
300
  raise_error(
238
301
  f"Parcellation {name} not found. "
239
302
  f"Valid options are: {list_parcellations()}"
240
303
  )
241
304
 
305
+ # Copy parcellation definition to avoid edits in original object
242
306
  parcellation_definition = _available_parcellations[name].copy()
243
307
  t_family = parcellation_definition.pop("family")
244
308
 
309
+ # Check if the parcellation family is custom or built-in
245
310
  if t_family == "CustomUserParcellation":
246
311
  parcellation_fname = Path(parcellation_definition["path"])
247
312
  parcellation_labels = parcellation_definition["labels"]
@@ -253,24 +318,31 @@ def load_parcellation(
253
318
  **parcellation_definition,
254
319
  )
255
320
 
321
+ # Load parcellation image and values
256
322
  logger.info(f"Loading parcellation {parcellation_fname.absolute()!s}")
257
-
258
323
  parcellation_img = None
259
324
  if path_only is False:
325
+ # Load image via nibabel
260
326
  parcellation_img = nib.load(parcellation_fname)
327
+ # Get unique values
261
328
  parcel_values = np.unique(parcellation_img.get_fdata())
329
+ # Check for dimension
262
330
  if len(parcel_values) - 1 != len(parcellation_labels):
263
331
  raise_error(
264
332
  f"Parcellation {name} has {len(parcel_values) - 1} parcels "
265
333
  f"but {len(parcellation_labels)} labels."
266
334
  )
335
+ # Sort values
267
336
  parcel_values.sort()
337
+ # Check if value range is invalid
268
338
  if np.any(np.diff(parcel_values) != 1):
269
339
  raise_error(
270
340
  f"Parcellation {name} must have all the values in the range "
271
341
  f"[0, {len(parcel_values)}]."
272
342
  )
273
343
 
344
+ # Type-cast to remove errors
345
+ parcellation_img = typing.cast("Nifti1Image", parcellation_img)
274
346
  return parcellation_img, parcellation_labels, parcellation_fname
275
347
 
276
348
 
@@ -8,10 +8,13 @@ import pytest
8
8
  from numpy.testing import assert_array_equal
9
9
 
10
10
  from junifer.data.coordinates import (
11
+ get_coordinates,
11
12
  list_coordinates,
12
13
  load_coordinates,
13
14
  register_coordinates,
14
15
  )
16
+ from junifer.datareader import DefaultDataReader
17
+ from junifer.testing.datagrabbers import OasisVBMTestingDataGrabber
15
18
 
16
19
 
17
20
  def test_register_coordinates_built_in_check() -> None:
@@ -54,7 +57,7 @@ def test_register_coordinates_overwrite() -> None:
54
57
 
55
58
  def test_register_coordinates_valid_input() -> None:
56
59
  """Test coordinates registration check for valid input."""
57
- with pytest.raises(ValueError, match=r"numpy.ndarray"):
60
+ with pytest.raises(TypeError, match=r"numpy.ndarray"):
58
61
  register_coordinates(
59
62
  name="MyList",
60
63
  coordinates=[1, 2],
@@ -105,3 +108,21 @@ def test_load_coordinates_nonexisting() -> None:
105
108
  """Test loading coordinates that not exist."""
106
109
  with pytest.raises(ValueError, match=r"not found"):
107
110
  load_coordinates("NonExisting")
111
+
112
+
113
+ def test_get_coordinates() -> None:
114
+ """Test tailored coordinates fetch."""
115
+ reader = DefaultDataReader()
116
+ with OasisVBMTestingDataGrabber() as dg:
117
+ element = dg["sub-01"]
118
+ element_data = reader.fit_transform(element)
119
+ vbm_gm = element_data["VBM_GM"]
120
+ # Get tailored coordinates
121
+ tailored_coords, tailored_labels = get_coordinates(
122
+ coords="DMNBuckner", target_data=vbm_gm
123
+ )
124
+ # Get raw coordinates
125
+ raw_coords, raw_labels = load_coordinates("DMNBuckner")
126
+ # Both tailored and raw should be same for now
127
+ assert_array_equal(tailored_coords, raw_coords)
128
+ assert tailored_labels == raw_labels
@@ -11,7 +11,7 @@ from typing import List
11
11
  import nibabel as nib
12
12
  import numpy as np
13
13
  import pytest
14
- from nilearn.image import new_img_like
14
+ from nilearn.image import new_img_like, resample_to_img
15
15
  from numpy.testing import assert_array_almost_equal, assert_array_equal
16
16
 
17
17
  from junifer.data.parcellations import (
@@ -22,11 +22,14 @@ from junifer.data.parcellations import (
22
22
  _retrieve_suit,
23
23
  _retrieve_tian,
24
24
  _retrieve_yan,
25
+ get_parcellation,
25
26
  list_parcellations,
26
27
  load_parcellation,
27
28
  merge_parcellations,
28
29
  register_parcellation,
29
30
  )
31
+ from junifer.datareader import DefaultDataReader
32
+ from junifer.testing.datagrabbers import OasisVBMTestingDataGrabber
30
33
 
31
34
 
32
35
  def test_register_parcellation_built_in_check() -> None:
@@ -1078,3 +1081,89 @@ def test_merge_parcellations_3D_multiple_duplicated_labels(
1078
1081
  assert_array_equal(parc_data, merged_parc.get_fdata())
1079
1082
  assert len(labels) == 100
1080
1083
  assert len(np.unique(parc_data)) == 101 # 100 + 1 because background 0
1084
+
1085
+
1086
+ def test_get_parcellation_single() -> None:
1087
+ """Test tailored single parcellation fetch."""
1088
+ reader = DefaultDataReader()
1089
+ with OasisVBMTestingDataGrabber() as dg:
1090
+ element = dg["sub-01"]
1091
+ element_data = reader.fit_transform(element)
1092
+ vbm_gm = element_data["VBM_GM"]
1093
+ vbm_gm_img = vbm_gm["data"]
1094
+ # Get tailored parcellation
1095
+ tailored_parcellation, tailored_labels = get_parcellation(
1096
+ parcellation=["Schaefer100x7"],
1097
+ target_data=vbm_gm,
1098
+ )
1099
+ # Check shape and affine with original element data
1100
+ assert tailored_parcellation.shape == vbm_gm_img.shape
1101
+ assert_array_equal(tailored_parcellation.affine, vbm_gm_img.affine)
1102
+ # Get raw parcellation
1103
+ raw_parcellation, raw_labels, _ = load_parcellation(
1104
+ "Schaefer100x7",
1105
+ resolution=1.5,
1106
+ )
1107
+ resampled_raw_parcellation = resample_to_img(
1108
+ source_img=raw_parcellation,
1109
+ target_img=vbm_gm_img,
1110
+ interpolation="nearest",
1111
+ copy=True,
1112
+ )
1113
+ # Check resampled data with tailored data
1114
+ assert_array_equal(
1115
+ tailored_parcellation.get_fdata(),
1116
+ resampled_raw_parcellation.get_fdata(),
1117
+ )
1118
+ assert tailored_labels == raw_labels
1119
+
1120
+
1121
+ def test_get_parcellation_multi() -> None:
1122
+ """Test tailored multi parcellation fetch."""
1123
+ reader = DefaultDataReader()
1124
+ with OasisVBMTestingDataGrabber() as dg:
1125
+ element = dg["sub-01"]
1126
+ element_data = reader.fit_transform(element)
1127
+ vbm_gm = element_data["VBM_GM"]
1128
+ vbm_gm_img = vbm_gm["data"]
1129
+ # Get tailored parcellation
1130
+ tailored_parcellation, tailored_labels = get_parcellation(
1131
+ parcellation=[
1132
+ "Schaefer100x7",
1133
+ "TianxS2x3TxMNInonlinear2009cAsym",
1134
+ ],
1135
+ target_data=vbm_gm,
1136
+ )
1137
+ # Check shape and affine with original element data
1138
+ assert tailored_parcellation.shape == vbm_gm_img.shape
1139
+ assert_array_equal(tailored_parcellation.affine, vbm_gm_img.affine)
1140
+ # Get raw parcellations
1141
+ raw_parcellations = []
1142
+ raw_labels = []
1143
+ parcellations_names = [
1144
+ "Schaefer100x7",
1145
+ "TianxS2x3TxMNInonlinear2009cAsym",
1146
+ ]
1147
+ for name in parcellations_names:
1148
+ img, labels, _ = load_parcellation(name=name, resolution=1.5)
1149
+ # Resample raw parcellations
1150
+ resampled_img = resample_to_img(
1151
+ source_img=img,
1152
+ target_img=vbm_gm_img,
1153
+ interpolation="nearest",
1154
+ copy=True,
1155
+ )
1156
+ raw_parcellations.append(resampled_img)
1157
+ raw_labels.append(labels)
1158
+ # Merge resampled parcellations
1159
+ merged_resampled_parcellations, merged_labels = merge_parcellations(
1160
+ parcellations_list=raw_parcellations,
1161
+ parcellations_names=parcellations_names,
1162
+ labels_lists=raw_labels,
1163
+ )
1164
+ # Check resampled data with tailored data
1165
+ assert_array_equal(
1166
+ tailored_parcellation.get_fdata(),
1167
+ merged_resampled_parcellations.get_fdata(),
1168
+ )
1169
+ assert tailored_labels == merged_labels
@@ -7,11 +7,11 @@
7
7
  from typing import Any, ClassVar, Dict, List, Optional, Set, Union
8
8
 
9
9
  import numpy as np
10
- from nilearn.image import math_img, resample_to_img
10
+ from nilearn.image import math_img
11
11
  from nilearn.maskers import NiftiMasker
12
12
 
13
13
  from ..api.decorators import register_marker
14
- from ..data import get_mask, load_parcellation, merge_parcellations
14
+ from ..data import get_mask, get_parcellation
15
15
  from ..stats import get_aggfunc_by_name
16
16
  from ..utils import logger, raise_error, warn_with_log
17
17
  from .base import BaseMarker
@@ -49,6 +49,13 @@ class ParcelAggregation(BaseMarker):
49
49
  name : str, optional
50
50
  The name of the marker. If None, will use the class name (default
51
51
  None).
52
+
53
+ Raises
54
+ ------
55
+ ValueError
56
+ If ``time_method`` is specified for non-BOLD data or if
57
+ ``time_method_params`` is not None when ``time_method`` is None.
58
+
52
59
  """
53
60
 
54
61
  _DEPENDENCIES: ClassVar[Set[str]] = {"nilearn", "numpy"}
@@ -110,6 +117,11 @@ class ParcelAggregation(BaseMarker):
110
117
  str
111
118
  The storage type output by the marker.
112
119
 
120
+ Raises
121
+ ------
122
+ ValueError
123
+ If the ``input_type`` is invalid.
124
+
113
125
  """
114
126
 
115
127
  if input_type in ["VBM_GM", "VBM_WM", "fALFF", "GCOR", "LCOR"]:
@@ -117,7 +129,7 @@ class ParcelAggregation(BaseMarker):
117
129
  elif input_type == "BOLD":
118
130
  return "timeseries"
119
131
  else:
120
- raise ValueError(f"Unknown input kind for {input_type}")
132
+ raise_error(f"Unknown input kind for {input_type}")
121
133
 
122
134
  def compute(
123
135
  self, input: Dict[str, Any], extra_input: Optional[Dict] = None
@@ -145,62 +157,53 @@ class ParcelAggregation(BaseMarker):
145
157
  * ``data`` : the actual computed values as a numpy.ndarray
146
158
  * ``col_names`` : the column labels for the computed values as list
147
159
 
160
+ Warns
161
+ -----
162
+ RuntimeWarning
163
+ If time aggregation is required but only time point is available.
164
+
148
165
  """
149
166
  t_input_img = input["data"]
150
167
  logger.debug(f"Parcel aggregation using {self.method}")
168
+ # Get aggregation function
151
169
  agg_func = get_aggfunc_by_name(
152
170
  name=self.method, func_params=self.method_params
153
171
  )
154
- # Get the min of the voxels sizes and use it as the resolution
155
- resolution = np.min(t_input_img.header.get_zooms()[:3])
156
-
157
- # Load the parcellations
158
- all_parcelations = []
159
- all_labels = []
160
- for t_parc_name in self.parcellation:
161
- t_parcellation, t_labels, _ = load_parcellation(
162
- name=t_parc_name, resolution=resolution
163
- )
164
- # Resample all of them to the image
165
- t_parcellation_img_res = resample_to_img(
166
- t_parcellation, t_input_img, interpolation="nearest", copy=True
167
- )
168
- all_parcelations.append(t_parcellation_img_res)
169
- all_labels.append(t_labels)
170
172
 
171
- # Avoid merging if there is only one parcellation
172
- if len(all_parcelations) == 1:
173
- parcellation_img_res = all_parcelations[0]
174
- labels = all_labels[0]
175
- else:
176
- # Merge the parcellations
177
- parcellation_img_res, labels = merge_parcellations(
178
- all_parcelations, self.parcellation, all_labels
179
- )
173
+ # Get parcellation tailored to target image
174
+ parcellation_img, labels = get_parcellation(
175
+ parcellation=self.parcellation,
176
+ target_data=input,
177
+ extra_input=extra_input,
178
+ )
180
179
 
181
- parcellation_bin = math_img("img != 0", img=parcellation_img_res)
180
+ # Get binarized parcellation image for masking
181
+ parcellation_bin = math_img("img != 0", img=parcellation_img)
182
182
 
183
+ # Load mask
183
184
  if self.masks is not None:
184
185
  logger.debug(f"Masking with {self.masks}")
186
+ # Get tailored mask
185
187
  mask_img = get_mask(
186
188
  masks=self.masks, target_data=input, extra_input=extra_input
187
189
  )
188
-
190
+ # Get "logical and" version of parcellation and mask
189
191
  parcellation_bin = math_img(
190
192
  "np.logical_and(img, mask)",
191
193
  img=parcellation_bin,
192
194
  mask=mask_img,
193
195
  )
194
196
 
197
+ # Initialize masker
195
198
  logger.debug("Masking")
196
199
  masker = NiftiMasker(
197
200
  parcellation_bin, target_affine=t_input_img.affine
198
- ) # type: ignore
199
-
201
+ )
200
202
  # Mask the input data and the parcellation
201
203
  data = masker.fit_transform(t_input_img)
202
- parcellation_values = masker.transform(parcellation_img_res)
203
- parcellation_values = np.squeeze(parcellation_values).astype(int)
204
+ parcellation_values = np.squeeze(
205
+ masker.transform(parcellation_img)
206
+ ).astype(int)
204
207
 
205
208
  # Get the values for each parcel and apply agg function
206
209
  logger.debug("Computing ROI means")
@@ -214,6 +217,7 @@ class ParcelAggregation(BaseMarker):
214
217
 
215
218
  out_values = np.array(out_values).T
216
219
 
220
+ # Apply time dimension aggregation if required
217
221
  if self.time_method is not None:
218
222
  if out_values.shape[0] > 1:
219
223
  logger.debug("Aggregating time dimension")
@@ -226,5 +230,6 @@ class ParcelAggregation(BaseMarker):
226
230
  "No time dimension to aggregate as only one time point is "
227
231
  "available."
228
232
  )
233
+ # Format the output
229
234
  out = {"data": out_values, "col_names": labels}
230
235
  return out