diff --git a/.github/workflows/auto-release.yaml b/.github/workflows/auto-release.yaml index 6ae1d61..2aadeeb 100644 --- a/.github/workflows/auto-release.yaml +++ b/.github/workflows/auto-release.yaml @@ -33,4 +33,4 @@ jobs: "draft": false, "prerelease": false }' \ - "https://api.github.com/repos/nipype/pydra-#PACKAGE#/releases" \ No newline at end of file + "https://api.github.com/repos/nipype/pydra-tasks-#PACKAGE#/releases" \ No newline at end of file diff --git a/.github/workflows/ci-cd.yaml b/.github/workflows/ci-cd.yaml index 358f1a6..961284b 100644 --- a/.github/workflows/ci-cd.yaml +++ b/.github/workflows/ci-cd.yaml @@ -129,10 +129,10 @@ jobs: - name: Install task package run: | pip install "./related-packages/fileformats[test]" "./related-packages/fileformats-extras[test]" - python -c "import fileformats.medimage_afni as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" + python -c "import fileformats.vendor.afni.medimage as m; print(f'{m.__name__} {m.__version__} @ {m.__file__}')" - name: Test fileformats with pytest run: >- - pytest ./related-packages -sv --cov fileformats.medimage_afni + pytest ./related-packages -sv --cov fileformats.vendor.afni.medimage --cov fileformats.extras.medimage_afni --cov-report xml . deploy-fileformats: diff --git a/docs/conf.py b/docs/conf.py index e27c18b..e87c458 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -17,7 +17,7 @@ # -- Project information ----------------------------------------------------- -project = "pydra-afni" +project = "pydra-tasks-afni" copyright = "2020, Xihe Xie" author = "Xihe Xie" diff --git a/nipype-auto-conv/requirements.txt b/nipype-auto-conv/requirements.txt index 1ecfd7c..5cad649 100644 --- a/nipype-auto-conv/requirements.txt +++ b/nipype-auto-conv/requirements.txt @@ -6,6 +6,6 @@ PyYAML>=6.0 fileformats >=0.8 fileformats-medimage >=0.4 fileformats-datascience >= 0.1 -fileformats-medimage-afni +fileformats-vendor-afni traits nipype2pydra \ No newline at end of file diff --git a/nipype-auto-conv/specs/interfaces/afn_ito_nifti.yaml b/nipype-auto-conv/specs/interfaces/afn_ito_nifti.yaml index abee381..e21fa93 100644 --- a/nipype-auto-conv/specs/interfaces/afn_ito_nifti.yaml +++ b/nipype-auto-conv/specs/interfaces/afn_ito_nifti.yaml @@ -36,7 +36,7 @@ inputs: # from the nipype interface, but you may want to be more specific, particularly # for file types, where specifying the format also specifies the file that will be # passed to the field in the automatically generated unittests. - in_file: fileformats.medimage_afni.ThreeD + in_file: fileformats.vendor.afni.medimage.ThreeD # type=file|default=: input file to 3dAFNItoNIFTI callable_defaults: # dict[str, str] - names of methods/callable classes defined in the adjacent `*_callables.py` diff --git a/nipype-auto-conv/specs/interfaces/calc.yaml b/nipype-auto-conv/specs/interfaces/calc.yaml index 2f8ef83..71d610a 100644 --- a/nipype-auto-conv/specs/interfaces/calc.yaml +++ b/nipype-auto-conv/specs/interfaces/calc.yaml @@ -72,7 +72,7 @@ outputs: # from the nipype interface, but you may want to be more specific, particularly # for file types, where specifying the format also specifies the file that will be # passed to the field in the automatically generated unittests. - out_file: fileformats.medimage_afni.All1 + out_file: fileformats.vendor.afni.medimage.All1 # type=file: output file # type=file|default=: output image file name callables: diff --git a/nipype-auto-conv/specs/interfaces/cat.yaml b/nipype-auto-conv/specs/interfaces/cat.yaml index e8b49ae..cf1cf87 100644 --- a/nipype-auto-conv/specs/interfaces/cat.yaml +++ b/nipype-auto-conv/specs/interfaces/cat.yaml @@ -56,7 +56,7 @@ outputs: # from the nipype interface, but you may want to be more specific, particularly # for file types, where specifying the format also specifies the file that will be # passed to the field in the automatically generated unittests. - out_file: fileformats.medimage_afni.OneD + out_file: fileformats.vendor.afni.medimage.OneD # type=file: output file # type=file|default='catout.1d': output (concatenated) file name callables: diff --git a/nipype-auto-conv/specs/interfaces/convert_dset.yaml b/nipype-auto-conv/specs/interfaces/convert_dset.yaml index 764d544..0335616 100644 --- a/nipype-auto-conv/specs/interfaces/convert_dset.yaml +++ b/nipype-auto-conv/specs/interfaces/convert_dset.yaml @@ -54,7 +54,7 @@ outputs: # from the nipype interface, but you may want to be more specific, particularly # for file types, where specifying the format also specifies the file that will be # passed to the field in the automatically generated unittests. - out_file: fileformats.medimage_afni.Dset + out_file: fileformats.vendor.afni.medimage.Dset # type=file: output file # type=file|default=: output file for ConvertDset callables: diff --git a/nipype-auto-conv/specs/interfaces/deconvolve.yaml b/nipype-auto-conv/specs/interfaces/deconvolve.yaml index 7976fc5..4f7c4e7 100644 --- a/nipype-auto-conv/specs/interfaces/deconvolve.yaml +++ b/nipype-auto-conv/specs/interfaces/deconvolve.yaml @@ -75,7 +75,7 @@ outputs: # type=file|default=: output statistics file reml_script: generic/file # type=file: automatically generated script to run 3dREMLfit - x1D: fileformats.medimage_afni.OneD + x1D: fileformats.vendor.afni.medimage.OneD # type=file: save out X matrix # type=file|default=: specify name for saved X matrix callables: diff --git a/nipype-auto-conv/specs/interfaces/eval.yaml b/nipype-auto-conv/specs/interfaces/eval.yaml index ad97dfc..31ee91e 100644 --- a/nipype-auto-conv/specs/interfaces/eval.yaml +++ b/nipype-auto-conv/specs/interfaces/eval.yaml @@ -39,7 +39,7 @@ inputs: # from the nipype interface, but you may want to be more specific, particularly # for file types, where specifying the format also specifies the file that will be # passed to the field in the automatically generated unittests. - in_file_a: fileformats.medimage_afni.OneD + in_file_a: fileformats.vendor.afni.medimage.OneD # type=file|default=: input file to 1deval in_file_b: generic/file # type=file|default=: operand file to 1deval @@ -63,7 +63,7 @@ outputs: # from the nipype interface, but you may want to be more specific, particularly # for file types, where specifying the format also specifies the file that will be # passed to the field in the automatically generated unittests. - out_file: fileformats.medimage_afni.OneD + out_file: fileformats.vendor.afni.medimage.OneD # type=file: output file # type=file|default=: output image file name callables: diff --git a/nipype-auto-conv/specs/interfaces/notes.yaml b/nipype-auto-conv/specs/interfaces/notes.yaml index 131e000..0ad635e 100644 --- a/nipype-auto-conv/specs/interfaces/notes.yaml +++ b/nipype-auto-conv/specs/interfaces/notes.yaml @@ -36,7 +36,7 @@ inputs: # from the nipype interface, but you may want to be more specific, particularly # for file types, where specifying the format also specifies the file that will be # passed to the field in the automatically generated unittests. - in_file: fileformats.medimage_afni.Head + in_file: fileformats.vendor.afni.medimage.Head # type=file|default=: input file to 3dNotes callable_defaults: # dict[str, str] - names of methods/callable classes defined in the adjacent `*_callables.py` diff --git a/nipype-auto-conv/specs/interfaces/one_d_tool_py.yaml b/nipype-auto-conv/specs/interfaces/one_d_tool_py.yaml index 50112be..1d29bcf 100644 --- a/nipype-auto-conv/specs/interfaces/one_d_tool_py.yaml +++ b/nipype-auto-conv/specs/interfaces/one_d_tool_py.yaml @@ -31,7 +31,7 @@ inputs: # from the nipype interface, but you may want to be more specific, particularly # for file types, where specifying the format also specifies the file that will be # passed to the field in the automatically generated unittests. - in_file: fileformats.medimage_afni.OneD + in_file: fileformats.vendor.afni.medimage.OneD # type=file|default=: input file to OneDTool show_cormat_warnings: generic/file # type=file|default=: Write cormat warnings to a file diff --git a/nipype-auto-conv/specs/interfaces/remlfit.yaml b/nipype-auto-conv/specs/interfaces/remlfit.yaml index 8132a64..b12c4c9 100644 --- a/nipype-auto-conv/specs/interfaces/remlfit.yaml +++ b/nipype-auto-conv/specs/interfaces/remlfit.yaml @@ -51,7 +51,7 @@ inputs: # type=file|default=: filename of 3D mask dataset; only data time series from within the mask will be analyzed; results for voxels outside the mask will be set to zero. matim: generic/file # type=file|default=: read a standard file as the matrix. You can use only Col as a name in GLTs with these nonstandard matrix input methods, since the other names come from the 'matrix' file. These mutually exclusive options are ignored if 'matrix' is used. - matrix: fileformats.medimage_afni.OneD + matrix: fileformats.vendor.afni.medimage.OneD # type=file|default=: the design matrix file, which should have been output from Deconvolve via the 'x1D' option slibase: generic/file+list-of # type=inputmultiobject|default=[]: similar to 'addbase' in concept, BUT each specified file must have an integer multiple of the number of slices in the input dataset(s); then, separate regression matrices are generated for each slice, with the first column of the file appended to the matrix for the first slice of the dataset, the second column of the file appended to the matrix for the first slice of the dataset, and so on. Intended to help model physiological noise in FMRI, or other effects you want to regress out that might change significantly in the inter-slice time intervals. This will slow the program down, and make it use a lot more memory (to hold all the matrix stuff). diff --git a/nipype-auto-conv/specs/interfaces/retroicor.yaml b/nipype-auto-conv/specs/interfaces/retroicor.yaml index b34c7f5..4adb4d1 100644 --- a/nipype-auto-conv/specs/interfaces/retroicor.yaml +++ b/nipype-auto-conv/specs/interfaces/retroicor.yaml @@ -58,7 +58,7 @@ inputs: # type=file|default=: Filename for 1D cardiac phase output in_file: medimage/nifti1 # type=file|default=: input file to 3dretroicor - resp: fileformats.medimage_afni.OneD + resp: fileformats.vendor.afni.medimage.OneD # type=file|default=: 1D respiratory waveform data for correction respphase: generic/file # type=file|default=: Filename for 1D resp phase output diff --git a/nipype-auto-conv/specs/interfaces/volreg.yaml b/nipype-auto-conv/specs/interfaces/volreg.yaml index ed10414..55ddf0a 100644 --- a/nipype-auto-conv/specs/interfaces/volreg.yaml +++ b/nipype-auto-conv/specs/interfaces/volreg.yaml @@ -74,7 +74,7 @@ outputs: md1d_file: generic/file # type=file: max displacement info file # type=file|default=: max displacement output file - oned_file: fileformats.medimage_afni.OneD + oned_file: fileformats.vendor.afni.medimage.OneD # type=file: movement parameters info file # type=file|default=: 1D movement parameters output file oned_matrix_save: generic/file diff --git a/pydra/tasks/afni/__init__.py b/pydra/tasks/afni/__init__.py index 89ab108..f5c8c9a 100644 --- a/pydra/tasks/afni/__init__.py +++ b/pydra/tasks/afni/__init__.py @@ -15,7 +15,7 @@ from ._version import __version__ except ImportError: raise RuntimeError( - "pydra-afni has not been properly installed, please run " + "pydra-tasks-afni has not been properly installed, please run " f"`pip install -e {str(pkg_path)}` to install a development version" ) if "nipype" not in __version__: diff --git a/pydra/tasks/afni/v25/model/deconvolve.py b/pydra/tasks/afni/v25/model/deconvolve.py index d331ab0..170b5f9 100644 --- a/pydra/tasks/afni/v25/model/deconvolve.py +++ b/pydra/tasks/afni/v25/model/deconvolve.py @@ -1,7 +1,7 @@ import attrs from fileformats.generic import File from fileformats.medimage import Nifti1 -from fileformats.medimage_afni import OneD +from fileformats.vendor.afni.medimage import OneD import logging from pydra.tasks.afni.v25.nipype_ports.utils.filemanip import fname_presuffix import os @@ -132,7 +132,7 @@ class Deconvolve(shell.Task["Deconvolve.Outputs"]): >>> from fileformats.generic import File >>> from fileformats.medimage import Nifti1 - >>> from fileformats.medimage_afni import OneD + >>> from fileformats.vendor.afni.medimage import OneD >>> from pathlib import Path >>> from pydra.tasks.afni.v25.model.deconvolve import Deconvolve @@ -312,7 +312,7 @@ class Deconvolve(shell.Task["Deconvolve.Outputs"]): gltsym: list[str] = shell.arg( help="general linear tests (i.e., contrasts) using symbolic conventions (e.g., '+Label1 -Label2')", position=-2, - formatter="gltsym_formatter", + formatter=gltsym_formatter, ) glt_label: list[ty.Any] = shell.arg( help="general linear test (i.e., contrast) labels", diff --git a/pydra/tasks/afni/v25/model/remlfit.py b/pydra/tasks/afni/v25/model/remlfit.py index ff982f4..2f0b2f2 100644 --- a/pydra/tasks/afni/v25/model/remlfit.py +++ b/pydra/tasks/afni/v25/model/remlfit.py @@ -1,7 +1,7 @@ import attrs from fileformats.generic import File from fileformats.medimage import Nifti1 -from fileformats.medimage_afni import OneD +from fileformats.vendor.afni.medimage import OneD import logging import os from pathlib import Path @@ -138,7 +138,7 @@ class Remlfit(shell.Task["Remlfit.Outputs"]): >>> from fileformats.generic import File >>> from fileformats.medimage import Nifti1 - >>> from fileformats.medimage_afni import OneD + >>> from fileformats.vendor.afni.medimage import OneD >>> from pathlib import Path >>> from pydra.tasks.afni.v25.model.remlfit import Remlfit diff --git a/pydra/tasks/afni/v25/model/tests/test_remlfit.py b/pydra/tasks/afni/v25/model/tests/test_remlfit.py index a57cc86..2584911 100644 --- a/pydra/tasks/afni/v25/model/tests/test_remlfit.py +++ b/pydra/tasks/afni/v25/model/tests/test_remlfit.py @@ -1,6 +1,6 @@ from fileformats.generic import File from fileformats.medimage import Nifti1 -from fileformats.medimage_afni import OneD +from fileformats.vendor.afni.medimage import OneD import logging from nipype2pydra.testing import PassAfterTimeoutWorker from pydra.tasks.afni.v25.model.remlfit import Remlfit diff --git a/pydra/tasks/afni/v25/preprocess/qwarp.py b/pydra/tasks/afni/v25/preprocess/qwarp.py index 7884952..77a5c68 100644 --- a/pydra/tasks/afni/v25/preprocess/qwarp.py +++ b/pydra/tasks/afni/v25/preprocess/qwarp.py @@ -294,7 +294,7 @@ class Qwarp(shell.Task["Qwarp.Outputs"]): allineate_opts: str = shell.arg( help="add extra options to the 3dAllineate command to be run by 3dQwarp.", requires=["allineate"], - formatter="allineate_opts_formatter", + formatter=allineate_opts_formatter, ) nowarp: bool = shell.arg(help="Do not save the _WARP file.", argstr="-nowarp") iwarp: bool = shell.arg( diff --git a/pydra/tasks/afni/v25/preprocess/qwarp_plus_minus.py b/pydra/tasks/afni/v25/preprocess/qwarp_plus_minus.py index 8c86cad..8063933 100644 --- a/pydra/tasks/afni/v25/preprocess/qwarp_plus_minus.py +++ b/pydra/tasks/afni/v25/preprocess/qwarp_plus_minus.py @@ -237,7 +237,7 @@ class QwarpPlusMinus(shell.Task["QwarpPlusMinus.Outputs"]): allineate_opts: str = shell.arg( help="add extra options to the 3dAllineate command to be run by 3dQwarp.", requires=["allineate"], - formatter="allineate_opts_formatter", + formatter=allineate_opts_formatter, ) nowarp: bool = shell.arg(help="Do not save the _WARP file.", argstr="-nowarp") iwarp: bool = shell.arg( diff --git a/pydra/tasks/afni/v25/preprocess/retroicor.py b/pydra/tasks/afni/v25/preprocess/retroicor.py index 46160aa..06830c6 100644 --- a/pydra/tasks/afni/v25/preprocess/retroicor.py +++ b/pydra/tasks/afni/v25/preprocess/retroicor.py @@ -1,7 +1,7 @@ import attrs from fileformats.generic import File from fileformats.medimage import Nifti1 -from fileformats.medimage_afni import OneD +from fileformats.vendor.afni.medimage import OneD import logging from pathlib import Path from pathlib import Path @@ -35,7 +35,7 @@ class Retroicor(shell.Task["Retroicor.Outputs"]): >>> from fileformats.generic import File >>> from fileformats.medimage import Nifti1 - >>> from fileformats.medimage_afni import OneD + >>> from fileformats.vendor.afni.medimage import OneD >>> from pathlib import Path >>> from pydra.tasks.afni.v25.preprocess.retroicor import Retroicor @@ -53,7 +53,7 @@ class Retroicor(shell.Task["Retroicor.Outputs"]): executable = "3dretroicor" in_file: Nifti1 = shell.arg( - help="input file to 3dretroicor", position=-1, formatter="in_file_formatter" + help="input file to 3dretroicor", position=-1, formatter=in_file_formatter ) card: File = shell.arg( help="1D cardiac data file for cardiac correction", diff --git a/pydra/tasks/afni/v25/preprocess/roi_stats.py b/pydra/tasks/afni/v25/preprocess/roi_stats.py index b91fc19..a4ce8da 100644 --- a/pydra/tasks/afni/v25/preprocess/roi_stats.py +++ b/pydra/tasks/afni/v25/preprocess/roi_stats.py @@ -102,7 +102,7 @@ class ROIStats(shell.Task["ROIStats.Outputs"]): ) stat: MultiInputObj = shell.arg( help="Statistics to compute. Options include:\n\n * mean = Compute the mean using only non_zero voxels.\n Implies the opposite for the mean computed\n by default.\n * median = Compute the median of nonzero voxels\n * mode = Compute the mode of nonzero voxels.\n (integral valued sets only)\n * minmax = Compute the min/max of nonzero voxels\n * sum = Compute the sum using only nonzero voxels.\n * voxels = Compute the number of nonzero voxels\n * sigma = Compute the standard deviation of nonzero\n voxels\n\nStatistics that include zero-valued voxels:\n\n * zerominmax = Compute the min/max of all voxels.\n * zerosigma = Compute the standard deviation of all\n voxels.\n * zeromedian = Compute the median of all voxels.\n * zeromode = Compute the mode of all voxels.\n * summary = Only output a summary line with the grand\n mean across all briks in the input dataset.\n This option cannot be used with nomeanout.\n\nMore that one option can be specified.", - formatter="stat_formatter", + formatter=stat_formatter, ) class Outputs(shell.Outputs): diff --git a/pydra/tasks/afni/v25/preprocess/t_corr_map.py b/pydra/tasks/afni/v25/preprocess/t_corr_map.py index 5176c5b..b862133 100644 --- a/pydra/tasks/afni/v25/preprocess/t_corr_map.py +++ b/pydra/tasks/afni/v25/preprocess/t_corr_map.py @@ -216,7 +216,7 @@ class TCorrMap(shell.Task["TCorrMap.Outputs"]): help="", argstr="-Sexpr {sum_expr[0]} {sum_expr[1]}" ) histogram_bin_numbers: int = shell.arg(help="") - histogram: Path = shell.arg(help="", formatter="histogram_formatter") + histogram: Path = shell.arg(help="", formatter=histogram_formatter) num_threads: int = shell.arg(help="set number of threads", default=1) outputtype: ty.Any = shell.arg(help="AFNI output filetype") out_file: Path = shell.arg( diff --git a/pydra/tasks/afni/v25/preprocess/t_shift.py b/pydra/tasks/afni/v25/preprocess/t_shift.py index f6d8b9a..7140f0f 100644 --- a/pydra/tasks/afni/v25/preprocess/t_shift.py +++ b/pydra/tasks/afni/v25/preprocess/t_shift.py @@ -140,11 +140,11 @@ class TShift(shell.Task["TShift.Outputs"]): ) tpattern: ty.Any | None = shell.arg( help="use specified slice time pattern rather than one in header", - formatter="tpattern_formatter", + formatter=tpattern_formatter, ) slice_timing: ty.Any | None = shell.arg( help="time offsets from the volume acquisition onset for each slice", - formatter="slice_timing_formatter", + formatter=slice_timing_formatter, ) slice_encoding_direction: ty.Any = shell.arg( help="Direction in which slice_timing is specified (default: k). If negative,slice_timing is defined in reverse order, that is, the first entry corresponds to the slice with the largest index, and the final entry corresponds to slice index zero. Only in effect when slice_timing is passed as list, not when it is passed as file.", diff --git a/pydra/tasks/afni/v25/preprocess/tests/test_retroicor.py b/pydra/tasks/afni/v25/preprocess/tests/test_retroicor.py index 407d59e..3500173 100644 --- a/pydra/tasks/afni/v25/preprocess/tests/test_retroicor.py +++ b/pydra/tasks/afni/v25/preprocess/tests/test_retroicor.py @@ -1,6 +1,6 @@ from fileformats.generic import File from fileformats.medimage import Nifti1 -from fileformats.medimage_afni import OneD +from fileformats.vendor.afni.medimage import OneD import logging from nipype2pydra.testing import PassAfterTimeoutWorker from pydra.tasks.afni.v25.preprocess.retroicor import Retroicor diff --git a/pydra/tasks/afni/v25/preprocess/volreg.py b/pydra/tasks/afni/v25/preprocess/volreg.py index b61a513..6052e99 100644 --- a/pydra/tasks/afni/v25/preprocess/volreg.py +++ b/pydra/tasks/afni/v25/preprocess/volreg.py @@ -63,7 +63,7 @@ class Volreg(shell.Task["Volreg.Outputs"]): ) in_weight_volume: ty.Any = shell.arg( help="weights for each voxel specified by a file with an optional volume number (defaults to 0)", - formatter="in_weight_volume_formatter", + formatter=in_weight_volume_formatter, ) basefile: Nifti1 = shell.arg( help="base file for registration", argstr="-base {basefile}", position=-6 diff --git a/pydra/tasks/afni/v25/utils/afn_ito_nifti.py b/pydra/tasks/afni/v25/utils/afn_ito_nifti.py index de29fde..11410a2 100644 --- a/pydra/tasks/afni/v25/utils/afn_ito_nifti.py +++ b/pydra/tasks/afni/v25/utils/afn_ito_nifti.py @@ -1,4 +1,4 @@ -from fileformats.medimage_afni import ThreeD +from fileformats.vendor.afni.medimage import ThreeD import logging import os from pathlib import Path @@ -20,7 +20,7 @@ class AFNItoNIFTI(shell.Task["AFNItoNIFTI.Outputs"]): Examples ------- - >>> from fileformats.medimage_afni import ThreeD + >>> from fileformats.vendor.afni.medimage import ThreeD >>> from pathlib import Path >>> from pydra.tasks.afni.v25.utils.afn_ito_nifti import AFNItoNIFTI diff --git a/pydra/tasks/afni/v25/utils/bucket.py b/pydra/tasks/afni/v25/utils/bucket.py index 57fc990..9940afc 100644 --- a/pydra/tasks/afni/v25/utils/bucket.py +++ b/pydra/tasks/afni/v25/utils/bucket.py @@ -43,7 +43,7 @@ class Bucket(shell.Task["Bucket.Outputs"]): in_file: list[ty.Any] = shell.arg( help="List of tuples of input datasets and subbrick selection strings\nas described in more detail in the following afni help string\nInput dataset specified using one of these forms:\n``prefix+view``, ``prefix+view.HEAD``, or ``prefix+view.BRIK``.\nYou can also add a sub-brick selection list after the end of the\ndataset name. This allows only a subset of the sub-bricks to be\nincluded into the output (by default, all of the input dataset\nis copied into the output). A sub-brick selection list looks like\none of the following forms::\n\n fred+orig[5] ==> use only sub-brick #5\n fred+orig[5,9,17] ==> use #5, #9, and #17\n fred+orig[5..8] or [5-8] ==> use #5, #6, #7, and #8\n fred+orig[5..13(2)] or [5-13(2)] ==> use #5, #7, #9, #11, and #13\n\nSub-brick indexes start at 0. You can use the character '$'\nto indicate the last sub-brick in a dataset; for example, you\ncan select every third sub-brick by using the selection list\n``fred+orig[0..$(3)]``\nN.B.: The sub-bricks are output in the order specified, which may\nnot be the order in the original datasets. For example, using\n``fred+orig[0..$(2),1..$(2)]``\nwill cause the sub-bricks in fred+orig to be output into the\nnew dataset in an interleaved fashion. Using ``fred+orig[$..0]``\nwill reverse the order of the sub-bricks in the output.\nN.B.: Bucket datasets have multiple sub-bricks, but do NOT have\na time dimension. You can input sub-bricks from a 3D+time dataset\ninto a bucket dataset. You can use the '3dinfo' program to see\nhow many sub-bricks a 3D+time or a bucket dataset contains.\nN.B.: In non-bucket functional datasets (like the 'fico' datasets\noutput by FIM, or the 'fitt' datasets output by 3dttest), sub-brick\n``[0]`` is the 'intensity' and sub-brick [1] is the statistical parameter\nused as a threshold. Thus, to create a bucket dataset using the\nintensity from dataset A and the threshold from dataset B, and\ncalling the output dataset C, you would type::\n\n 3dbucket -prefix C -fbuc 'A+orig[0]' -fbuc 'B+orig[1]\n\n", position=-1, - formatter="in_file_formatter", + formatter=in_file_formatter, ) num_threads: int = shell.arg(help="set number of threads", default=1) outputtype: ty.Any = shell.arg(help="AFNI output filetype") diff --git a/pydra/tasks/afni/v25/utils/calc.py b/pydra/tasks/afni/v25/utils/calc.py index e047034..c512c05 100644 --- a/pydra/tasks/afni/v25/utils/calc.py +++ b/pydra/tasks/afni/v25/utils/calc.py @@ -66,7 +66,7 @@ class Calc(shell.Task["Calc.Outputs"]): executable = "3dcalc" in_file_a: Nifti1 = shell.arg( - help="input file to 3dcalc", formatter="in_file_a_formatter", position=1 + help="input file to 3dcalc", formatter=in_file_a_formatter, position=1 ) in_file_b: File = shell.arg( help="operand file to 3dcalc", argstr="-b {in_file_b}", position=2 diff --git a/pydra/tasks/afni/v25/utils/cat.py b/pydra/tasks/afni/v25/utils/cat.py index 6a9b121..1e5011e 100644 --- a/pydra/tasks/afni/v25/utils/cat.py +++ b/pydra/tasks/afni/v25/utils/cat.py @@ -1,6 +1,6 @@ import attrs from fileformats.generic import File -from fileformats.medimage_afni import OneD +from fileformats.vendor.afni.medimage import OneD import logging from pydra.tasks.afni.v25.nipype_ports.utils.filemanip import split_filename from pathlib import Path @@ -44,7 +44,7 @@ class Cat(shell.Task["Cat.Outputs"]): ------- >>> from fileformats.generic import File - >>> from fileformats.medimage_afni import OneD + >>> from fileformats.vendor.afni.medimage import OneD >>> from pathlib import Path >>> from pydra.tasks.afni.v25.utils.cat import Cat diff --git a/pydra/tasks/afni/v25/utils/cat_matvec.py b/pydra/tasks/afni/v25/utils/cat_matvec.py index 37da035..3c77a78 100644 --- a/pydra/tasks/afni/v25/utils/cat_matvec.py +++ b/pydra/tasks/afni/v25/utils/cat_matvec.py @@ -46,7 +46,7 @@ class CatMatvec(shell.Task["CatMatvec.Outputs"]): in_file: list[ty.Any] = shell.arg( help="list of tuples of mfiles and associated opkeys", position=-2, - formatter="in_file_formatter", + formatter=in_file_formatter, ) matrix: bool = shell.arg( help="indicates that the resulting matrix willbe written to outfile in the 'MATRIX(...)' format (FORM 3).This feature could be used, with clever scripting, to inputa matrix directly on the command line to program 3dWarp.", diff --git a/pydra/tasks/afni/v25/utils/convert_dset.py b/pydra/tasks/afni/v25/utils/convert_dset.py index 8955df0..4155a0f 100644 --- a/pydra/tasks/afni/v25/utils/convert_dset.py +++ b/pydra/tasks/afni/v25/utils/convert_dset.py @@ -1,6 +1,6 @@ import attrs from fileformats.medimage import Gifti -from fileformats.medimage_afni import Dset +from fileformats.vendor.afni.medimage import Dset import logging import os.path as op from pathlib import Path @@ -34,7 +34,7 @@ class ConvertDset(shell.Task["ConvertDset.Outputs"]): ------- >>> from fileformats.medimage import Gifti - >>> from fileformats.medimage_afni import Dset + >>> from fileformats.vendor.afni.medimage import Dset >>> from pathlib import Path >>> from pydra.tasks.afni.v25.utils.convert_dset import ConvertDset diff --git a/pydra/tasks/afni/v25/utils/eval.py b/pydra/tasks/afni/v25/utils/eval.py index ea6aec1..cfbdbaa 100644 --- a/pydra/tasks/afni/v25/utils/eval.py +++ b/pydra/tasks/afni/v25/utils/eval.py @@ -1,6 +1,6 @@ import attrs from fileformats.generic import File -from fileformats.medimage_afni import OneD +from fileformats.vendor.afni.medimage import OneD import logging from pathlib import Path from pathlib import Path @@ -37,7 +37,7 @@ class Eval(shell.Task["Eval.Outputs"]): ------- >>> from fileformats.generic import File - >>> from fileformats.medimage_afni import OneD + >>> from fileformats.vendor.afni.medimage import OneD >>> from pathlib import Path >>> from pydra.tasks.afni.v25.utils.eval import Eval @@ -56,7 +56,7 @@ class Eval(shell.Task["Eval.Outputs"]): executable = "1deval" in_file_a: OneD = shell.arg( - help="input file to 1deval", formatter="in_file_a_formatter", position=1 + help="input file to 1deval", formatter=in_file_a_formatter, position=1 ) in_file_b: File = shell.arg( help="operand file to 1deval", argstr="-b {in_file_b}", position=2 diff --git a/pydra/tasks/afni/v25/utils/fwh_mx.py b/pydra/tasks/afni/v25/utils/fwh_mx.py index 7502674..bcd086b 100644 --- a/pydra/tasks/afni/v25/utils/fwh_mx.py +++ b/pydra/tasks/afni/v25/utils/fwh_mx.py @@ -149,7 +149,7 @@ class FWHMx(shell.Task["FWHMx.Outputs"]): ) detrend: ty.Any | None = shell.arg( help="instead of demed (0th order detrending), detrend to the specified order. If order is not given, the program picks q=NT/30. -detrend disables -demed, and includes -unif.", - formatter="detrend_formatter", + formatter=detrend_formatter, default=False, ) demed: bool = shell.arg( @@ -176,7 +176,7 @@ class FWHMx(shell.Task["FWHMx.Outputs"]): ) acf: ty.Any = shell.arg( help="computes the spatial autocorrelation", - formatter="acf_formatter", + formatter=acf_formatter, default=False, ) diff --git a/pydra/tasks/afni/v25/utils/local_bistat.py b/pydra/tasks/afni/v25/utils/local_bistat.py index 5672ecd..d55766c 100644 --- a/pydra/tasks/afni/v25/utils/local_bistat.py +++ b/pydra/tasks/afni/v25/utils/local_bistat.py @@ -64,7 +64,7 @@ class LocalBistat(shell.Task["LocalBistat.Outputs"]): ) neighborhood: ty.Any = shell.arg( help="The region around each voxel that will be extracted for the statistics calculation. Possible regions are: 'SPHERE', 'RHDD' (rhombic dodecahedron), 'TOHD' (truncated octahedron) with a given radius in mm or 'RECT' (rectangular block) with dimensions to specify in mm.", - formatter="neighborhood_formatter", + formatter=neighborhood_formatter, ) stat: MultiInputObj = shell.arg( help="Statistics to compute. Possible names are:\n\n * pearson = Pearson correlation coefficient\n * spearman = Spearman correlation coefficient\n * quadrant = Quadrant correlation coefficient\n * mutinfo = Mutual Information\n * normuti = Normalized Mutual Information\n * jointent = Joint entropy\n * hellinger= Hellinger metric\n * crU = Correlation ratio (Unsymmetric)\n * crM = Correlation ratio (symmetrized by Multiplication)\n * crA = Correlation ratio (symmetrized by Addition)\n * L2slope = slope of least-squares (L2) linear regression of\n the data from dataset1 vs. the dataset2\n (i.e., d2 = a + b*d1 ==> this is 'b')\n * L1slope = slope of least-absolute-sum (L1) linear\n regression of the data from dataset1 vs.\n the dataset2\n * num = number of the values in the region:\n with the use of -mask or -automask,\n the size of the region around any given\n voxel will vary; this option lets you\n map that size.\n * ALL = all of the above, in that order\n\nMore than one option can be used.", diff --git a/pydra/tasks/afni/v25/utils/localstat.py b/pydra/tasks/afni/v25/utils/localstat.py index 662e079..378b526 100644 --- a/pydra/tasks/afni/v25/utils/localstat.py +++ b/pydra/tasks/afni/v25/utils/localstat.py @@ -81,11 +81,11 @@ class Localstat(shell.Task["Localstat.Outputs"]): in_file: Nifti1 = shell.arg(help="input dataset", argstr="{in_file}", position=-1) neighborhood: ty.Any = shell.arg( help="The region around each voxel that will be extracted for the statistics calculation. Possible regions are: 'SPHERE', 'RHDD' (rhombic dodecahedron), 'TOHD' (truncated octahedron) with a given radius in mm or 'RECT' (rectangular block) with dimensions to specify in mm.", - formatter="neighborhood_formatter", + formatter=neighborhood_formatter, ) stat: MultiInputObj = shell.arg( help="statistics to compute. Possible names are:\n\n * mean = average of the values\n * stdev = standard deviation\n * var = variance (stdev\\*stdev)\n * cvar = coefficient of variation = stdev/fabs(mean)\n * median = median of the values\n * MAD = median absolute deviation\n * min = minimum\n * max = maximum\n * absmax = maximum of the absolute values\n * num = number of the values in the region:\n with the use of -mask or -automask,\n the size of the region around any given\n voxel will vary; this option lets you\n map that size. It may be useful if you\n plan to compute a t-statistic (say) from\n the mean and stdev outputs.\n * sum = sum of the values in the region\n * FWHM = compute (like 3dFWHM) image smoothness\n inside each voxel's neighborhood. Results\n are in 3 sub-bricks: FWHMx, FHWMy, and FWHMz.\n Places where an output is -1 are locations\n where the FWHM value could not be computed\n (e.g., outside the mask).\n * FWHMbar= Compute just the average of the 3 FWHM values\n (normally would NOT do this with FWHM also).\n * perc:P0:P1:Pstep =\n Compute percentiles between P0 and P1 with a\n step of Pstep.\n Default P1 is equal to P0 and default P2 = 1\n * rank = rank of the voxel's intensity\n * frank = rank / number of voxels in neighborhood\n * P2skew = Pearson's second skewness coefficient\n 3 \\* (mean - median) / stdev\n * ALL = all of the above, in that order\n (except for FWHMbar and perc).\n * mMP2s = Exactly the same output as:\n median, MAD, P2skew,\n but a little faster\n * mmMP2s = Exactly the same output as:\n mean, median, MAD, P2skew\n\nMore than one option can be used.", - formatter="stat_formatter", + formatter=stat_formatter, ) mask_file: File = shell.arg( help="Mask image file name. Voxels NOT in the mask will not be used in the neighborhood of any voxel. Also, a voxel NOT in the mask will have its statistic(s) computed as zero (0) unless the parameter 'nonmask' is set to true.", @@ -100,11 +100,11 @@ class Localstat(shell.Task["Localstat.Outputs"]): ) reduce_grid: ty.Any | None = shell.arg( help="Compute output on a grid that is reduced by the specified factors. If a single value is passed, output is resampled to the specified isotropic grid. Otherwise, the 3 inputs describe the reduction in the X, Y, and Z directions. This option speeds up computations at the expense of resolution. It should only be used when the nbhd is quite large with respect to the input's resolution, and the resultant stats are expected to be smooth.", - formatter="reduce_grid_formatter", + formatter=reduce_grid_formatter, ) reduce_restore_grid: ty.Any | None = shell.arg( help="Like reduce_grid, but also resample output back to input grid.", - formatter="reduce_restore_grid_formatter", + formatter=reduce_restore_grid_formatter, ) reduce_max_vox: float | None = shell.arg( help="Like reduce_restore_grid, but automatically set Rx Ry Rz sothat the computation grid is at a resolution of nbhd/MAX_VOXvoxels.", diff --git a/pydra/tasks/afni/v25/utils/notes.py b/pydra/tasks/afni/v25/utils/notes.py index ed4963d..285a55f 100644 --- a/pydra/tasks/afni/v25/utils/notes.py +++ b/pydra/tasks/afni/v25/utils/notes.py @@ -1,6 +1,6 @@ import attrs from fileformats.generic import File -from fileformats.medimage_afni import Head +from fileformats.vendor.afni.medimage import Head import logging import os from pathlib import Path @@ -34,7 +34,7 @@ class Notes(shell.Task["Notes.Outputs"]): ------- >>> from fileformats.generic import File - >>> from fileformats.medimage_afni import Head + >>> from fileformats.vendor.afni.medimage import Head >>> from pathlib import Path >>> from pydra.tasks.afni.v25.utils.notes import Notes diff --git a/pydra/tasks/afni/v25/utils/nwarp_cat.py b/pydra/tasks/afni/v25/utils/nwarp_cat.py index b44a13b..d17c88d 100644 --- a/pydra/tasks/afni/v25/utils/nwarp_cat.py +++ b/pydra/tasks/afni/v25/utils/nwarp_cat.py @@ -60,7 +60,7 @@ class NwarpCat(shell.Task["NwarpCat.Outputs"]): in_files: list[ty.Any] = shell.arg( help="list of tuples of 3D warps and associated functions", position=-1, - formatter="in_files_formatter", + formatter=in_files_formatter, ) space: ty.Any = shell.arg( help="string to attach to the output dataset as its atlas space marker.", diff --git a/pydra/tasks/afni/v25/utils/one_d_tool_py.py b/pydra/tasks/afni/v25/utils/one_d_tool_py.py index 87479c7..323d331 100644 --- a/pydra/tasks/afni/v25/utils/one_d_tool_py.py +++ b/pydra/tasks/afni/v25/utils/one_d_tool_py.py @@ -1,6 +1,6 @@ import attrs from fileformats.generic import File -from fileformats.medimage_afni import OneD +from fileformats.vendor.afni.medimage import OneD import logging import os from pathlib import Path @@ -42,7 +42,7 @@ class OneDToolPy(shell.Task["OneDToolPy.Outputs"]): ------- >>> from fileformats.generic import File - >>> from fileformats.medimage_afni import OneD + >>> from fileformats.vendor.afni.medimage import OneD >>> from pathlib import Path >>> from pydra.tasks.afni.v25.utils.one_d_tool_py import OneDToolPy diff --git a/pydra/tasks/afni/v25/utils/re_ho.py b/pydra/tasks/afni/v25/utils/re_ho.py index ae2d0a0..04fae25 100644 --- a/pydra/tasks/afni/v25/utils/re_ho.py +++ b/pydra/tasks/afni/v25/utils/re_ho.py @@ -78,7 +78,7 @@ class ReHo(shell.Task["ReHo.Outputs"]): ) neighborhood: ty.Any | None = shell.arg( help="\nvoxels in neighborhood. can be:\n``faces`` (for voxel and 6 facewise neighbors, only),\n``edges`` (for voxel and 18 face- and edge-wise neighbors),\n``vertices`` (for voxel and 26 face-, edge-, and node-wise neighbors).", - formatter="neighborhood_formatter", + formatter=neighborhood_formatter, ) sphere: float | None = shell.arg( help="\\\nFor additional voxelwise neighborhood control, the\nradius R of a desired neighborhood can be put in; R is\na floating point number, and must be >1. Examples of\nthe numbers of voxels in a given radius are as follows\n(you can roughly approximate with the ol' :math:`4\\pi\\,R^3/3`\nthing):\n\n * R=2.0 -> V=33\n * R=2.3 -> V=57,\n * R=2.9 -> V=93,\n * R=3.1 -> V=123,\n * R=3.9 -> V=251,\n * R=4.5 -> V=389,\n * R=6.1 -> V=949,\n\nbut you can choose most any value.", diff --git a/pydra/tasks/afni/v25/utils/tests/test_afnitonifti.py b/pydra/tasks/afni/v25/utils/tests/test_afnitonifti.py index b25371b..bf43ae2 100644 --- a/pydra/tasks/afni/v25/utils/tests/test_afnitonifti.py +++ b/pydra/tasks/afni/v25/utils/tests/test_afnitonifti.py @@ -1,4 +1,4 @@ -from fileformats.medimage_afni import ThreeD +from fileformats.vendor.afni.medimage import ThreeD import logging from nipype2pydra.testing import PassAfterTimeoutWorker from pydra.tasks.afni.v25.utils.afn_ito_nifti import AFNItoNIFTI diff --git a/pydra/tasks/afni/v25/utils/tests/test_eval.py b/pydra/tasks/afni/v25/utils/tests/test_eval.py index c2b7140..26be1bf 100644 --- a/pydra/tasks/afni/v25/utils/tests/test_eval.py +++ b/pydra/tasks/afni/v25/utils/tests/test_eval.py @@ -1,5 +1,5 @@ from fileformats.generic import File -from fileformats.medimage_afni import OneD +from fileformats.vendor.afni.medimage import OneD import logging from nipype2pydra.testing import PassAfterTimeoutWorker from pydra.tasks.afni.v25.utils.eval import Eval diff --git a/pydra/tasks/afni/v25/utils/tests/test_notes.py b/pydra/tasks/afni/v25/utils/tests/test_notes.py index 26826eb..8e1631c 100644 --- a/pydra/tasks/afni/v25/utils/tests/test_notes.py +++ b/pydra/tasks/afni/v25/utils/tests/test_notes.py @@ -1,4 +1,4 @@ -from fileformats.medimage_afni import Head +from fileformats.vendor.afni.medimage import Head import logging from nipype2pydra.testing import PassAfterTimeoutWorker from pydra.tasks.afni.v25.utils.notes import Notes diff --git a/pydra/tasks/afni/v25/utils/tests/test_onedtoolpy.py b/pydra/tasks/afni/v25/utils/tests/test_onedtoolpy.py index 5aef1c5..ce7dd83 100644 --- a/pydra/tasks/afni/v25/utils/tests/test_onedtoolpy.py +++ b/pydra/tasks/afni/v25/utils/tests/test_onedtoolpy.py @@ -1,5 +1,5 @@ from fileformats.generic import File -from fileformats.medimage_afni import OneD +from fileformats.vendor.afni.medimage import OneD import logging from nipype2pydra.testing import PassAfterTimeoutWorker from pydra.tasks.afni.v25.utils.one_d_tool_py import OneDToolPy diff --git a/pyproject.toml b/pyproject.toml index 60c2419..f889517 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,7 @@ dependencies = [ "fileformats >=0.15.4", "fileformats-datascience >=0.3.2", "fileformats-medimage >=0.10.5", - "fileformats-medimage-afni", + "fileformats-vendor-afni", "looseversion>=1.3.0" ] license = {file = "LICENSE"} diff --git a/related-packages/fileformats-extras/fileformats/extras/medimage_afni/__init__.py b/related-packages/fileformats-extras/fileformats/extras/vendor/afni/medimage/__init__.py similarity index 96% rename from related-packages/fileformats-extras/fileformats/extras/medimage_afni/__init__.py rename to related-packages/fileformats-extras/fileformats/extras/vendor/afni/medimage/__init__.py index 8deca1e..413d57d 100644 --- a/related-packages/fileformats-extras/fileformats/extras/medimage_afni/__init__.py +++ b/related-packages/fileformats-extras/fileformats/extras/vendor/afni/medimage/__init__.py @@ -1,7 +1,7 @@ import typing as ty from pathlib import Path from fileformats.core import FileSet, SampleFileGenerator -from fileformats.medimage_afni import ( +from fileformats.vendor.afni.medimage import ( OneD, Dset, ThreeD, diff --git a/related-packages/fileformats-extras/fileformats/extras/medimage_afni/tests/test_generate_sample_data.py b/related-packages/fileformats-extras/fileformats/extras/vendor/afni/medimage/tests/test_generate_sample_data.py similarity index 95% rename from related-packages/fileformats-extras/fileformats/extras/medimage_afni/tests/test_generate_sample_data.py rename to related-packages/fileformats-extras/fileformats/extras/vendor/afni/medimage/tests/test_generate_sample_data.py index d436d21..4df92a2 100644 --- a/related-packages/fileformats-extras/fileformats/extras/medimage_afni/tests/test_generate_sample_data.py +++ b/related-packages/fileformats-extras/fileformats/extras/vendor/afni/medimage/tests/test_generate_sample_data.py @@ -1,5 +1,5 @@ import pytest -from fileformats.medimage_afni import ( +from fileformats.vendor.afni.medimage import ( OneD, Dset, ThreeD, diff --git a/related-packages/fileformats-extras/pyproject.toml b/related-packages/fileformats-extras/pyproject.toml index c196c60..a1e8909 100644 --- a/related-packages/fileformats-extras/pyproject.toml +++ b/related-packages/fileformats-extras/pyproject.toml @@ -3,13 +3,13 @@ requires = ["hatchling", "hatch-vcs"] build-backend = "hatchling.build" [project] -name = "fileformats-medimage-afni-extras" +name = "fileformats-vendor-afni-extras" description = "Extensions to add functionality to tool-specific *fileformats* classes" readme = "README.rst" requires-python = ">=3.8" dependencies = [ "fileformats >= 0.7", - "fileformats-medimage-afni", + "fileformats-vendor-afni", "pydra >= 0.22.0" ] license = {file = "LICENSE"} @@ -58,21 +58,21 @@ converters = [ ] [project.urls] -repository = "https://github.com/nipype/pydra-afni" +repository = "https://github.com/nipype/pydra-tasks-afni" [tool.hatch.version] source = "vcs" raw-options = { root = "../.." } [tool.hatch.build.hooks.vcs] -version-file = "fileformats/extras/medimage_afni/_version.py" +version-file = "fileformats/extras/vendor/afni/_version.py" [tool.hatch.build.targets.wheel] packages = ["fileformats"] [tool.black] target-version = ['py38'] -exclude = "fileformats/extras/medimage_afni/_version.py" +exclude = "fileformats/extras/vendor/afni/_version.py" [tool.codespell] ignore-words = ".codespell-ignorewords" diff --git a/related-packages/fileformats/fileformats/medimage_afni/__init__.py b/related-packages/fileformats/fileformats/vendor/afni/medimage/__init__.py similarity index 91% rename from related-packages/fileformats/fileformats/medimage_afni/__init__.py rename to related-packages/fileformats/fileformats/vendor/afni/medimage/__init__.py index 1741f42..2cfc465 100644 --- a/related-packages/fileformats/fileformats/medimage_afni/__init__.py +++ b/related-packages/fileformats/fileformats/vendor/afni/medimage/__init__.py @@ -1,5 +1,5 @@ from fileformats.generic import File -from ._version import __version__ # noqa +from .._version import __version__ # noqa class OneD(File): diff --git a/related-packages/fileformats/pyproject.toml b/related-packages/fileformats/pyproject.toml index d148dc1..70c54ff 100644 --- a/related-packages/fileformats/pyproject.toml +++ b/related-packages/fileformats/pyproject.toml @@ -3,7 +3,7 @@ requires = ["hatchling", "hatch-vcs"] build-backend = "hatchling.build" [project] -name = "fileformats-medimage-afni" +name = "fileformats-vendor-afni" description = "Classes for representing different file formats in Python classes for use in type hinting in data workflows" readme = "README.rst" requires-python = ">=3.8" @@ -35,25 +35,25 @@ test = [ "pytest-env>=0.6.2", "pytest-cov>=2.12.1", "codecov", - "fileformats-medimage-afni-extras", + "fileformats-vendor-afni-extras", ] [project.urls] -repository = "https://github.com/nipype/pydra-afni" +repository = "https://github.com/nipype/pydra-tasks-afni" [tool.hatch.version] source = "vcs" raw-options = { root = "../.." } [tool.hatch.build.hooks.vcs] -version-file = "fileformats/medimage_afni/_version.py" +version-file = "fileformats/vendor/afni/_version.py" [tool.hatch.build.targets.wheel] packages = ["fileformats"] [tool.black] target-version = ['py38'] -exclude = "fileformats/medimage_afni/_version.py" +exclude = "fileformats/vendor/afni/_version.py" [tool.codespell] ignore-words = ".codespell-ignorewords"