sdcflows 2.13.0__tar.gz → 2.13.2__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 (271) hide show
  1. sdcflows-2.13.2/.circleci/version.py +5 -0
  2. sdcflows-2.13.2/.git-blame-ignore-revs +6 -0
  3. {sdcflows-2.13.0 → sdcflows-2.13.2}/.github/workflows/docs-build-update.yml +1 -1
  4. {sdcflows-2.13.0 → sdcflows-2.13.2}/.github/workflows/validate.yml +3 -2
  5. {sdcflows-2.13.0 → sdcflows-2.13.2}/.maint/update_authors.py +79 -109
  6. {sdcflows-2.13.0 → sdcflows-2.13.2}/.pre-commit-config.yaml +1 -2
  7. {sdcflows-2.13.0 → sdcflows-2.13.2}/CHANGES.rst +18 -0
  8. {sdcflows-2.13.0 → sdcflows-2.13.2}/PKG-INFO +3 -7
  9. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/conf.py +71 -69
  10. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/examples.rst +1 -1
  11. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/notebooks/SDC - Theory and physics.ipynb +87 -68
  12. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/tools/apigen.py +81 -94
  13. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/tools/buildmodref.py +17 -18
  14. {sdcflows-2.13.0 → sdcflows-2.13.2}/pyproject.toml +30 -35
  15. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/__init__.py +6 -4
  16. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/_version.py +2 -2
  17. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/_warnings.py +4 -3
  18. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/cli/main.py +26 -28
  19. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/cli/parser.py +106 -110
  20. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/cli/tests/test_find_estimators.py +51 -49
  21. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/cli/workflow.py +11 -7
  22. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/config.py +93 -103
  23. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/conftest.py +22 -17
  24. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/__init__.py +1 -0
  25. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/fieldmaps.py +92 -114
  26. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/brainmask.py +33 -38
  27. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/bspline.py +118 -141
  28. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/epi.py +35 -42
  29. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/fmap.py +65 -69
  30. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/reportlets.py +30 -35
  31. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/tests/test_bspline.py +32 -36
  32. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/tests/test_epi.py +6 -5
  33. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/tests/test_fmap.py +8 -7
  34. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/tests/test_reportlets.py +11 -10
  35. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/tests/test_utils.py +26 -25
  36. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/utils.py +83 -77
  37. sdcflows-2.13.2/sdcflows/tests/test_fieldmaps.py +350 -0
  38. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/test_transform.py +83 -87
  39. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/test_version.py +14 -12
  40. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/transform.py +54 -55
  41. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/bimap.py +6 -9
  42. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/epimanip.py +26 -25
  43. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/misc.py +1 -0
  44. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/phasemanip.py +23 -27
  45. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/telemetry.py +2 -1
  46. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/tests/test_misc.py +8 -5
  47. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/tests/test_phasemanip.py +10 -11
  48. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/tests/test_tools.py +14 -15
  49. sdcflows-2.13.2/sdcflows/utils/tests/test_wrangler.py +619 -0
  50. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/tools.py +22 -26
  51. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/wrangler.py +74 -102
  52. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/viz/utils.py +16 -16
  53. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/ancillary.py +15 -13
  54. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/apply/correction.py +23 -21
  55. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/apply/registration.py +18 -15
  56. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/apply/tests/test_correction.py +29 -31
  57. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/apply/tests/test_registration.py +21 -25
  58. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/base.py +20 -30
  59. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/base.py +5 -9
  60. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/fieldmap.py +36 -35
  61. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/pepolar.py +69 -81
  62. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/syn.py +122 -126
  63. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/tests/test_fit.py +17 -13
  64. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/tests/test_pepolar.py +8 -7
  65. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/tests/test_phdiff.py +17 -22
  66. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/tests/test_syn.py +76 -88
  67. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/outputs.py +35 -38
  68. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/tests/test_ancillary.py +15 -15
  69. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/tests/test_base.py +8 -7
  70. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/tests/test_integration.py +40 -48
  71. sdcflows-2.13.2/tools/cache_templateflow.py +12 -0
  72. sdcflows-2.13.0/.circleci/version.py +0 -4
  73. sdcflows-2.13.0/sdcflows/tests/test_fieldmaps.py +0 -358
  74. sdcflows-2.13.0/sdcflows/utils/tests/test_wrangler.py +0 -474
  75. sdcflows-2.13.0/tools/cache_templateflow.py +0 -12
  76. {sdcflows-2.13.0 → sdcflows-2.13.2}/.circleci/artifact_path +0 -0
  77. {sdcflows-2.13.0 → sdcflows-2.13.2}/.circleci/config.yml +0 -0
  78. {sdcflows-2.13.0 → sdcflows-2.13.2}/.codecov.yml +0 -0
  79. {sdcflows-2.13.0 → sdcflows-2.13.2}/.coveragerc +0 -0
  80. {sdcflows-2.13.0 → sdcflows-2.13.2}/.docker/files/neurodebian.gpg +0 -0
  81. {sdcflows-2.13.0 → sdcflows-2.13.2}/.docker/files/nipype.cfg +0 -0
  82. {sdcflows-2.13.0 → sdcflows-2.13.2}/.dockerignore +0 -0
  83. {sdcflows-2.13.0 → sdcflows-2.13.2}/.gitattributes +0 -0
  84. {sdcflows-2.13.0 → sdcflows-2.13.2}/.github/dependabot.yml +0 -0
  85. {sdcflows-2.13.0 → sdcflows-2.13.2}/.github/workflows/build-test-publish.yml +0 -0
  86. {sdcflows-2.13.0 → sdcflows-2.13.2}/.gitignore +0 -0
  87. {sdcflows-2.13.0 → sdcflows-2.13.2}/.mailmap +0 -0
  88. {sdcflows-2.13.0 → sdcflows-2.13.2}/.maint/CONTRIBUTORS.md +0 -0
  89. {sdcflows-2.13.0 → sdcflows-2.13.2}/.maint/FORMER.md +0 -0
  90. {sdcflows-2.13.0 → sdcflows-2.13.2}/.maint/MAINTAINERS.md +0 -0
  91. {sdcflows-2.13.0 → sdcflows-2.13.2}/.maint/PIs.md +0 -0
  92. {sdcflows-2.13.0 → sdcflows-2.13.2}/.maint/ROADMAP.md +0 -0
  93. {sdcflows-2.13.0 → sdcflows-2.13.2}/.pep8speaks.yml +0 -0
  94. {sdcflows-2.13.0 → sdcflows-2.13.2}/.zenodo.json +0 -0
  95. {sdcflows-2.13.0 → sdcflows-2.13.2}/CONTRIBUTING.md +0 -0
  96. {sdcflows-2.13.0 → sdcflows-2.13.2}/Dockerfile +0 -0
  97. {sdcflows-2.13.0 → sdcflows-2.13.2}/LICENSE +0 -0
  98. {sdcflows-2.13.0 → sdcflows-2.13.2}/Makefile +0 -0
  99. {sdcflows-2.13.0 → sdcflows-2.13.2}/README.rst +0 -0
  100. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/Makefile +0 -0
  101. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/_static/config-example.toml +0 -0
  102. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/_static/css/version-switch.css +0 -0
  103. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/_static/js/version-switch.js +0 -0
  104. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/_static/sdcflows-OHBM21-fig1.png +0 -0
  105. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/_templates/sidebar/brand.html +0 -0
  106. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/api.rst +0 -0
  107. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/changes.rst +0 -0
  108. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/cli.rst +0 -0
  109. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/index.rst +0 -0
  110. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/installation.rst +0 -0
  111. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/links.rst +0 -0
  112. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/methods.rst +0 -0
  113. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/notebooks/fieldmap.nii.gz +0 -0
  114. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/reference/.gitignore +0 -0
  115. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/requirements.txt +0 -0
  116. {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/tools/LICENSE.txt +0 -0
  117. {sdcflows-2.13.0 → sdcflows-2.13.2}/env.yml +0 -0
  118. {sdcflows-2.13.0 → sdcflows-2.13.2}/requirements.txt +0 -0
  119. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/cli/__init__.py +0 -0
  120. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/cli/tests/__init__.py +0 -0
  121. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/affine.json +0 -0
  122. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/flirtsch/b02b0.cnf +0 -0
  123. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/flirtsch/b02b0_1.cnf +0 -0
  124. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/flirtsch/b02b0_2.cnf +0 -0
  125. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/flirtsch/b02b0_4.cnf +0 -0
  126. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/flirtsch/b02b0_quick.cnf +0 -0
  127. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/fmap-any_registration.json +0 -0
  128. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/fmap-any_registration_testing.json +0 -0
  129. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/fmap_atlas.nii.gz +0 -0
  130. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/fmap_atlas_2_MNI152NLin2009cAsym_affine.mat +0 -0
  131. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/sd_syn.json +0 -0
  132. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/sd_syn_sloppy.json +0 -0
  133. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/translation_rigid.json +0 -0
  134. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/__init__.py +0 -0
  135. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/tests/__init__.py +0 -0
  136. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/__init__.py +0 -0
  137. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/dataset_description.json +0 -0
  138. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/anat/sub-01_FLAIR.nii.gz +0 -0
  139. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/anat/sub-01_T1w.nii.gz +0 -0
  140. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/anat/sub-01_T2w.nii.gz +0 -0
  141. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-AP_dwi.nii.gz +0 -0
  142. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-AP_sbref.json +0 -0
  143. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-AP_sbref.nii.gz +0 -0
  144. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-LR_dwi.nii.gz +0 -0
  145. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-LR_sbref.json +0 -0
  146. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-LR_sbref.nii.gz +0 -0
  147. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-PA_dwi.nii.gz +0 -0
  148. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-PA_sbref.json +0 -0
  149. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-PA_sbref.nii.gz +0 -0
  150. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-RL_dwi.nii.gz +0 -0
  151. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-RL_sbref.json +0 -0
  152. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-RL_sbref.nii.gz +0 -0
  153. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_acq-single_dir-PA_epi.json +0 -0
  154. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_acq-single_dir-PA_epi.nii.gz +0 -0
  155. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_dir-AP_epi.json +0 -0
  156. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_dir-AP_epi.nii.gz +0 -0
  157. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_dir-LR_epi.json +0 -0
  158. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_dir-LR_epi.nii.gz +0 -0
  159. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_dir-PA_epi.json +0 -0
  160. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_dir-PA_epi.nii.gz +0 -0
  161. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_dir-RL_epi.json +0 -0
  162. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_dir-RL_epi.nii.gz +0 -0
  163. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_fieldmap.json +0 -0
  164. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_fieldmap.nii.gz +0 -0
  165. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_magnitude.nii.gz +0 -0
  166. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_magnitude1.nii.gz +0 -0
  167. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_magnitude2.nii.gz +0 -0
  168. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_phase1.json +0 -0
  169. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_phase1.nii.gz +0 -0
  170. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_phase2.json +0 -0
  171. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_phase2.nii.gz +0 -0
  172. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_phasediff.json +0 -0
  173. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_phasediff.nii.gz +0 -0
  174. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/func/sub-01_task-rest_bold.nii.gz +0 -0
  175. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/func/sub-01_task-rest_sbref.nii.gz +0 -0
  176. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/dataset_description.json +0 -0
  177. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/anat/sub-01_ses-1_FLAIR.nii.gz +0 -0
  178. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/anat/sub-01_ses-1_T1w.nii.gz +0 -0
  179. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/anat/sub-01_ses-1_T2w.nii.gz +0 -0
  180. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/dwi/sub-01_ses-1_dir-AP_dwi.nii.gz +0 -0
  181. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/dwi/sub-01_ses-1_dir-AP_sbref.json +0 -0
  182. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/dwi/sub-01_ses-1_dir-AP_sbref.nii.gz +0 -0
  183. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/dwi/sub-01_ses-1_dir-LR_dwi.nii.gz +0 -0
  184. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/dwi/sub-01_ses-1_dir-LR_sbref.json +0 -0
  185. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/dwi/sub-01_ses-1_dir-LR_sbref.nii.gz +0 -0
  186. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/dwi/sub-01_ses-1_dir-PA_dwi.nii.gz +0 -0
  187. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/dwi/sub-01_ses-1_dir-PA_sbref.json +0 -0
  188. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/dwi/sub-01_ses-1_dir-PA_sbref.nii.gz +0 -0
  189. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/dwi/sub-01_ses-1_dir-RL_dwi.nii.gz +0 -0
  190. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/dwi/sub-01_ses-1_dir-RL_sbref.json +0 -0
  191. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/dwi/sub-01_ses-1_dir-RL_sbref.nii.gz +0 -0
  192. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_acq-single_dir-PA_epi.json +0 -0
  193. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_acq-single_dir-PA_epi.nii.gz +0 -0
  194. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_dir-AP_epi.json +0 -0
  195. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_dir-AP_epi.nii.gz +0 -0
  196. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_dir-LR_epi.json +0 -0
  197. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_dir-LR_epi.nii.gz +0 -0
  198. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_dir-PA_epi.json +0 -0
  199. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_dir-PA_epi.nii.gz +0 -0
  200. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_dir-RL_epi.json +0 -0
  201. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_dir-RL_epi.nii.gz +0 -0
  202. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_fieldmap.json +0 -0
  203. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_fieldmap.nii.gz +0 -0
  204. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_magnitude.nii.gz +0 -0
  205. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_magnitude1.nii.gz +0 -0
  206. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_magnitude2.nii.gz +0 -0
  207. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_phase1.json +0 -0
  208. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_phase1.nii.gz +0 -0
  209. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_phase2.json +0 -0
  210. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_phase2.nii.gz +0 -0
  211. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_phasediff.json +0 -0
  212. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/fmap/sub-01_ses-1_phasediff.nii.gz +0 -0
  213. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/func/sub-01_ses-1_task-rest_bold.nii.gz +0 -0
  214. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/sub-01/ses-1/func/sub-01_ses-1_task-rest_sbref.nii.gz +0 -0
  215. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/dataset_description.json +0 -0
  216. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/anat/sub-01_FLAIR.nii.gz +0 -0
  217. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/anat/sub-01_T1w.nii.gz +0 -0
  218. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/anat/sub-01_T2w.nii.gz +0 -0
  219. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-AP_dwi.nii.gz +0 -0
  220. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-AP_sbref.json +0 -0
  221. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-AP_sbref.nii.gz +0 -0
  222. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-LR_dwi.nii.gz +0 -0
  223. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-LR_sbref.json +0 -0
  224. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-LR_sbref.nii.gz +0 -0
  225. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-PA_dwi.nii.gz +0 -0
  226. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-PA_sbref.json +0 -0
  227. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-PA_sbref.nii.gz +0 -0
  228. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-RL_dwi.nii.gz +0 -0
  229. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-RL_sbref.json +0 -0
  230. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-RL_sbref.nii.gz +0 -0
  231. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_acq-single_dir-PA_epi.json +0 -0
  232. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_acq-single_dir-PA_epi.nii.gz +0 -0
  233. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_dir-AP_epi.json +0 -0
  234. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_dir-AP_epi.nii.gz +0 -0
  235. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_dir-LR_epi.json +0 -0
  236. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_dir-LR_epi.nii.gz +0 -0
  237. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_dir-PA_epi.json +0 -0
  238. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_dir-PA_epi.nii.gz +0 -0
  239. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_dir-RL_epi.json +0 -0
  240. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_dir-RL_epi.nii.gz +0 -0
  241. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_fieldmap.json +0 -0
  242. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_fieldmap.nii.gz +0 -0
  243. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_magnitude.nii.gz +0 -0
  244. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_magnitude1.nii.gz +0 -0
  245. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_magnitude2.nii.gz +0 -0
  246. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_phase1.json +0 -0
  247. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_phase1.nii.gz +0 -0
  248. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_phase2.json +0 -0
  249. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_phase2.nii.gz +0 -0
  250. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_phasediff.json +0 -0
  251. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_phasediff.nii.gz +0 -0
  252. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/func/sub-01_task-rest_bold.nii.gz +0 -0
  253. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/func/sub-01_task-rest_sbref.nii.gz +0 -0
  254. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/task-rest_bold.json +0 -0
  255. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/epi.nii.gz +0 -0
  256. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/epi2fmap_xfm.txt +0 -0
  257. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/field-coeff-tests.nii.gz +0 -0
  258. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/fmap2epi_xfm.txt +0 -0
  259. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/topup-coeff-fixed.nii.gz +0 -0
  260. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/topup-coeff.nii.gz +0 -0
  261. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/topup-field.nii.gz +0 -0
  262. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/__init__.py +0 -0
  263. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/tests/__init__.py +0 -0
  264. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/viz/__init__.py +0 -0
  265. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/__init__.py +0 -0
  266. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/apply/__init__.py +0 -0
  267. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/apply/tests/__init__.py +0 -0
  268. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/__init__.py +0 -0
  269. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/tests/__init__.py +0 -0
  270. {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/tests/__init__.py +0 -0
  271. {sdcflows-2.13.0 → sdcflows-2.13.2}/tox.ini +0 -0
@@ -0,0 +1,5 @@
1
+ """Get sdcflows version."""
2
+
3
+ import sdcflows
4
+
5
+ print(sdcflows.__version__, end='', file=open('/tmp/.docker-version.txt', 'w'))
@@ -0,0 +1,6 @@
1
+ # Thu May 15 09:29:29 2025 -0400 - markiewicz@stanford.edu - run: ruff format [ignore-rev]
2
+ d97ae316c0bdf71084a0732760ceed5221033fc2
3
+ # Thu May 15 09:26:57 2025 -0400 - markiewicz@stanford.edu - run: ruff check --fix [ignore-rev]
4
+ cacd409cce71f2e530ad1bd1e8b79f397cab81d4
5
+ # Thu May 15 09:22:00 2025 -0400 - markiewicz@stanford.edu - run: pre-commit run --all [ignore-rev]
6
+ 2b40bee0d6b2c88628760a8b1513851a439411e8
@@ -94,7 +94,7 @@ jobs:
94
94
  - name: Push "master" docs to gh-pages after a push to master (typically, a PR merge).
95
95
  if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main'
96
96
  run: |
97
- if [[ "${CURBRANCH}" != "master" -a "${CURBRANCH}" != "main" ]]; then
97
+ if [[ "${CURBRANCH}" != "master" && "${CURBRANCH}" != "main" ]]; then
98
98
  echo "$CURBRANCH is not the default development branch"
99
99
  exit 1
100
100
  fi
@@ -17,11 +17,12 @@ permissions:
17
17
  contents: read
18
18
 
19
19
  jobs:
20
- flake8:
20
+ style:
21
21
  runs-on: ubuntu-latest
22
22
  steps:
23
23
  - uses: actions/checkout@v4
24
- - run: pipx run flake8-pyproject sdcflows/
24
+ - run: pipx run ruff check sdcflows/
25
+ - run: pipx run ruff format --diff sdcflows/
25
26
 
26
27
  # codespell:
27
28
  # runs-on: ubuntu-latest
@@ -8,9 +8,11 @@
8
8
  # ]
9
9
  # ///
10
10
  """Update and sort the creators list of the zenodo record."""
11
+
12
+ import json
11
13
  import sys
12
14
  from pathlib import Path
13
- import json
15
+
14
16
  import click
15
17
  from fuzzywuzzy import fuzz, process
16
18
 
@@ -43,21 +45,18 @@ def read_md_table(md_text):
43
45
  keys = None
44
46
  retval = []
45
47
  for line in md_text.splitlines():
46
- if line.strip().startswith("| --- |"):
47
- keys = (
48
- k.replace("*", "").strip()
49
- for k in prev.split("|")
50
- )
48
+ if line.strip().startswith('| --- |'):
49
+ keys = (k.replace('*', '').strip() for k in prev.split('|'))
51
50
  keys = [k.lower() for k in keys if k]
52
51
  continue
53
52
  elif not keys:
54
53
  prev = line
55
54
  continue
56
55
 
57
- if not line or not line.strip().startswith("|"):
56
+ if not line or not line.strip().startswith('|'):
58
57
  break
59
58
 
60
- values = [v.strip() or None for v in line.split("|")][1:-1]
59
+ values = [v.strip() or None for v in line.split('|')][1:-1]
61
60
  retval.append({k: v for k, v in zip(keys, values) if v})
62
61
 
63
62
  return retval
@@ -66,21 +65,15 @@ def read_md_table(md_text):
66
65
  def sort_contributors(entries, git_lines, exclude=None, last=None):
67
66
  """Return a list of author dictionaries, ordered by contribution."""
68
67
  last = last or []
69
- sorted_authors = sorted(entries, key=lambda i: i["name"])
68
+ sorted_authors = sorted(entries, key=lambda i: i['name'])
70
69
 
71
- first_last = [
72
- " ".join(val["name"].split(",")[::-1]).strip() for val in sorted_authors
73
- ]
74
- first_last_excl = [
75
- " ".join(val["name"].split(",")[::-1]).strip() for val in exclude or []
76
- ]
70
+ first_last = [' '.join(val['name'].split(',')[::-1]).strip() for val in sorted_authors]
71
+ first_last_excl = [' '.join(val['name'].split(',')[::-1]).strip() for val in exclude or []]
77
72
 
78
73
  unmatched = []
79
74
  author_matches = []
80
75
  for ele in git_lines:
81
- matches = process.extract(
82
- ele, first_last, scorer=fuzz.token_sort_ratio, limit=2
83
- )
76
+ matches = process.extract(ele, first_last, scorer=fuzz.token_sort_ratio, limit=2)
84
77
  # matches is a list [('First match', % Match), ('Second match', % Match)]
85
78
  if matches[0][1] > 80:
86
79
  val = sorted_authors[first_last.index(matches[0][0])]
@@ -93,7 +86,7 @@ def sort_contributors(entries, git_lines, exclude=None, last=None):
93
86
  if val not in author_matches:
94
87
  author_matches.append(val)
95
88
 
96
- names = {" ".join(val["name"].split(",")[::-1]).strip() for val in author_matches}
89
+ names = {' '.join(val['name'].split(',')[::-1]).strip() for val in author_matches}
97
90
  for missing_name in first_last:
98
91
  if missing_name not in names:
99
92
  missing = sorted_authors[first_last.index(missing_name)]
@@ -101,7 +94,7 @@ def sort_contributors(entries, git_lines, exclude=None, last=None):
101
94
 
102
95
  position_matches = []
103
96
  for i, item in enumerate(author_matches):
104
- pos = item.pop("position", None)
97
+ pos = item.pop('position', None)
105
98
  if pos is not None:
106
99
  position_matches.append((i, int(pos)))
107
100
 
@@ -113,7 +106,7 @@ def sort_contributors(entries, git_lines, exclude=None, last=None):
113
106
  return author_matches, unmatched
114
107
 
115
108
 
116
- def get_git_lines(fname="line-contributors.txt"):
109
+ def get_git_lines(fname='line-contributors.txt'):
117
110
  """Run git-line-summary."""
118
111
  import shutil
119
112
  import subprocess as sp
@@ -122,17 +115,17 @@ def get_git_lines(fname="line-contributors.txt"):
122
115
 
123
116
  lines = []
124
117
  if contrib_file.exists():
125
- print("WARNING: Reusing existing line-contributors.txt file.", file=sys.stderr)
118
+ print('WARNING: Reusing existing line-contributors.txt file.', file=sys.stderr)
126
119
  lines = contrib_file.read_text().splitlines()
127
120
 
128
- cmd = [shutil.which("git-line-summary")]
121
+ cmd = [shutil.which('git-line-summary')]
129
122
  if cmd == [None]:
130
- cmd = [shutil.which("git-summary"), "--line"]
123
+ cmd = [shutil.which('git-summary'), '--line']
131
124
  if not lines and cmd[0]:
132
- print(f"Running {' '.join(cmd)!r} on repo")
125
+ print(f'Running {" ".join(cmd)!r} on repo')
133
126
  lines = sp.check_output(cmd).decode().splitlines()
134
- lines = [l for l in lines if "Not Committed Yet" not in l]
135
- contrib_file.write_text("\n".join(lines))
127
+ lines = [line for line in lines if 'Not Committed Yet' not in line]
128
+ contrib_file.write_text('\n'.join(lines))
136
129
 
137
130
  if not lines:
138
131
  raise RuntimeError(
@@ -142,15 +135,15 @@ Could not find line-contributors from git repository.%s"""
142
135
  git-line-summary not found, please install git-extras. """
143
136
  * (cmd[0] is None)
144
137
  )
145
- return [" ".join(line.strip().split()[1:-1]) for line in lines if "%" in line]
138
+ return [' '.join(line.strip().split()[1:-1]) for line in lines if '%' in line]
146
139
 
147
140
 
148
141
  def _namelast(inlist):
149
142
  retval = []
150
143
  for i in inlist:
151
- i["name"] = (f"{i.pop('name', '')} {i.pop('lastname', '')}").strip()
152
- if not i["name"]:
153
- i["name"] = i.get("handle", "<Unknown Name>")
144
+ i['name'] = (f'{i.pop("name", "")} {i.pop("lastname", "")}').strip()
145
+ if not i['name']:
146
+ i['name'] = i.get('handle', '<Unknown Name>')
154
147
  retval.append(i)
155
148
  return retval
156
149
 
@@ -162,12 +155,13 @@ def cli():
162
155
 
163
156
 
164
157
  @cli.command()
165
- @click.option("-z", "--zenodo-file", type=click.Path(exists=True), default=".zenodo.json")
166
- @click.option("-m", "--maintainers", type=click.Path(exists=True), default=".maint/MAINTAINERS.md")
167
- @click.option("-c", "--contributors", type=click.Path(exists=True),
168
- default=".maint/CONTRIBUTORS.md")
169
- @click.option("--pi", type=click.Path(exists=True), default=".maint/PIs.md")
170
- @click.option("-f", "--former-file", type=click.Path(exists=True), default=".maint/FORMER.md")
158
+ @click.option('-z', '--zenodo-file', type=click.Path(exists=True), default='.zenodo.json')
159
+ @click.option('-m', '--maintainers', type=click.Path(exists=True), default='.maint/MAINTAINERS.md')
160
+ @click.option(
161
+ '-c', '--contributors', type=click.Path(exists=True), default='.maint/CONTRIBUTORS.md'
162
+ )
163
+ @click.option('--pi', type=click.Path(exists=True), default='.maint/PIs.md')
164
+ @click.option('-f', '--former-file', type=click.Path(exists=True), default='.maint/FORMER.md')
171
165
  def zenodo(
172
166
  zenodo_file,
173
167
  maintainers,
@@ -188,65 +182,53 @@ def zenodo(
188
182
  )
189
183
 
190
184
  zen_contributors, miss_contributors = sort_contributors(
191
- _namelast(read_md_table(Path(contributors).read_text())),
192
- data,
193
- exclude=former
185
+ _namelast(read_md_table(Path(contributors).read_text())), data, exclude=former
194
186
  )
195
187
 
196
188
  zen_pi = _namelast(reversed(read_md_table(Path(pi).read_text())))
197
189
 
198
- zenodo["creators"] = zen_creators
199
- zenodo["contributors"] = zen_contributors + [
200
- pi for pi in zen_pi if pi not in zen_contributors
201
- ]
202
- creator_names = {
203
- c["name"] for c in zenodo["creators"]
204
- if c["name"] != "<Unknown Name>"
205
- }
206
-
207
- zenodo["contributors"] = [
208
- c for c in zenodo["contributors"]
209
- if c["name"] not in creator_names
210
- ]
190
+ zenodo['creators'] = zen_creators
191
+ zenodo['contributors'] = zen_contributors + [pi for pi in zen_pi if pi not in zen_contributors]
192
+ creator_names = {c['name'] for c in zenodo['creators'] if c['name'] != '<Unknown Name>'}
193
+
194
+ zenodo['contributors'] = [c for c in zenodo['contributors'] if c['name'] not in creator_names]
211
195
 
212
196
  misses = set(miss_creators).intersection(miss_contributors)
213
197
  if misses:
214
198
  print(
215
- "Some people made commits, but are missing in .maint/ "
216
- f"files: {', '.join(misses)}",
199
+ f'Some people made commits, but are missing in .maint/ files: {", ".join(misses)}',
217
200
  file=sys.stderr,
218
201
  )
219
202
 
220
203
  # Remove position
221
- for creator in zenodo["creators"]:
222
- creator.pop("position", None)
223
- creator.pop("handle", None)
224
- if "affiliation" not in creator:
225
- creator["affiliation"] = "Unknown affiliation"
226
- elif isinstance(creator["affiliation"], list):
227
- creator["affiliation"] = creator["affiliation"][0]
228
-
229
- for creator in zenodo["contributors"]:
230
- creator.pop("handle", None)
231
- creator["type"] = "Researcher"
232
- creator.pop("position", None)
233
-
234
- if "affiliation" not in creator:
235
- creator["affiliation"] = "Unknown affiliation"
236
- elif isinstance(creator["affiliation"], list):
237
- creator["affiliation"] = creator["affiliation"][0]
238
-
239
- Path(zenodo_file).write_text(
240
- "%s\n" % json.dumps(zenodo, indent=2, ensure_ascii=False)
241
- )
204
+ for creator in zenodo['creators']:
205
+ creator.pop('position', None)
206
+ creator.pop('handle', None)
207
+ if 'affiliation' not in creator:
208
+ creator['affiliation'] = 'Unknown affiliation'
209
+ elif isinstance(creator['affiliation'], list):
210
+ creator['affiliation'] = creator['affiliation'][0]
211
+
212
+ for creator in zenodo['contributors']:
213
+ creator.pop('handle', None)
214
+ creator['type'] = 'Researcher'
215
+ creator.pop('position', None)
216
+
217
+ if 'affiliation' not in creator:
218
+ creator['affiliation'] = 'Unknown affiliation'
219
+ elif isinstance(creator['affiliation'], list):
220
+ creator['affiliation'] = creator['affiliation'][0]
221
+
222
+ Path(zenodo_file).write_text('%s\n' % json.dumps(zenodo, indent=2, ensure_ascii=False))
242
223
 
243
224
 
244
225
  @cli.command()
245
- @click.option("-m", "--maintainers", type=click.Path(exists=True), default=".maint/MAINTAINERS.md")
246
- @click.option("-c", "--contributors", type=click.Path(exists=True),
247
- default=".maint/CONTRIBUTORS.md")
248
- @click.option("--pi", type=click.Path(exists=True), default=".maint/PIs.md")
249
- @click.option("-f", "--former-file", type=click.Path(exists=True), default=".maint/FORMER.md")
226
+ @click.option('-m', '--maintainers', type=click.Path(exists=True), default='.maint/MAINTAINERS.md')
227
+ @click.option(
228
+ '-c', '--contributors', type=click.Path(exists=True), default='.maint/CONTRIBUTORS.md'
229
+ )
230
+ @click.option('--pi', type=click.Path(exists=True), default='.maint/PIs.md')
231
+ @click.option('-f', '--former-file', type=click.Path(exists=True), default='.maint/FORMER.md')
250
232
  def publication(
251
233
  maintainers,
252
234
  contributors,
@@ -254,9 +236,8 @@ def publication(
254
236
  former_file,
255
237
  ):
256
238
  """Generate the list of authors and affiliations for papers."""
257
- members = (
258
- _namelast(read_md_table(Path(maintainers).read_text()))
259
- + _namelast(read_md_table(Path(contributors).read_text()))
239
+ members = _namelast(read_md_table(Path(maintainers).read_text())) + _namelast(
240
+ read_md_table(Path(contributors).read_text())
260
241
  )
261
242
  former_names = _namelast(read_md_table(Path(former_file).read_text()))
262
243
 
@@ -267,11 +248,8 @@ def publication(
267
248
  )
268
249
 
269
250
  pi_hits = _namelast(reversed(read_md_table(Path(pi).read_text())))
270
- pi_names = [pi["name"] for pi in pi_hits]
271
- hits = [
272
- hit for hit in hits
273
- if hit["name"] not in pi_names
274
- ] + pi_hits
251
+ pi_names = [pi['name'] for pi in pi_hits]
252
+ hits = [hit for hit in hits if hit['name'] not in pi_names] + pi_hits
275
253
 
276
254
  def _aslist(value):
277
255
  if isinstance(value, (list, tuple)):
@@ -281,16 +259,16 @@ def publication(
281
259
  # Remove position
282
260
  affiliations = []
283
261
  for item in hits:
284
- item.pop("position", None)
285
- for a in _aslist(item.get("affiliation", "Unaffiliated")):
262
+ item.pop('position', None)
263
+ for a in _aslist(item.get('affiliation', 'Unaffiliated')):
286
264
  if a not in affiliations:
287
265
  affiliations.append(a)
288
266
 
289
267
  aff_indexes = [
290
- ", ".join(
268
+ ', '.join(
291
269
  [
292
- "%d" % (affiliations.index(a) + 1)
293
- for a in _aslist(author.get("affiliation", "Unaffiliated"))
270
+ '%d' % (affiliations.index(a) + 1)
271
+ for a in _aslist(author.get('affiliation', 'Unaffiliated'))
294
272
  ]
295
273
  )
296
274
  for author in hits
@@ -298,30 +276,22 @@ def publication(
298
276
 
299
277
  if misses:
300
278
  print(
301
- "Some people made commits, but are missing in .maint/ "
302
- f"files: {', '.join(misses)}",
279
+ f'Some people made commits, but are missing in .maint/ files: {", ".join(misses)}',
303
280
  file=sys.stderr,
304
281
  )
305
282
 
306
- print("Authors (%d):" % len(hits))
283
+ print('Authors (%d):' % len(hits))
307
284
  print(
308
- "%s."
309
- % "; ".join(
310
- [
311
- "%s \\ :sup:`%s`\\ " % (i["name"], idx)
312
- for i, idx in zip(hits, aff_indexes)
313
- ]
314
- )
285
+ '%s.'
286
+ % '; '.join(['%s \\ :sup:`%s`\\ ' % (i['name'], idx) for i, idx in zip(hits, aff_indexes)])
315
287
  )
316
288
 
317
289
  print(
318
- "\n\nAffiliations:\n%s"
319
- % "\n".join(
320
- ["{0: >2}. {1}".format(i + 1, a) for i, a in enumerate(affiliations)]
321
- )
290
+ '\n\nAffiliations:\n%s'
291
+ % '\n'.join(['{0: >2}. {1}'.format(i + 1, a) for i, a in enumerate(affiliations)])
322
292
  )
323
293
 
324
294
 
325
- if __name__ == "__main__":
295
+ if __name__ == '__main__':
326
296
  """ Install entry-point """
327
297
  cli()
@@ -1,10 +1,9 @@
1
1
  exclude: ".*/data/.*"
2
2
  repos:
3
3
  - repo: https://github.com/pre-commit/pre-commit-hooks
4
- rev: v4.4.0
4
+ rev: v5.0.0
5
5
  hooks:
6
6
  - id: check-added-large-files
7
- - id: check-docstring-first
8
7
  - id: check-merge-conflict
9
8
  - id: check-json
10
9
  - id: check-toml
@@ -1,3 +1,21 @@
1
+ 2.13.2 (July 28, 2025)
2
+ ======================
3
+ Patch release in the 2.13.x series.
4
+
5
+ This includes a fix for cases where a scan contributes to multiple ``B0FieldIdentifier``\s.
6
+
7
+ * [FIX] Fixes conditions of overlapping B0FieldIdentifier, resulting in no estimators (#497)
8
+
9
+
10
+ 2.13.1 (June 12, 2025)
11
+ ======================
12
+ Patch release in the 2.13.x series.
13
+
14
+ This includes a fix to ``init_fmap_preproc_wf`` node naming.
15
+
16
+ * FIX: Use the sanitized id when naming through nipype (#495)
17
+
18
+
1
19
  2.13.0 (May 15, 2025)
2
20
  =====================
3
21
  Feature release in the 2.13.x series.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sdcflows
3
- Version: 2.13.0
3
+ Version: 2.13.2
4
4
  Summary: Susceptibility Distortion Correction (SDC) workflows for EPI MR schemes.
5
5
  Project-URL: Documentation, https://www.nipreps.org/sdcflows
6
6
  Project-URL: Home, https://github.com/nipreps/sdcflows
@@ -35,14 +35,11 @@ Requires-Dist: templateflow>=23.1
35
35
  Requires-Dist: toml>=0.10
36
36
  Provides-Extra: all
37
37
  Requires-Dist: attrs>=20.1.0; extra == 'all'
38
- Requires-Dist: black; extra == 'all'
39
38
  Requires-Dist: coverage[toml]>=5.2.1; extra == 'all'
40
- Requires-Dist: flake8-pyproject; extra == 'all'
41
39
  Requires-Dist: furo; extra == 'all'
42
40
  Requires-Dist: importlib-resources; extra == 'all'
43
41
  Requires-Dist: ipykernel; extra == 'all'
44
42
  Requires-Dist: ipython; extra == 'all'
45
- Requires-Dist: isort; extra == 'all'
46
43
  Requires-Dist: nbsphinx; extra == 'all'
47
44
  Requires-Dist: pandoc; extra == 'all'
48
45
  Requires-Dist: pre-commit; extra == 'all'
@@ -53,14 +50,13 @@ Requires-Dist: pytest-cov>=2.11; extra == 'all'
53
50
  Requires-Dist: pytest-env; extra == 'all'
54
51
  Requires-Dist: pytest-xdist>=2.5; extra == 'all'
55
52
  Requires-Dist: pytest>=6; extra == 'all'
53
+ Requires-Dist: ruff; extra == 'all'
56
54
  Requires-Dist: sphinx-argparse; extra == 'all'
57
55
  Requires-Dist: sphinx>=7.2.2; extra == 'all'
58
56
  Requires-Dist: sphinxcontrib-apidoc; extra == 'all'
59
57
  Provides-Extra: dev
60
- Requires-Dist: black; extra == 'dev'
61
- Requires-Dist: flake8-pyproject; extra == 'dev'
62
- Requires-Dist: isort; extra == 'dev'
63
58
  Requires-Dist: pre-commit; extra == 'dev'
59
+ Requires-Dist: ruff; extra == 'dev'
64
60
  Provides-Extra: doc
65
61
  Requires-Dist: attrs>=20.1.0; extra == 'doc'
66
62
  Requires-Dist: furo; extra == 'doc'