From 4c81184fd308dead0aa7572e905045ae44960ac3 Mon Sep 17 00:00:00 2001 From: mathiasg Date: Thu, 8 Feb 2018 11:40:53 -0500 Subject: [PATCH 1/3] fix: set _id property of cloned node too --- nipype/pipeline/engine/base.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nipype/pipeline/engine/base.py b/nipype/pipeline/engine/base.py index 51449632ba..0883023f63 100644 --- a/nipype/pipeline/engine/base.py +++ b/nipype/pipeline/engine/base.py @@ -84,9 +84,12 @@ def clone(self, name): A clone of node or workflow must have a new name """ if name == self.name: - raise ValueError('Cloning requires a new name, "%s" is in use.' % name) + raise ValueError('Cloning requires a new name, "%s" is ' + 'in use.' % name) clone = deepcopy(self) clone.name = name + if hasattr(clone, '_id'): + clone._id = name return clone def _check_outputs(self, parameter): From 1f990d992d94e7870c24daf9edff4c256c53a875 Mon Sep 17 00:00:00 2001 From: mathiasg Date: Thu, 8 Feb 2018 11:57:51 -0500 Subject: [PATCH 2/3] enh: add test from #2431 --- nipype/pipeline/engine/tests/test_base.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/nipype/pipeline/engine/tests/test_base.py b/nipype/pipeline/engine/tests/test_base.py index 54356fd6c5..abe0d9d80c 100644 --- a/nipype/pipeline/engine/tests/test_base.py +++ b/nipype/pipeline/engine/tests/test_base.py @@ -6,6 +6,8 @@ import pytest from ..base import EngineBase from ....interfaces import base as nib +from ....interfaces import utility as niu +from ... import engine as pe class InputSpec(nib.TraitedSpec): @@ -64,3 +66,24 @@ def test_clone(): with pytest.raises(ValueError): base.clone('nodename') + +def test_clone_node_iterables(tmpdir): + tmpdir.chdir() + + def addstr(string): + return ('%s+2' % string ) + + subject_list = ['sub-001', 'sub-002'] + inputnode = pe.Node(niu.IdentityInterface(fields = ['subject']), + name = 'inputnode') + inputnode.iterables = [('subject', subject_list)] + + node_1 = pe.Node(niu.Function(input_names='string', + output_names= 'string', + function = addstr),name='node_1') + node_2 = node_1.clone('node_2') + + workflow = pe.Workflow(name='iter_clone_wf') + workflow.connect([(inputnode, node_1, [('subject','string')]), + (node_1, node_2, [('string','string')])]) + workflow.run() From e98cf315b2570f575364a628432536dca1795464 Mon Sep 17 00:00:00 2001 From: mathiasg Date: Fri, 9 Feb 2018 13:19:53 -0500 Subject: [PATCH 3/3] sty: spacing --- nipype/pipeline/engine/tests/test_base.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/nipype/pipeline/engine/tests/test_base.py b/nipype/pipeline/engine/tests/test_base.py index abe0d9d80c..fd87aa6878 100644 --- a/nipype/pipeline/engine/tests/test_base.py +++ b/nipype/pipeline/engine/tests/test_base.py @@ -71,19 +71,19 @@ def test_clone_node_iterables(tmpdir): tmpdir.chdir() def addstr(string): - return ('%s+2' % string ) + return ('%s + 2' % string) subject_list = ['sub-001', 'sub-002'] - inputnode = pe.Node(niu.IdentityInterface(fields = ['subject']), - name = 'inputnode') + inputnode = pe.Node(niu.IdentityInterface(fields=['subject']), + name='inputnode') inputnode.iterables = [('subject', subject_list)] node_1 = pe.Node(niu.Function(input_names='string', - output_names= 'string', - function = addstr),name='node_1') + output_names='string', + function=addstr), name='node_1') node_2 = node_1.clone('node_2') workflow = pe.Workflow(name='iter_clone_wf') - workflow.connect([(inputnode, node_1, [('subject','string')]), - (node_1, node_2, [('string','string')])]) + workflow.connect([(inputnode, node_1, [('subject', 'string')]), + (node_1, node_2, [('string', 'string')])]) workflow.run()