From ea168e1b7a54eebb81b5ac00826fe97b4b895c17 Mon Sep 17 00:00:00 2001 From: Chris Filo Gorgolewski Date: Tue, 8 Sep 2015 08:35:10 -0700 Subject: [PATCH 1/3] reduce number of SPM calls --- nipype/interfaces/base.py | 52 +++++++++++++++-------------- nipype/interfaces/spm/preprocess.py | 36 ++++++++++++-------- 2 files changed, 50 insertions(+), 38 deletions(-) diff --git a/nipype/interfaces/base.py b/nipype/interfaces/base.py index f7a2b5b655..1bd632f2ec 100644 --- a/nipype/interfaces/base.py +++ b/nipype/interfaces/base.py @@ -925,34 +925,36 @@ def _check_version_requirements(self, trait_object, raise_exception=True): """ Raises an exception on version mismatch """ unavailable_traits = [] - version = LooseVersion(str(self.version)) - if not version: - return # check minimum version check = dict(min_ver=lambda t: t is not None) names = trait_object.trait_names(**check) - for name in names: - min_ver = LooseVersion(str(trait_object.traits()[name].min_ver)) - if min_ver > version: - unavailable_traits.append(name) - if not isdefined(getattr(trait_object, name)): - continue - if raise_exception: - raise Exception('Trait %s (%s) (version %s < required %s)' % - (name, self.__class__.__name__, - version, min_ver)) - check = dict(max_ver=lambda t: t is not None) - names = trait_object.trait_names(**check) - for name in names: - max_ver = LooseVersion(str(trait_object.traits()[name].max_ver)) - if max_ver < version: - unavailable_traits.append(name) - if not isdefined(getattr(trait_object, name)): - continue - if raise_exception: - raise Exception('Trait %s (%s) (version %s > required %s)' % - (name, self.__class__.__name__, - version, max_ver)) + + if names: + version = LooseVersion(str(self.version)) + if not version: + return + for name in names: + min_ver = LooseVersion(str(trait_object.traits()[name].min_ver)) + if min_ver > version: + unavailable_traits.append(name) + if not isdefined(getattr(trait_object, name)): + continue + if raise_exception: + raise Exception('Trait %s (%s) (version %s < required %s)' % + (name, self.__class__.__name__, + version, min_ver)) + check = dict(max_ver=lambda t: t is not None) + names = trait_object.trait_names(**check) + for name in names: + max_ver = LooseVersion(str(trait_object.traits()[name].max_ver)) + if max_ver < version: + unavailable_traits.append(name) + if not isdefined(getattr(trait_object, name)): + continue + if raise_exception: + raise Exception('Trait %s (%s) (version %s > required %s)' % + (name, self.__class__.__name__, + version, max_ver)) return unavailable_traits def _run_wrapper(self, runtime): diff --git a/nipype/interfaces/spm/preprocess.py b/nipype/interfaces/spm/preprocess.py index 133d061a04..a7c4ffe886 100644 --- a/nipype/interfaces/spm/preprocess.py +++ b/nipype/interfaces/spm/preprocess.py @@ -765,16 +765,21 @@ class Segment(SPMCommand): >>> seg.run() # doctest: +SKIP """ - - if Info.version() and Info.version()['name'] == "SPM12": - _jobtype = 'tools' - _jobname = 'oldseg' - else: - _jobtype = 'spatial' - _jobname = 'preproc' + input_spec = SegmentInputSpec output_spec = SegmentOutputSpec + + def __init__(self, **inputs): + version = Info.version() + if version and version['name'] == "SPM12": + self._jobtype = 'tools' + self._jobname = 'oldseg' + else: + self._jobtype = 'spatial' + self._jobname = 'preproc' + + SPMCommand.__init__(self, **inputs) def _format_arg(self, opt, spec, val): """Convert input to appropriate format for spm @@ -893,12 +898,17 @@ class NewSegment(SPMCommand): input_spec = NewSegmentInputSpec output_spec = NewSegmentOutputSpec - if Info.version() and Info.version()['name'] == "SPM12": - _jobtype = 'spatial' - _jobname = 'preproc' - else: - _jobtype = 'tools' - _jobname = 'preproc8' + + def __init__(self, **inputs): + version = Info.version() + if version and version['name'] == "SPM12": + self._jobtype = 'tools' + self._jobname = 'oldseg' + else: + self._jobtype = 'spatial' + self._jobname = 'preproc' + + SPMCommand.__init__(self, **inputs) def _format_arg(self, opt, spec, val): """Convert input to appropriate format for spm From 30a20a7616a4050e1ca0744a829c41253fdf1f75 Mon Sep 17 00:00:00 2001 From: Chris Filo Gorgolewski Date: Tue, 8 Sep 2015 11:16:19 -0700 Subject: [PATCH 2/3] fixed tests --- nipype/interfaces/spm/preprocess.py | 6 +++--- nipype/interfaces/spm/tests/test_preprocess.py | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/nipype/interfaces/spm/preprocess.py b/nipype/interfaces/spm/preprocess.py index a7c4ffe886..2080598936 100644 --- a/nipype/interfaces/spm/preprocess.py +++ b/nipype/interfaces/spm/preprocess.py @@ -902,11 +902,11 @@ class NewSegment(SPMCommand): def __init__(self, **inputs): version = Info.version() if version and version['name'] == "SPM12": - self._jobtype = 'tools' - self._jobname = 'oldseg' - else: self._jobtype = 'spatial' self._jobname = 'preproc' + else: + self._jobtype = 'tools' + self._jobname = 'preproc8' SPMCommand.__init__(self, **inputs) diff --git a/nipype/interfaces/spm/tests/test_preprocess.py b/nipype/interfaces/spm/tests/test_preprocess.py index 45caf3cd8b..47c2e16154 100644 --- a/nipype/interfaces/spm/tests/test_preprocess.py +++ b/nipype/interfaces/spm/tests/test_preprocess.py @@ -106,20 +106,20 @@ def test_normalize12_list_outputs(): @skipif(no_spm) def test_segment(): if spm.Info.version()['name'] == "SPM12": - yield assert_equal, spm.Segment._jobtype, 'tools' - yield assert_equal, spm.Segment._jobname, 'oldseg' + yield assert_equal, spm.Segment()._jobtype, 'tools' + yield assert_equal, spm.Segment()._jobname, 'oldseg' else: - yield assert_equal, spm.Segment._jobtype, 'spatial' - yield assert_equal, spm.Segment._jobname, 'preproc' + yield assert_equal, spm.Segment()._jobtype, 'spatial' + yield assert_equal, spm.Segment()._jobname, 'preproc' @skipif(no_spm) def test_newsegment(): if spm.Info.version()['name'] == "SPM12": - yield assert_equal, spm.NewSegment._jobtype, 'spatial' - yield assert_equal, spm.NewSegment._jobname, 'preproc' + yield assert_equal, spm.NewSegment()._jobtype, 'spatial' + yield assert_equal, spm.NewSegment()._jobname, 'preproc' else: - yield assert_equal, spm.NewSegment._jobtype, 'tools' - yield assert_equal, spm.NewSegment._jobname, 'preproc8' + yield assert_equal, spm.NewSegment()._jobtype, 'tools' + yield assert_equal, spm.NewSegment()._jobname, 'preproc8' def test_smooth(): From 97cc7d39938be6143897b5fd530f363d49b1e61f Mon Sep 17 00:00:00 2001 From: Chris Filo Gorgolewski Date: Thu, 10 Sep 2015 09:32:33 -0700 Subject: [PATCH 3/3] fixed merge mistake --- nipype/interfaces/spm/preprocess.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/nipype/interfaces/spm/preprocess.py b/nipype/interfaces/spm/preprocess.py index 3df7917c02..ddabcb29fa 100644 --- a/nipype/interfaces/spm/preprocess.py +++ b/nipype/interfaces/spm/preprocess.py @@ -772,11 +772,11 @@ class Segment(SPMCommand): def __init__(self, **inputs): _local_version = SPMCommand().version if _local_version and '12.' in _local_version: - _jobtype = 'tools' - _jobname = 'oldseg' + self._jobtype = 'tools' + self._jobname = 'oldseg' else: - _jobtype = 'spatial' - _jobname = 'preproc' + self._jobtype = 'spatial' + self._jobname = 'preproc' SPMCommand.__init__(self, **inputs) @@ -901,11 +901,11 @@ class NewSegment(SPMCommand): def __init__(self, **inputs): _local_version = SPMCommand().version if _local_version and '12.' in _local_version: - _jobtype = 'spatial' - _jobname = 'preproc' + self._jobtype = 'spatial' + self._jobname = 'preproc' else: - _jobtype = 'tools' - _jobname = 'preproc8' + self._jobtype = 'tools' + self._jobname = 'preproc8' SPMCommand.__init__(self, **inputs)