junifer 0.0.4.dev11__tar.gz → 0.0.4.dev25__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 (301) hide show
  1. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/PKG-INFO +1 -1
  2. junifer-0.0.4.dev25/docs/changes/newsfragments/248.change +1 -0
  3. junifer-0.0.4.dev25/junifer/_version.py +4 -0
  4. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/cli.py +59 -14
  5. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/functions.py +3 -1
  6. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/tests/test_cli.py +61 -1
  7. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/base.py +48 -3
  8. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/tests/test_base.py +57 -0
  9. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/onthefly/read_transform.py +13 -6
  10. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer.egg-info/PKG-INFO +1 -1
  11. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer.egg-info/SOURCES.txt +1 -0
  12. junifer-0.0.4.dev11/junifer/_version.py +0 -4
  13. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  14. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  15. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/.github/ISSUE_TEMPLATE/dataset-request.yml +0 -0
  16. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/.github/ISSUE_TEMPLATE/documention-request.yml +0 -0
  17. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  18. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/.github/ISSUE_TEMPLATE/marker-request.yml +0 -0
  19. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/.github/pull_request_template.md +0 -0
  20. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/.github/workflows/ci-docs.yml +0 -0
  21. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/.github/workflows/ci.yml +0 -0
  22. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/.github/workflows/docs-preview.yml +0 -0
  23. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/.github/workflows/docs.yml +0 -0
  24. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/.github/workflows/lint.yml +0 -0
  25. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/.github/workflows/pypi.yml +0 -0
  26. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/.gitignore +0 -0
  27. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/.gitmodules +0 -0
  28. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/.pre-commit-config.yaml +0 -0
  29. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/AUTHORS.rst +0 -0
  30. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/LICENSE.md +0 -0
  31. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/README.md +0 -0
  32. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/codecov.yml +0 -0
  33. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/conda-env.yml +0 -0
  34. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/Makefile +0 -0
  35. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/_static/css/custom.css +0 -0
  36. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/_static/js/custom.js +0 -0
  37. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/_templates/versions.html +0 -0
  38. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/api/api.rst +0 -0
  39. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/api/configs.rst +0 -0
  40. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/api/data.rst +0 -0
  41. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/api/datagrabbers.rst +0 -0
  42. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/api/datareaders.rst +0 -0
  43. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/api/index.rst +0 -0
  44. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/api/markers.rst +0 -0
  45. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/api/nilearn.rst +0 -0
  46. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/api/onthefly.rst +0 -0
  47. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/api/pipeline.rst +0 -0
  48. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/api/preprocessing.rst +0 -0
  49. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/api/stats.rst +0 -0
  50. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/api/storage.rst +0 -0
  51. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/api/testing.rst +0 -0
  52. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/api/utils.rst +0 -0
  53. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/builtin.rst +0 -0
  54. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/changes/contributors.inc +0 -0
  55. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/changes/newsfragments/.gitignore +0 -0
  56. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/changes/newsfragments/233.bugfix +0 -0
  57. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/changes/newsfragments/247.doc +0 -0
  58. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/conf.py +0 -0
  59. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/contribution.rst +0 -0
  60. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/extending/coordinates.rst +0 -0
  61. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/extending/datagrabber.rst +0 -0
  62. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/extending/extension.rst +0 -0
  63. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/extending/index.rst +0 -0
  64. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/extending/marker.rst +0 -0
  65. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/extending/masks.rst +0 -0
  66. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/extending/parcellations.rst +0 -0
  67. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/faq.rst +0 -0
  68. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/help.rst +0 -0
  69. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/images/junifer_logo.png +0 -0
  70. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/index.rst +0 -0
  71. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/installation.rst +0 -0
  72. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/links.inc +0 -0
  73. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/maintaining.rst +0 -0
  74. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/redirect.html +0 -0
  75. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/sphinxext/gh_substitutions.py +0 -0
  76. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/starting.rst +0 -0
  77. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/understanding/data.rst +0 -0
  78. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/understanding/datagrabber.rst +0 -0
  79. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/understanding/datareader.rst +0 -0
  80. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/understanding/index.rst +0 -0
  81. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/understanding/marker.rst +0 -0
  82. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/understanding/pipeline.rst +0 -0
  83. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/understanding/preprocess.rst +0 -0
  84. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/understanding/storage.rst +0 -0
  85. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/using/codeless.rst +0 -0
  86. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/using/index.rst +0 -0
  87. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/using/masks.rst +0 -0
  88. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/using/queueing.rst +0 -0
  89. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/using/running.rst +0 -0
  90. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/docs/whats_new.rst +0 -0
  91. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/examples/README.rst +0 -0
  92. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/examples/norun_hcpfc_pearson.py +0 -0
  93. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/examples/norun_ukbvm_gmd.py +0 -0
  94. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/examples/run_compute_parcel_mean.py +0 -0
  95. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/examples/run_datagrabber_bids_datalad.py +0 -0
  96. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/examples/run_ets_rss_marker.py +0 -0
  97. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/examples/run_junifer_julearn.py +0 -0
  98. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/examples/run_run_gmd_mean.py +0 -0
  99. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/examples/yamls/gmd_mean.yaml +0 -0
  100. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/examples/yamls/gmd_mean_htcondor.yaml +0 -0
  101. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/examples/yamls/ukb_gmd_mean.yaml +0 -0
  102. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/ignore_words.txt +0 -0
  103. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/__init__.py +0 -0
  104. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/__init__.py +0 -0
  105. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/decorators.py +0 -0
  106. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/parser.py +0 -0
  107. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/res/afni/3dAFNItoNIFTI +0 -0
  108. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/res/afni/3dRSFC +0 -0
  109. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/res/afni/3dReHo +0 -0
  110. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/res/afni/afni +0 -0
  111. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/res/afni/run_afni_docker.sh +0 -0
  112. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/res/run_conda.sh +0 -0
  113. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/tests/data/gmd_mean.yaml +0 -0
  114. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/tests/data/gmd_mean_htcondor.yaml +0 -0
  115. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/tests/test_api_utils.py +0 -0
  116. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/tests/test_functions.py +0 -0
  117. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/tests/test_parser.py +0 -0
  118. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/api/utils.py +0 -0
  119. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/configs/__init__.py +0 -0
  120. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/configs/juseless/__init__.py +0 -0
  121. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/configs/juseless/datagrabbers/__init__.py +0 -0
  122. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/configs/juseless/datagrabbers/aomic_id1000_vbm.py +0 -0
  123. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/configs/juseless/datagrabbers/camcan_vbm.py +0 -0
  124. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/configs/juseless/datagrabbers/ixi_vbm.py +0 -0
  125. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/configs/juseless/datagrabbers/tests/test_aomic_id1000_vbm.py +0 -0
  126. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/configs/juseless/datagrabbers/tests/test_camcan_vbm.py +0 -0
  127. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/configs/juseless/datagrabbers/tests/test_ixi_vbm.py +0 -0
  128. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/configs/juseless/datagrabbers/tests/test_ucla.py +0 -0
  129. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/configs/juseless/datagrabbers/tests/test_ukb_vbm.py +0 -0
  130. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/configs/juseless/datagrabbers/ucla.py +0 -0
  131. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/configs/juseless/datagrabbers/ukb_vbm.py +0 -0
  132. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/CogAC_VOIs.txt +0 -0
  133. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/CogAR_VOIs.txt +0 -0
  134. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/DMNBuckner_VOIs.txt +0 -0
  135. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/Dosenbach2010_MNI_VOIs.txt +0 -0
  136. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/Empathy_VOIs.txt +0 -0
  137. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/Motor_VOIs.txt +0 -0
  138. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/MultiTask_VOIs.txt +0 -0
  139. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/PhysioStress_VOIs.txt +0 -0
  140. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/Power2011_MNI_VOIs.txt +0 -0
  141. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/Rew_VOIs.txt +0 -0
  142. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/Somatosensory_VOIs.txt +0 -0
  143. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/ToM_VOIs.txt +0 -0
  144. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/VigAtt_VOIs.txt +0 -0
  145. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/WM_VOIs.txt +0 -0
  146. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/eMDN_VOIs.txt +0 -0
  147. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/eSAD_VOIs.txt +0 -0
  148. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/VOIs/meta/extDMN_VOIs.txt +0 -0
  149. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/__init__.py +0 -0
  150. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/coordinates.py +0 -0
  151. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/masks/vickery-patil/CAT12_IXI555_MNI152_TMP_GS_GMprob0.2_clean.nii.gz +0 -0
  152. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/masks/vickery-patil/CAT12_IXI555_MNI152_TMP_GS_GMprob0.2_clean_3mm.nii.gz +0 -0
  153. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/masks/vickery-patil/GMprob0.2_cortex_3mm_NA_rm.nii.gz +0 -0
  154. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/masks.py +0 -0
  155. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/parcellations.py +0 -0
  156. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/tests/test_coordinates.py +0 -0
  157. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/tests/test_data_utils.py +0 -0
  158. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/tests/test_masks.py +0 -0
  159. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/tests/test_parcellations.py +0 -0
  160. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/data/utils.py +0 -0
  161. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/__init__.py +0 -0
  162. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/aomic/__init__.py +0 -0
  163. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/aomic/id1000.py +0 -0
  164. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/aomic/piop1.py +0 -0
  165. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/aomic/piop2.py +0 -0
  166. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/aomic/tests/test_id1000.py +0 -0
  167. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/aomic/tests/test_piop1.py +0 -0
  168. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/aomic/tests/test_piop2.py +0 -0
  169. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/datalad_base.py +0 -0
  170. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/hcp1200/__init__.py +0 -0
  171. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/hcp1200/datalad_hcp1200.py +0 -0
  172. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/hcp1200/hcp1200.py +0 -0
  173. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/hcp1200/tests/test_hcp1200.py +0 -0
  174. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/multiple.py +0 -0
  175. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/pattern.py +0 -0
  176. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/pattern_datalad.py +0 -0
  177. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/tests/test_datagrabber_utils.py +0 -0
  178. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/tests/test_datalad_base.py +0 -0
  179. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/tests/test_multiple.py +0 -0
  180. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/tests/test_pattern.py +0 -0
  181. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/tests/test_pattern_datalad.py +0 -0
  182. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datagrabber/utils.py +0 -0
  183. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datareader/__init__.py +0 -0
  184. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datareader/default.py +0 -0
  185. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/datareader/tests/test_default_reader.py +0 -0
  186. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/external/__init__.py +0 -0
  187. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/external/h5io/h5io/__init__.py +0 -0
  188. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/external/h5io/h5io/_h5io.py +0 -0
  189. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/external/h5io/h5io/_version.py +0 -0
  190. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/external/h5io/h5io/chunked_array.py +0 -0
  191. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/external/h5io/h5io/chunked_list.py +0 -0
  192. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/external/nilearn/__init__.py +0 -0
  193. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/external/nilearn/junifer_nifti_spheres_masker.py +0 -0
  194. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/external/nilearn/tests/test_junifer_nifti_spheres_masker.py +0 -0
  195. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/__init__.py +0 -0
  196. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/base.py +0 -0
  197. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/collection.py +0 -0
  198. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/ets_rss.py +0 -0
  199. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/falff/__init__.py +0 -0
  200. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/falff/falff_base.py +0 -0
  201. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/falff/falff_estimator.py +0 -0
  202. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/falff/falff_parcels.py +0 -0
  203. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/falff/falff_spheres.py +0 -0
  204. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/falff/tests/test_falff_estimator.py +0 -0
  205. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/falff/tests/test_falff_parcels.py +0 -0
  206. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/falff/tests/test_falff_spheres.py +0 -0
  207. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/functional_connectivity/__init__.py +0 -0
  208. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/functional_connectivity/crossparcellation_functional_connectivity.py +0 -0
  209. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/functional_connectivity/edge_functional_connectivity_parcels.py +0 -0
  210. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/functional_connectivity/edge_functional_connectivity_spheres.py +0 -0
  211. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/functional_connectivity/functional_connectivity_base.py +0 -0
  212. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/functional_connectivity/functional_connectivity_parcels.py +0 -0
  213. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/functional_connectivity/functional_connectivity_spheres.py +0 -0
  214. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/functional_connectivity/tests/test_crossparcellation_functional_connectivity.py +0 -0
  215. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_parcels.py +0 -0
  216. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/functional_connectivity/tests/test_edge_functional_connectivity_spheres.py +0 -0
  217. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_base.py +0 -0
  218. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_parcels.py +0 -0
  219. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/functional_connectivity/tests/test_functional_connectivity_spheres.py +0 -0
  220. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/parcel_aggregation.py +0 -0
  221. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/reho/__init__.py +0 -0
  222. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/reho/reho_base.py +0 -0
  223. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/reho/reho_estimator.py +0 -0
  224. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/reho/reho_parcels.py +0 -0
  225. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/reho/reho_spheres.py +0 -0
  226. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/reho/tests/test_reho_estimator.py +0 -0
  227. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/reho/tests/test_reho_parcels.py +0 -0
  228. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/reho/tests/test_reho_spheres.py +0 -0
  229. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/sphere_aggregation.py +0 -0
  230. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/temporal_snr/__init__.py +0 -0
  231. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/temporal_snr/temporal_snr_base.py +0 -0
  232. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/temporal_snr/temporal_snr_parcels.py +0 -0
  233. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/temporal_snr/temporal_snr_spheres.py +0 -0
  234. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/temporal_snr/tests/test_temporal_snr_base.py +0 -0
  235. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/temporal_snr/tests/test_temporal_snr_parcels.py +0 -0
  236. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/temporal_snr/tests/test_temporal_snr_spheres.py +0 -0
  237. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/tests/test_collection.py +0 -0
  238. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/tests/test_ets_rss.py +0 -0
  239. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/tests/test_marker_utils.py +0 -0
  240. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/tests/test_markers_base.py +0 -0
  241. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/tests/test_parcel_aggregation.py +0 -0
  242. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/tests/test_sphere_aggregation.py +0 -0
  243. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/markers/utils.py +0 -0
  244. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/onthefly/__init__.py +0 -0
  245. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/onthefly/tests/test_read_transform.py +0 -0
  246. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/pipeline/__init__.py +0 -0
  247. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/pipeline/pipeline_step_mixin.py +0 -0
  248. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/pipeline/registry.py +0 -0
  249. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/pipeline/tests/test_pipeline_step_mixin.py +0 -0
  250. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/pipeline/tests/test_registry.py +0 -0
  251. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/pipeline/tests/test_update_meta_mixin.py +0 -0
  252. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/pipeline/update_meta_mixin.py +0 -0
  253. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/pipeline/utils.py +0 -0
  254. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/preprocess/__init__.py +0 -0
  255. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/preprocess/base.py +0 -0
  256. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/preprocess/confounds/__init__.py +0 -0
  257. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/preprocess/confounds/fmriprep_confound_remover.py +0 -0
  258. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/preprocess/confounds/tests/test_fmriprep_confound_remover.py +0 -0
  259. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/preprocess/tests/test_preprocess_base.py +0 -0
  260. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/stats.py +0 -0
  261. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/storage/__init__.py +0 -0
  262. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/storage/base.py +0 -0
  263. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/storage/hdf5.py +0 -0
  264. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/storage/pandas_base.py +0 -0
  265. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/storage/sqlite.py +0 -0
  266. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/storage/tests/test_hdf5.py +0 -0
  267. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/storage/tests/test_pandas_base.py +0 -0
  268. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/storage/tests/test_sqlite.py +0 -0
  269. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/storage/tests/test_storage_base.py +0 -0
  270. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/storage/tests/test_utils.py +0 -0
  271. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/storage/utils.py +0 -0
  272. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/testing/__init__.py +0 -0
  273. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/testing/data/sub-0001_task-anticipation_acq-seq_desc-confounds_regressors.tsv +0 -0
  274. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/testing/datagrabbers.py +0 -0
  275. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/testing/registry.py +0 -0
  276. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/testing/tests/test_oasisvmbtesting_datagrabber.py +0 -0
  277. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/testing/tests/test_partlycloudytesting_datagrabber.py +0 -0
  278. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/testing/tests/test_spmauditory_datagrabber.py +0 -0
  279. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/testing/tests/test_testing_registry.py +0 -0
  280. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/testing/utils.py +0 -0
  281. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/tests/test_main.py +0 -0
  282. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/tests/test_stats.py +0 -0
  283. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/utils/__init__.py +0 -0
  284. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/utils/fs.py +0 -0
  285. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/utils/logging.py +0 -0
  286. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/utils/tests/test_fs.py +0 -0
  287. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer/utils/tests/test_logging.py +0 -0
  288. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer.egg-info/dependency_links.txt +0 -0
  289. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer.egg-info/entry_points.txt +0 -0
  290. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer.egg-info/requires.txt +0 -0
  291. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/junifer.egg-info/top_level.txt +0 -0
  292. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/pyproject.toml +0 -0
  293. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/setup.cfg +0 -0
  294. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/setup.py +0 -0
  295. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/tools/create_aomic1000_example_dataset.py +0 -0
  296. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/tools/create_aomicpiop1_example_dataset.py +0 -0
  297. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/tools/create_aomicpiop2_example_dataset.py +0 -0
  298. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/tools/create_bids_example_dataset.py +0 -0
  299. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/tools/create_bids_example_dataset_sessions.py +0 -0
  300. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/tools/create_hcp1200_example_dataset.py +0 -0
  301. {junifer-0.0.4.dev11 → junifer-0.0.4.dev25}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: junifer
3
- Version: 0.0.4.dev11
3
+ Version: 0.0.4.dev25
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
+ Add ``feature_md5`` argument to :func:`.read_transform()` by `Synchon Mandal`_
@@ -0,0 +1,4 @@
1
+ # file generated by setuptools_scm
2
+ # don't change, don't track in version control
3
+ __version__ = version = '0.0.4.dev25'
4
+ __version_tuple__ = version_tuple = (0, 0, 4, 'dev25')
@@ -8,7 +8,7 @@ import pathlib
8
8
  import subprocess
9
9
  import sys
10
10
  from pathlib import Path
11
- from typing import Dict, List, Union
11
+ from typing import Dict, List, Tuple, Union
12
12
 
13
13
  import click
14
14
 
@@ -32,27 +32,48 @@ from .utils import (
32
32
  )
33
33
 
34
34
 
35
- def _parse_elements(element: str, config: Dict) -> Union[List, None]:
35
+ def _parse_elements(element: Tuple[str], config: Dict) -> Union[List, None]:
36
36
  """Parse elements from cli.
37
37
 
38
38
  Parameters
39
39
  ----------
40
- element : str
41
- The element to operate on.
40
+ element : tuple of str
41
+ The element(s) to operate on.
42
42
  config : dict
43
43
  The configuration to operate using.
44
44
 
45
45
  Returns
46
46
  -------
47
- list
48
- The element(s) as list.
47
+ list or None
48
+ The element(s) as list or None.
49
+
50
+ Raises
51
+ ------
52
+ ValueError
53
+ If no element is found either in the command-line options or
54
+ the configuration file.
55
+
56
+ Warns
57
+ -----
58
+ RuntimeWarning
59
+ If elements are specified both via the command-line options and
60
+ the configuration file.
49
61
 
50
62
  """
51
63
  logger.debug(f"Parsing elements: {element}")
64
+ # Early return None to continue with all elements
52
65
  if len(element) == 0:
53
66
  return None
54
- # TODO: If len == 1, check if its a file, then parse elements from file
55
- elements = [tuple(x.split(",")) if "," in x else x for x in element]
67
+ # Check if the element is a file for single element;
68
+ # if yes, then parse elements from it
69
+ if len(element) == 1 and Path(element[0]).resolve().is_file():
70
+ fetched_element = _parse_elements_file(Path(element[0]).resolve())
71
+ else:
72
+ fetched_element = element
73
+ # Process multi-keyed elements
74
+ elements = [
75
+ tuple(x.split(",")) if "," in x else x for x in fetched_element
76
+ ]
56
77
  logger.debug(f"Parsed elements: {elements}")
57
78
  if elements is not None and "elements" in config:
58
79
  warn_with_log(
@@ -61,19 +82,41 @@ def _parse_elements(element: str, config: Dict) -> Union[List, None]:
61
82
  "over the configuration file. That is, the elements specified "
62
83
  "in the command line will be used. The elements specified in "
63
84
  "the configuration file will be ignored. To remove this warning, "
64
- 'please remove the "elements" item from the configuration file.'
85
+ "please remove the `elements` item from the configuration file."
65
86
  )
66
87
  elif elements is None:
88
+ # Check in config
67
89
  elements = config.get("elements", None)
68
90
  if elements is None:
69
91
  raise_error(
70
- "The 'elements' key is set in the configuration, but its value"
71
- " is 'None'. It is likely that there is an empty 'elements' "
92
+ "The `elements` key is set in the configuration, but its value"
93
+ " is `None`. It is likely that there is an empty `elements` "
72
94
  "section in the yaml configuration file."
73
95
  )
74
96
  return elements
75
97
 
76
98
 
99
+ def _parse_elements_file(filepath: Path) -> List[str]:
100
+ """Parse elements from file.
101
+
102
+ Parameters
103
+ ----------
104
+ filepath : pathlib.Path
105
+ The path to the element file.
106
+
107
+ Returns
108
+ -------
109
+ list of str
110
+ The element(s) as list.
111
+
112
+ """
113
+ # Read file
114
+ with open(filepath) as file:
115
+ raw_elements = file.readlines()
116
+ # Strip whitespace and return
117
+ return [element.strip() for element in raw_elements]
118
+
119
+
77
120
  def _validate_verbose(
78
121
  ctx: click.Context, param: str, value: str
79
122
  ) -> Union[str, int]:
@@ -133,7 +176,9 @@ def cli() -> None: # pragma: no cover
133
176
  callback=_validate_verbose,
134
177
  default="info",
135
178
  )
136
- def run(filepath: click.Path, element: str, verbose: Union[str, int]) -> None:
179
+ def run(
180
+ filepath: click.Path, element: Tuple[str], verbose: Union[str, int]
181
+ ) -> None:
137
182
  """Run command for CLI.
138
183
 
139
184
  \f
@@ -142,8 +187,8 @@ def run(filepath: click.Path, element: str, verbose: Union[str, int]) -> None:
142
187
  ----------
143
188
  filepath : click.Path
144
189
  The filepath to the configuration file.
145
- element : str
146
- The element to operate using.
190
+ element : tuple of str
191
+ The element to operate on.
147
192
  verbose : click.Choice
148
193
  The verbosity level: warning, info or debug (default "info").
149
194
 
@@ -163,7 +163,9 @@ def run(
163
163
  # Fit elements
164
164
  with datagrabber_object:
165
165
  if elements is not None:
166
- for t_element in elements:
166
+ for t_element in datagrabber_object.filter(
167
+ elements # type: ignore
168
+ ):
167
169
  mc.fit(datagrabber_object[t_element])
168
170
  else:
169
171
  for t_element in datagrabber_object:
@@ -35,7 +35,16 @@ runner = CliRunner()
35
35
  def test_run_and_collect_commands(
36
36
  tmp_path: Path, elements: Tuple[str, ...]
37
37
  ) -> None:
38
- """Test run and collect commands."""
38
+ """Test run and collect commands.
39
+
40
+ Parameters
41
+ ----------
42
+ tmp_path : pathlib.Path
43
+ The path to the test directory.
44
+ elements : tuple of str
45
+ The elements to operate on.
46
+
47
+ """
39
48
  # Get test config
40
49
  infile = Path(__file__).parent / "data" / "gmd_mean.yaml"
41
50
  # Read test config
@@ -74,6 +83,57 @@ def test_run_and_collect_commands(
74
83
  assert collect_result.exit_code == 0
75
84
 
76
85
 
86
+ @pytest.mark.parametrize(
87
+ "elements",
88
+ [
89
+ "sub-01",
90
+ "sub-01\nsub-02",
91
+ ],
92
+ )
93
+ def test_run_using_element_file(tmp_path: Path, elements: str) -> None:
94
+ """Test run command using element file.
95
+
96
+ Parameters
97
+ ----------
98
+ tmp_path : pathlib.Path
99
+ The path to the test directory.
100
+ elements : str
101
+ The elements to write to the element file.
102
+
103
+ """
104
+ # Create test file
105
+ test_file_path = tmp_path / "elements.txt"
106
+ with open(test_file_path, "w") as f:
107
+ f.write(elements)
108
+
109
+ # Get test config
110
+ infile = Path(__file__).parent / "data" / "gmd_mean.yaml"
111
+ # Read test config
112
+ contents = yaml.load(infile)
113
+ # Working directory
114
+ workdir = tmp_path / "workdir"
115
+ contents["workdir"] = str(workdir.resolve())
116
+ # Output directory
117
+ outdir = tmp_path / "outdir"
118
+ # Storage
119
+ contents["storage"]["uri"] = str(outdir.resolve())
120
+ # Write new test config
121
+ outfile = tmp_path / "in.yaml"
122
+ yaml.dump(contents, stream=outfile)
123
+ # Run command arguments
124
+ run_args = [
125
+ str(outfile.absolute()),
126
+ "--verbose",
127
+ "debug",
128
+ "--element",
129
+ str(test_file_path.resolve()),
130
+ ]
131
+ # Invoke run command
132
+ run_result = runner.invoke(run, run_args)
133
+ # Check
134
+ assert run_result.exit_code == 0
135
+
136
+
77
137
  def test_wtf_short() -> None:
78
138
  """Test short version of wtf command."""
79
139
  # Invoke wtf command
@@ -58,12 +58,12 @@ class BaseDataGrabber(ABC, UpdateMetaMixin):
58
58
  """
59
59
  yield from self.get_elements()
60
60
 
61
- def __getitem__(self, element: Union[str, Tuple]) -> Dict[str, Dict]:
61
+ def __getitem__(self, element: Union[str, Tuple[str]]) -> Dict[str, Dict]:
62
62
  """Enable indexing support.
63
63
 
64
64
  Parameters
65
65
  ----------
66
- element : str or tuple
66
+ element : str or tuple of str
67
67
  The element to be indexed.
68
68
 
69
69
  Returns
@@ -117,6 +117,51 @@ class BaseDataGrabber(ABC, UpdateMetaMixin):
117
117
  """
118
118
  return self._datadir
119
119
 
120
+ def filter(self, selection: List[Union[str, Tuple[str]]]) -> Iterator:
121
+ """Filter elements to be grabbed.
122
+
123
+ Parameters
124
+ ----------
125
+ selection : list of str or tuple
126
+ The list of partial element key values to filter using.
127
+
128
+ Yields
129
+ ------
130
+ object
131
+ An element that can be indexed by the DataGrabber.
132
+
133
+ """
134
+
135
+ def filter_func(element: Union[str, Tuple[str]]) -> bool:
136
+ """Filter element based on selection.
137
+
138
+ Parameters
139
+ ----------
140
+ element : str or tuple of str
141
+ The element to be filtered.
142
+
143
+ Returns
144
+ -------
145
+ bool
146
+ If the element passes the filter or not.
147
+
148
+ """
149
+ # Convert element to tuple
150
+ if not isinstance(element, tuple):
151
+ element = (element,)
152
+ # Filter based on selection kind
153
+ if isinstance(selection[0], str):
154
+ for opt in selection:
155
+ if opt in element:
156
+ return True
157
+ elif isinstance(selection[0], tuple):
158
+ for opt in selection:
159
+ if set(opt).issubset(element):
160
+ return True
161
+ return False
162
+
163
+ yield from filter(filter_func, self.get_elements())
164
+
120
165
  @abstractmethod
121
166
  def get_element_keys(self) -> List[str]:
122
167
  """Get element keys.
@@ -136,7 +181,7 @@ class BaseDataGrabber(ABC, UpdateMetaMixin):
136
181
  )
137
182
 
138
183
  @abstractmethod
139
- def get_elements(self) -> List:
184
+ def get_elements(self) -> List[Union[str, Tuple[str]]]:
140
185
  """Get elements.
141
186
 
142
187
  Returns
@@ -67,3 +67,60 @@ def test_BaseDataGrabber() -> None:
67
67
 
68
68
  with pytest.raises(NotImplementedError):
69
69
  dg.get_item(subject=1) # type: ignore
70
+
71
+
72
+ def test_BaseDataGrabber_filter_single() -> None:
73
+ """Test single-keyed element filter for BaseDataGrabber."""
74
+
75
+ # Create concrete class
76
+ class FilterDataGrabber(BaseDataGrabber):
77
+ def get_item(self, subject):
78
+ return {"BOLD": {}}
79
+
80
+ def get_elements(self):
81
+ return ["sub01", "sub02", "sub03"]
82
+
83
+ def get_element_keys(self):
84
+ return ["subject"]
85
+
86
+ dg = FilterDataGrabber(datadir="/tmp", types=["BOLD"])
87
+ with dg:
88
+ assert "sub01" in list(dg.filter(["sub01"]))
89
+ assert "sub02" not in list(dg.filter(["sub01"]))
90
+
91
+
92
+ def test_BaseDataGrabber_filter_multi() -> None:
93
+ """Test multi-keyed element filter for BaseDataGrabber."""
94
+
95
+ # Create concrete class
96
+ class FilterDataGrabber(BaseDataGrabber):
97
+ def get_item(self, subject):
98
+ return {"BOLD": {}}
99
+
100
+ def get_elements(self):
101
+ return [
102
+ ("sub01", "rest"),
103
+ ("sub01", "movie"),
104
+ ("sub02", "rest"),
105
+ ("sub02", "movie"),
106
+ ("sub03", "rest"),
107
+ ("sub03", "movie"),
108
+ ]
109
+
110
+ def get_element_keys(self):
111
+ return ["subject", "task"]
112
+
113
+ dg = FilterDataGrabber(datadir="/tmp", types=["BOLD"])
114
+ with dg:
115
+ assert ("sub01", "rest") in list(
116
+ dg.filter([("sub01", "rest")]) # type: ignore
117
+ )
118
+ assert ("sub01", "movie") not in list(
119
+ dg.filter([("sub01", "rest")]) # type: ignore
120
+ )
121
+ assert ("sub02", "rest") not in list(
122
+ dg.filter([("sub01", "rest")]) # type: ignore
123
+ )
124
+ assert ("sub02", "movie") not in list(
125
+ dg.filter([("sub01", "rest")]) # type: ignore
126
+ )
@@ -17,8 +17,9 @@ if TYPE_CHECKING:
17
17
 
18
18
  def read_transform(
19
19
  storage: Type["BaseFeatureStorage"],
20
- feature_name: str,
21
20
  transform: str,
21
+ feature_name: Optional[str] = None,
22
+ feature_md5: Optional[str] = None,
22
23
  transform_args: Optional[Tuple] = None,
23
24
  transform_kw_args: Optional[Dict] = None,
24
25
  ) -> pd.DataFrame:
@@ -28,11 +29,13 @@ def read_transform(
28
29
  ----------
29
30
  storage : storage-like
30
31
  The storage class, for example, SQLiteFeatureStorage.
31
- feature_name : str
32
- Name of the feature to read.
33
32
  transform : str
34
33
  The kind of transform formatted as ``<package>_<function>``,
35
34
  for example, ``bctpy_degrees_und``.
35
+ feature_name : str, optional
36
+ Name of the feature to read (default None).
37
+ feature_md5 : str, optional
38
+ MD5 hash of the feature to read (default None).
36
39
  transform_args : tuple, optional
37
40
  The positional arguments for the callable of ``transform``
38
41
  (default None).
@@ -62,7 +65,9 @@ def read_transform(
62
65
  transform_kw_args = transform_kw_args or {}
63
66
 
64
67
  # Read storage
65
- stored_data = storage.read(feature_name=feature_name) # type: ignore
68
+ stored_data = storage.read(
69
+ feature_name=feature_name, feature_md5=feature_md5
70
+ ) # type: ignore
66
71
  # Retrieve package and function
67
72
  package, func_str = transform.split("_", 1)
68
73
  # Condition for package
@@ -105,7 +110,8 @@ def read_transform(
105
110
  # Apply function and store subject-wise
106
111
  output_list = []
107
112
  logger.debug(
108
- f"Computing '{package}.{func_str}' for feature {feature_name} ..."
113
+ f"Computing '{package}.{func_str}' for feature "
114
+ f"{feature_name or feature_md5} ..."
109
115
  )
110
116
  for subject in range(stored_data["data"].shape[2]):
111
117
  output = func(
@@ -119,7 +125,8 @@ def read_transform(
119
125
  idx_df = pd.DataFrame(data=stored_data["element"])
120
126
  # Create multiindex from dataframe
121
127
  logger.debug(
122
- f"Generating pandas.MultiIndex for feature {feature_name} ..."
128
+ "Generating pandas.MultiIndex for feature "
129
+ f"{feature_name or feature_md5} ..."
123
130
  )
124
131
  data_idx = pd.MultiIndex.from_frame(df=idx_df)
125
132
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: junifer
3
- Version: 0.0.4.dev11
3
+ Version: 0.0.4.dev25
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>
@@ -58,6 +58,7 @@ docs/changes/contributors.inc
58
58
  docs/changes/newsfragments/.gitignore
59
59
  docs/changes/newsfragments/233.bugfix
60
60
  docs/changes/newsfragments/247.doc
61
+ docs/changes/newsfragments/248.change
61
62
  docs/extending/coordinates.rst
62
63
  docs/extending/datagrabber.rst
63
64
  docs/extending/extension.rst
@@ -1,4 +0,0 @@
1
- # file generated by setuptools_scm
2
- # don't change, don't track in version control
3
- __version__ = version = '0.0.4.dev11'
4
- __version_tuple__ = version_tuple = (0, 0, 4, 'dev11')
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes