Skip to content

Commit 700e818

Browse files
committed
replaced auto with specifiable "target_version" for target of interface only packages
1 parent d44f643 commit 700e818

File tree

11 files changed

+74
-21
lines changed

11 files changed

+74
-21
lines changed

example-specs/interface/nipype/afni/package.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,4 @@ init_depth: 3
3131
auto_import_init_depth: 4
3232
# Packages that should be copied directly into the new package without modification
3333
copy_packages: null
34+
target_version: v25_2_06

example-specs/interface/nipype/ants/package.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,4 @@ init_depth: 3
3131
auto_import_init_depth: 4
3232
# Packages that should be copied directly into the new package without modification
3333
copy_packages: null
34+
target_version: v2

example-specs/interface/nipype/freesurfer/package.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,4 @@ init_depth: 3
3131
auto_import_init_depth: 4
3232
# Packages that should be copied directly into the new package without modification
3333
copy_packages: null
34+
target_version: v8

example-specs/interface/nipype/fsl/package.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,4 @@ init_depth: 3
3131
auto_import_init_depth: 4
3232
# Packages that should be copied directly into the new package without modification
3333
copy_packages: null
34+
target_version: v6_0

example-specs/pkg-gen/nipype.yaml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
afni:
2+
target_version: v25_2_06
23
interfaces:
34
- nipype.interfaces.afni.model.Deconvolve
45
- nipype.interfaces.afni.model.Remlfit
@@ -81,6 +82,7 @@ afni:
8182
- nipype.interfaces.afni.utils.Zcat
8283
- nipype.interfaces.afni.utils.Zeropad
8384
ants:
85+
target_version: v2
8486
interfaces:
8587
- nipype.interfaces.ants.legacy.antsIntroduction
8688
- nipype.interfaces.ants.legacy.GenWarpFields
@@ -118,6 +120,7 @@ ants:
118120
classes:
119121
- nipype.interfaces.ants.base.Info
120122
brainsuite:
123+
target_version: v1_0
121124
interfaces:
122125
- nipype.interfaces.brainsuite.brainsuite.Bse
123126
- nipype.interfaces.brainsuite.brainsuite.Bfc
@@ -135,13 +138,16 @@ brainsuite:
135138
- nipype.interfaces.brainsuite.brainsuite.BDP
136139
- nipype.interfaces.brainsuite.brainsuite.ThicknessPVC
137140
bru2nii:
141+
target_version: v1_0
138142
interfaces:
139143
- nipype.interfaces.bru2nii.Bru2
140144
c3:
145+
target_version: v1_0
141146
interfaces:
142147
- nipype.interfaces.c3.C3dAffineTool
143148
- nipype.interfaces.c3.C3d
144149
camino:
150+
target_version: v1_0
145151
interfaces:
146152
- nipype.interfaces.camino.calib.SFPICOCalibData
147153
- nipype.interfaces.camino.calib.SFLUTGen
@@ -178,16 +184,19 @@ camino:
178184
- nipype.interfaces.camino.odf.SFPeaks
179185
- nipype.interfaces.camino.utils.ImageStats
180186
camino2trackvis:
187+
target_version: v1_0
181188
interfaces:
182189
- nipype.interfaces.camino2trackvis.convert.Camino2Trackvis
183190
- nipype.interfaces.camino2trackvis.convert.Trackvis2Camino
184191
cat12:
192+
target_version: v1_0
185193
interfaces:
186194
- nipype.interfaces.cat12.preprocess.CAT12Segment
187195
- nipype.interfaces.cat12.preprocess.CAT12SANLMDenoising
188196
- nipype.interfaces.cat12.surface.ExtractAdditionalSurfaceParameters
189197
- nipype.interfaces.cat12.surface.ExtractROIBasedSurfaceMeasures
190198
cmtk:
199+
target_version: v1_0
191200
interfaces:
192201
- nipype.interfaces.cmtk.cmtk.CreateMatrix
193202
- nipype.interfaces.cmtk.cmtk.ROIGen
@@ -199,11 +208,13 @@ cmtk:
199208
- nipype.interfaces.cmtk.nx.AverageNetworks
200209
- nipype.interfaces.cmtk.parcellation.Parcellate
201210
dcm2nii:
211+
target_version: v1_0
202212
interfaces:
203213
- nipype.interfaces.dcm2nii.Info
204214
- nipype.interfaces.dcm2nii.Dcm2nii
205215
- nipype.interfaces.dcm2nii.Dcm2niix
206216
dcmstack:
217+
target_version: v1_0
207218
interfaces:
208219
- nipype.interfaces.dcmstack.NiftiGeneratorBase
209220
- nipype.interfaces.dcmstack.DcmStack
@@ -213,6 +224,7 @@ dcmstack:
213224
- nipype.interfaces.dcmstack.MergeNifti
214225
- nipype.interfaces.dcmstack.SplitNifti
215226
diffusion_toolkit:
227+
target_version: v1_0
216228
interfaces:
217229
- nipype.interfaces.diffusion_toolkit.dti.DTIRecon
218230
- nipype.interfaces.diffusion_toolkit.dti.DTITracker
@@ -222,6 +234,7 @@ diffusion_toolkit:
222234
- nipype.interfaces.diffusion_toolkit.postproc.SplineFilter
223235
- nipype.interfaces.diffusion_toolkit.postproc.TrackMerge
224236
dipy:
237+
target_version: v1_0
225238
interfaces:
226239
- nipype.interfaces.dipy.anisotropic_power.APMQball
227240
- nipype.interfaces.dipy.preprocess.Resample
@@ -235,6 +248,7 @@ dipy:
235248
- nipype.interfaces.dipy.tracks.TrackDensityMap
236249
- nipype.interfaces.dipy.tracks.StreamlineTractography
237250
dtitk:
251+
target_version: v1_0
238252
interfaces:
239253
- nipype.interfaces.dtitk.registration.Rigid
240254
- nipype.interfaces.dtitk.registration.Affine
@@ -266,16 +280,19 @@ dtitk:
266280
- nipype.interfaces.dtitk.utils.TVResampleTask
267281
- nipype.interfaces.dtitk.utils.TVtoolTask
268282
dynamic_slicer:
283+
target_version: v1_0
269284
interfaces:
270285
- nipype.interfaces.dynamic_slicer.SlicerCommandLine
271286
elastix:
287+
target_version: v1_0
272288
interfaces:
273289
- nipype.interfaces.elastix.registration.Registration
274290
- nipype.interfaces.elastix.registration.ApplyWarp
275291
- nipype.interfaces.elastix.registration.AnalyzeWarp
276292
- nipype.interfaces.elastix.registration.PointsWarp
277293
- nipype.interfaces.elastix.utils.EditTransform
278294
freesurfer:
295+
target_version: v8
279296
interfaces:
280297
- nipype.interfaces.freesurfer.longitudinal.RobustTemplate
281298
- nipype.interfaces.freesurfer.longitudinal.FuseSegmentations
@@ -367,6 +384,7 @@ freesurfer:
367384
- nipype.interfaces.freesurfer.utils.MRIsExpand
368385
- nipype.interfaces.freesurfer.utils.LTAConvert
369386
fsl:
387+
target_version: v6_0
370388
interfaces:
371389
- nipype.interfaces.fsl.aroma.ICA_AROMA
372390
- nipype.interfaces.fsl.dti.DTIFit
@@ -475,13 +493,16 @@ fsl:
475493
- nipype.interfaces.fsl.utils.Text2Vest
476494
- nipype.interfaces.fsl.utils.Vest2Text
477495
image:
496+
target_version: v1_0
478497
interfaces:
479498
- nipype.interfaces.image.Rescale
480499
- nipype.interfaces.image.Reorient
481500
meshfix:
501+
target_version: v1_0
482502
interfaces:
483503
- nipype.interfaces.meshfix.MeshFix
484504
minc:
505+
target_version: v1_0
485506
interfaces:
486507
- nipype.interfaces.minc.minc.Extract
487508
- nipype.interfaces.minc.minc.ToRaw
@@ -512,6 +533,7 @@ minc:
512533
- nipype.interfaces.minc.minc.Reshape
513534
- nipype.interfaces.minc.minc.VolSymm
514535
mipav:
536+
target_version: v1_0
515537
interfaces:
516538
- nipype.interfaces.mipav.developer.JistLaminarVolumetricLayering
517539
- nipype.interfaces.mipav.developer.JistBrainMgdmSegmentation
@@ -532,12 +554,14 @@ mipav:
532554
- nipype.interfaces.mipav.developer.JistIntensityMp2rageMasking
533555
- nipype.interfaces.mipav.developer.MedicAlgorithmThresholdToBinaryMask
534556
niftyfit:
557+
target_version: v1_0
535558
interfaces:
536559
- nipype.interfaces.niftyfit.asl.FitAsl
537560
- nipype.interfaces.niftyfit.dwi.FitDwi
538561
- nipype.interfaces.niftyfit.dwi.DwiTool
539562
- nipype.interfaces.niftyfit.qt1.FitQt1
540563
niftyreg:
564+
target_version: v1_0
541565
interfaces:
542566
- nipype.interfaces.niftyreg.reg.RegAladin
543567
- nipype.interfaces.niftyreg.reg.RegF3D
@@ -548,6 +572,7 @@ niftyreg:
548572
- nipype.interfaces.niftyreg.regutils.RegTransform
549573
- nipype.interfaces.niftyreg.regutils.RegMeasure
550574
niftyseg:
575+
target_version: v1_0
551576
interfaces:
552577
- nipype.interfaces.niftyseg.em.EM
553578
- nipype.interfaces.niftyseg.label_fusion.LabelFusion
@@ -564,22 +589,28 @@ niftyseg:
564589
- nipype.interfaces.niftyseg.stats.UnaryStats
565590
- nipype.interfaces.niftyseg.stats.BinaryStats
566591
nilearn:
592+
target_version: v1_0
567593
interfaces:
568594
- nipype.interfaces.nilearn.NilearnBaseInterface
569595
- nipype.interfaces.nilearn.SignalExtraction
570596
nitime:
597+
target_version: v1_0
571598
interfaces:
572599
- nipype.interfaces.nitime.analysis.CoherenceAnalyzer
573600
petpvc:
601+
target_version: v1_0
574602
interfaces:
575603
- nipype.interfaces.petpvc.PETPVC
576604
quickshear:
605+
target_version: v1_0
577606
interfaces:
578607
- nipype.interfaces.quickshear.Quickshear
579608
robex:
609+
target_version: v1_0
580610
interfaces:
581611
- nipype.interfaces.robex.preprocess.RobexSegment
582612
semtools:
613+
target_version: v1_0
583614
interfaces:
584615
- nipype.interfaces.semtools.brains.classify.BRAINSPosteriorToContinuousClass
585616
- nipype.interfaces.semtools.brains.segmentation.SimilarityIndex
@@ -684,6 +715,7 @@ semtools:
684715
- nipype.interfaces.semtools.utilities.brains.fcsv_to_hdf5
685716
- nipype.interfaces.semtools.utilities.brains.FindCenterOfBrain
686717
slicer:
718+
target_version: v1_0
687719
interfaces:
688720
- nipype.interfaces.slicer.converters.DicomToNrrdConverter
689721
- nipype.interfaces.slicer.converters.OrientScalarVolume
@@ -746,6 +778,7 @@ slicer:
746778
- nipype.interfaces.slicer.surface.ModelMaker
747779
- nipype.interfaces.slicer.utilities.EMSegmentTransformToNewFormat
748780
spm:
781+
target_version: v1_0
749782
interfaces:
750783
- nipype.interfaces.spm.model.Level1Design
751784
- nipype.interfaces.spm.model.EstimateModel
@@ -782,10 +815,12 @@ spm:
782815
- nipype.interfaces.spm.utils.ResliceToReference
783816
- nipype.interfaces.spm.utils.DicomImport
784817
vista:
818+
target_version: v1_0
785819
interfaces:
786820
- nipype.interfaces.vista.vista.Vnifti2Image
787821
- nipype.interfaces.vista.vista.VtoMat
788822
workbench:
823+
target_version: v1_0
789824
interfaces:
790825
- nipype.interfaces.workbench.cifti.CiftiSmooth
791826
- nipype.interfaces.workbench.metric.MetricResample

nipype2pydra/cli/convert.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def convert(
6666
# Clean previous version of output dir
6767
package_dir = converter.package_dir(package_root)
6868
if converter.interface_only:
69-
auto_dir = package_dir / "auto"
69+
auto_dir = package_dir / converter.target_version
7070
if auto_dir.exists():
7171
shutil.rmtree(auto_dir)
7272
else:

nipype2pydra/cli/pkg_gen.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,11 @@ def pkg_gen(
113113
with_fileformats = spec.get("with_fileformats")
114114
interface_only_pkg = "workflows" not in spec
115115
pkg_dir = initialise_task_repo(
116-
output_dir, task_template, pkg, interface_only=interface_only_pkg
116+
output_dir,
117+
task_template,
118+
pkg,
119+
spec["target_version"],
120+
interface_only=interface_only_pkg,
117121
)
118122
pkg_formats = set()
119123

nipype2pydra/interface/base.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -372,9 +372,7 @@ def __attrs_post_init__(self):
372372
if self.output_module is None:
373373
if self.nipype_module.__name__.startswith("nipype.interfaces."):
374374
pkg_name = self.nipype_module.__name__.split(".")[2]
375-
self.output_module = (
376-
f"pydra.tasks.{pkg_name}.auto.{to_snake_case(self.task_name)}"
377-
)
375+
self.output_module = f"pydra.tasks.{pkg_name}.{self.package.target_version}.{to_snake_case(self.task_name)}"
378376
else:
379377
raise RuntimeError(
380378
"Output-module needs to be explicitly provided to task converter "

nipype2pydra/package.py

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,11 @@ class PackageConverter:
274274
},
275275
)
276276

277+
target_version: str = attrs.field(
278+
default="v1_0",
279+
metadata={"help": "The target version of the package to generate"},
280+
)
281+
277282
def __attrs_post_init__(self):
278283
# Adds in some default omissions
279284
self.omit_constants.append("nipype.logging")
@@ -298,13 +303,19 @@ def nipype_module(self):
298303
def all_import_translations(self) -> ty.List[ty.Tuple[str, str]]:
299304
all_translations = self.import_translations + [
300305
(r"nipype\.interfaces\.mrtrix3.\w+\b", r"pydra.tasks.mrtrix3.v3_0"),
301-
(r"nipype\.interfaces\.(?!base)(\w+)\b", r"pydra.tasks.\1.auto"),
306+
(
307+
r"nipype\.interfaces\.(?!base)(\w+)\b",
308+
r"pydra.tasks.\1." + self.target_version,
309+
),
302310
]
303311
if self.interface_only:
304312
all_translations.extend(
305313
[
306-
(r"nipype\.(.*)", self.name + r".auto.nipype_ports.\1"),
307-
(self.nipype_name, self.name + ".auto"),
314+
(
315+
r"nipype\.(.*)",
316+
self.name + "." + self.target_version + r".nipype_ports.\1",
317+
),
318+
(self.nipype_name, self.name + "." + self.target_version),
308319
]
309320
)
310321
else:
@@ -471,7 +482,7 @@ def collect_intra_pkg_objects(used: UsedSymbols, port_nipype: bool = True):
471482

472483
post_release_dir = mod_dir
473484
if self.interface_only:
474-
post_release_dir /= "auto"
485+
post_release_dir /= self.target_version
475486
self.write_post_release_file(post_release_dir / "_post_release.py")
476487

477488
if self.copy_packages:
@@ -507,8 +518,8 @@ def translate_submodule(
507518
def untranslate_submodule(self, pydra_module_name: str) -> str:
508519
"""Translates a module name from the Nipype package to the Pydra package"""
509520
relpath = ImportStatement.get_relative_package(pydra_module_name, self.name)
510-
if relpath.startswith(".auto"):
511-
relpath = relpath[5:]
521+
if relpath.startswith("." + self.target_version):
522+
relpath = relpath[(len(self.target_version) + 1) :]
512523
if relpath.startswith(".nipype_ports"):
513524
return "nipype" + relpath[13:]
514525
if relpath == self.nipype_name:
@@ -611,7 +622,7 @@ def nipype2pydra_module_name(self, nipype_name: str) -> str:
611622
the Pydra module path
612623
"""
613624
if self.interface_only:
614-
base_pkg = self.name + ".auto"
625+
base_pkg = self.name + "." + self.target_version
615626
else:
616627
base_pkg = self.name
617628
if re.match(self.nipype_module.__name__ + r"\b", nipype_name):
@@ -719,15 +730,15 @@ def nipype_port_converters(self) -> ty.Dict[str, interface.BaseInterfaceConverte
719730
spec = yaml.safe_load(f)
720731
callables_file = spec_file.parent / (spec_file.stem + "_callables.py")
721732
if self.interface_only:
722-
mod_base = [self.name, "auto", "nipype_ports"]
733+
mod_base = [self.name, self.target_version, "nipype_ports"]
723734
else:
724735
mod_base = [self.name, "nipype_ports"]
725736
module_name = ".".join(mod_base + spec["nipype_module"].split(".")[1:])
726737
task_name = spec["task_name"]
727738
output_module = (
728739
self.translate_submodule(
729740
module_name,
730-
sub_pkg="auto" if self.interface_only else None,
741+
sub_pkg=self.target_version if self.interface_only else None,
731742
)
732743
+ "."
733744
+ to_snake_case(task_name)
@@ -748,7 +759,8 @@ def add_interface_from_spec(
748759
# callables_file: Path
749760
) -> interface.BaseInterfaceConverter:
750761
output_module = self.translate_submodule(
751-
spec["nipype_module"], sub_pkg="auto" if self.interface_only else None
762+
spec["nipype_module"],
763+
sub_pkg=self.target_version if self.interface_only else None,
752764
)
753765
output_module += "." + to_snake_case(spec["task_name"])
754766
converter = self.interfaces[f"{spec['nipype_module']}.{spec['task_name']}"] = (
@@ -1160,7 +1172,7 @@ def write_pkg_inits(
11601172
warn(
11611173
"Nipype interfaces haven't been automatically converted from their specs in "
11621174
f"`nipype-auto-conv`. Please run `{str(pkg_path / 'nipype-auto-conv' / 'generate')}` "
1163-
"to generated the converted Nipype interfaces in pydra.tasks.{pkg}.auto"
1175+
"to generated the converted Nipype interfaces in pydra.tasks.{pkg}.{target_version}"
11641176
)
11651177
else:
11661178
n_ver = src_pkg_version.replace(".", "_")

0 commit comments

Comments
 (0)