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.
- sdcflows-2.13.2/.circleci/version.py +5 -0
- sdcflows-2.13.2/.git-blame-ignore-revs +6 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.github/workflows/docs-build-update.yml +1 -1
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.github/workflows/validate.yml +3 -2
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.maint/update_authors.py +79 -109
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.pre-commit-config.yaml +1 -2
- {sdcflows-2.13.0 → sdcflows-2.13.2}/CHANGES.rst +18 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/PKG-INFO +3 -7
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/conf.py +71 -69
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/examples.rst +1 -1
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/notebooks/SDC - Theory and physics.ipynb +87 -68
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/tools/apigen.py +81 -94
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/tools/buildmodref.py +17 -18
- {sdcflows-2.13.0 → sdcflows-2.13.2}/pyproject.toml +30 -35
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/__init__.py +6 -4
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/_version.py +2 -2
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/_warnings.py +4 -3
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/cli/main.py +26 -28
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/cli/parser.py +106 -110
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/cli/tests/test_find_estimators.py +51 -49
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/cli/workflow.py +11 -7
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/config.py +93 -103
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/conftest.py +22 -17
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/__init__.py +1 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/fieldmaps.py +92 -114
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/brainmask.py +33 -38
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/bspline.py +118 -141
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/epi.py +35 -42
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/fmap.py +65 -69
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/reportlets.py +30 -35
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/tests/test_bspline.py +32 -36
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/tests/test_epi.py +6 -5
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/tests/test_fmap.py +8 -7
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/tests/test_reportlets.py +11 -10
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/tests/test_utils.py +26 -25
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/utils.py +83 -77
- sdcflows-2.13.2/sdcflows/tests/test_fieldmaps.py +350 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/test_transform.py +83 -87
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/test_version.py +14 -12
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/transform.py +54 -55
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/bimap.py +6 -9
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/epimanip.py +26 -25
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/misc.py +1 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/phasemanip.py +23 -27
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/telemetry.py +2 -1
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/tests/test_misc.py +8 -5
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/tests/test_phasemanip.py +10 -11
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/tests/test_tools.py +14 -15
- sdcflows-2.13.2/sdcflows/utils/tests/test_wrangler.py +619 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/tools.py +22 -26
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/wrangler.py +74 -102
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/viz/utils.py +16 -16
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/ancillary.py +15 -13
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/apply/correction.py +23 -21
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/apply/registration.py +18 -15
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/apply/tests/test_correction.py +29 -31
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/apply/tests/test_registration.py +21 -25
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/base.py +20 -30
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/base.py +5 -9
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/fieldmap.py +36 -35
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/pepolar.py +69 -81
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/syn.py +122 -126
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/tests/test_fit.py +17 -13
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/tests/test_pepolar.py +8 -7
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/tests/test_phdiff.py +17 -22
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/tests/test_syn.py +76 -88
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/outputs.py +35 -38
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/tests/test_ancillary.py +15 -15
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/tests/test_base.py +8 -7
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/tests/test_integration.py +40 -48
- sdcflows-2.13.2/tools/cache_templateflow.py +12 -0
- sdcflows-2.13.0/.circleci/version.py +0 -4
- sdcflows-2.13.0/sdcflows/tests/test_fieldmaps.py +0 -358
- sdcflows-2.13.0/sdcflows/utils/tests/test_wrangler.py +0 -474
- sdcflows-2.13.0/tools/cache_templateflow.py +0 -12
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.circleci/artifact_path +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.circleci/config.yml +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.codecov.yml +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.coveragerc +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.docker/files/neurodebian.gpg +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.docker/files/nipype.cfg +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.dockerignore +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.gitattributes +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.github/dependabot.yml +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.github/workflows/build-test-publish.yml +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.gitignore +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.mailmap +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.maint/CONTRIBUTORS.md +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.maint/FORMER.md +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.maint/MAINTAINERS.md +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.maint/PIs.md +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.maint/ROADMAP.md +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.pep8speaks.yml +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/.zenodo.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/CONTRIBUTING.md +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/Dockerfile +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/LICENSE +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/Makefile +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/README.rst +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/Makefile +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/_static/config-example.toml +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/_static/css/version-switch.css +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/_static/js/version-switch.js +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/_static/sdcflows-OHBM21-fig1.png +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/_templates/sidebar/brand.html +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/api.rst +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/changes.rst +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/cli.rst +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/index.rst +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/installation.rst +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/links.rst +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/methods.rst +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/notebooks/fieldmap.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/reference/.gitignore +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/requirements.txt +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/docs/tools/LICENSE.txt +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/env.yml +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/requirements.txt +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/cli/__init__.py +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/cli/tests/__init__.py +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/affine.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/flirtsch/b02b0.cnf +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/flirtsch/b02b0_1.cnf +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/flirtsch/b02b0_2.cnf +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/flirtsch/b02b0_4.cnf +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/flirtsch/b02b0_quick.cnf +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/fmap-any_registration.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/fmap-any_registration_testing.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/fmap_atlas.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/fmap_atlas_2_MNI152NLin2009cAsym_affine.mat +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/sd_syn.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/sd_syn_sloppy.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/data/translation_rigid.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/__init__.py +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/interfaces/tests/__init__.py +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/__init__.py +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/dataset_description.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/anat/sub-01_FLAIR.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/anat/sub-01_T1w.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/anat/sub-01_T2w.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-AP_dwi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-AP_sbref.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-AP_sbref.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-LR_dwi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-LR_sbref.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-LR_sbref.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-PA_dwi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-PA_sbref.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-PA_sbref.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-RL_dwi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-RL_sbref.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/dwi/sub-01_dir-RL_sbref.nii.gz +0 -0
- {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
- {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
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_dir-AP_epi.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_dir-AP_epi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_dir-LR_epi.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_dir-LR_epi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_dir-PA_epi.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_dir-PA_epi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_dir-RL_epi.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_dir-RL_epi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_fieldmap.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_fieldmap.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_magnitude.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_magnitude1.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_magnitude2.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_phase1.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_phase1.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_phase2.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_phase2.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_phasediff.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/fmap/sub-01_phasediff.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/func/sub-01_task-rest_bold.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsA/sub-01/func/sub-01_task-rest_sbref.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsB/dataset_description.json +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/dataset_description.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/anat/sub-01_FLAIR.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/anat/sub-01_T1w.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/anat/sub-01_T2w.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-AP_dwi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-AP_sbref.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-AP_sbref.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-LR_dwi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-LR_sbref.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-LR_sbref.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-PA_dwi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-PA_sbref.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-PA_sbref.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-RL_dwi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-RL_sbref.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/dwi/sub-01_dir-RL_sbref.nii.gz +0 -0
- {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
- {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
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_dir-AP_epi.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_dir-AP_epi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_dir-LR_epi.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_dir-LR_epi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_dir-PA_epi.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_dir-PA_epi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_dir-RL_epi.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_dir-RL_epi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_fieldmap.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_fieldmap.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_magnitude.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_magnitude1.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_magnitude2.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_phase1.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_phase1.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_phase2.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_phase2.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_phasediff.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/fmap/sub-01_phasediff.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/func/sub-01_task-rest_bold.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/sub-01/func/sub-01_task-rest_sbref.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/dsC/task-rest_bold.json +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/epi.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/epi2fmap_xfm.txt +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/field-coeff-tests.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/fmap2epi_xfm.txt +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/topup-coeff-fixed.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/topup-coeff.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/tests/data/topup-field.nii.gz +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/__init__.py +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/utils/tests/__init__.py +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/viz/__init__.py +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/__init__.py +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/apply/__init__.py +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/apply/tests/__init__.py +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/__init__.py +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/fit/tests/__init__.py +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/sdcflows/workflows/tests/__init__.py +0 -0
- {sdcflows-2.13.0 → sdcflows-2.13.2}/tox.ini +0 -0
|
@@ -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"
|
|
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
|
-
|
|
20
|
+
style:
|
|
21
21
|
runs-on: ubuntu-latest
|
|
22
22
|
steps:
|
|
23
23
|
- uses: actions/checkout@v4
|
|
24
|
-
- run: pipx run
|
|
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
|
-
|
|
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(
|
|
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[
|
|
68
|
+
sorted_authors = sorted(entries, key=lambda i: i['name'])
|
|
70
69
|
|
|
71
|
-
first_last = [
|
|
72
|
-
|
|
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 = {
|
|
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(
|
|
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=
|
|
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(
|
|
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(
|
|
121
|
+
cmd = [shutil.which('git-line-summary')]
|
|
129
122
|
if cmd == [None]:
|
|
130
|
-
cmd = [shutil.which(
|
|
123
|
+
cmd = [shutil.which('git-summary'), '--line']
|
|
131
124
|
if not lines and cmd[0]:
|
|
132
|
-
print(f
|
|
125
|
+
print(f'Running {" ".join(cmd)!r} on repo')
|
|
133
126
|
lines = sp.check_output(cmd).decode().splitlines()
|
|
134
|
-
lines = [
|
|
135
|
-
contrib_file.write_text(
|
|
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 [
|
|
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[
|
|
152
|
-
if not i[
|
|
153
|
-
i[
|
|
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(
|
|
166
|
-
@click.option(
|
|
167
|
-
@click.option(
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
@click.option(
|
|
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[
|
|
199
|
-
zenodo[
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
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
|
-
|
|
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[
|
|
222
|
-
creator.pop(
|
|
223
|
-
creator.pop(
|
|
224
|
-
if
|
|
225
|
-
creator[
|
|
226
|
-
elif isinstance(creator[
|
|
227
|
-
creator[
|
|
228
|
-
|
|
229
|
-
for creator in zenodo[
|
|
230
|
-
creator.pop(
|
|
231
|
-
creator[
|
|
232
|
-
creator.pop(
|
|
233
|
-
|
|
234
|
-
if
|
|
235
|
-
creator[
|
|
236
|
-
elif isinstance(creator[
|
|
237
|
-
creator[
|
|
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(
|
|
246
|
-
@click.option(
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
@click.option(
|
|
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
|
-
|
|
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[
|
|
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(
|
|
285
|
-
for a in _aslist(item.get(
|
|
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
|
-
|
|
268
|
+
', '.join(
|
|
291
269
|
[
|
|
292
|
-
|
|
293
|
-
for a in _aslist(author.get(
|
|
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
|
-
|
|
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(
|
|
283
|
+
print('Authors (%d):' % len(hits))
|
|
307
284
|
print(
|
|
308
|
-
|
|
309
|
-
%
|
|
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
|
-
|
|
319
|
-
%
|
|
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__ ==
|
|
295
|
+
if __name__ == '__main__':
|
|
326
296
|
""" Install entry-point """
|
|
327
297
|
cli()
|
|
@@ -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.
|
|
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'
|