From 681a0d6aefc27314befa4e5b3a3a5c1b548f8354 Mon Sep 17 00:00:00 2001 From: "Christopher J. Markiewicz" Date: Sat, 13 May 2017 22:54:46 -0400 Subject: [PATCH 1/3] FIX: Pass parameters to all MapNode-generated Nodes --- nipype/pipeline/engine/nodes.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/nipype/pipeline/engine/nodes.py b/nipype/pipeline/engine/nodes.py index cbfa70cebb..b203a2dccc 100644 --- a/nipype/pipeline/engine/nodes.py +++ b/nipype/pipeline/engine/nodes.py @@ -1112,9 +1112,15 @@ def _make_nodes(self, cwd=None): nitems = len(filename_to_list(getattr(self.inputs, self.iterfield[0]))) for i in range(nitems): nodename = '_' + self.name + str(i) - node = Node(deepcopy(self._interface), name=nodename) - node.overwrite = self.overwrite - node.run_without_submitting = self.run_without_submitting + node = Node(deepcopy(self._interface), + n_procs=self._interface.num_threads, + mem_gb=self._interface.estimated_memory_gb, + overwrite=self.overwrite, + needed_outputs=self.needed_outputs, + run_without_submitting=self.run_without_submitting, + config=self.config, + base_dir=op.join(cwd, 'mapflow'), + name=nodename) node.plugin_args = self.plugin_args node._interface.inputs.set( **deepcopy(self._interface.inputs.get())) @@ -1125,8 +1131,6 @@ def _make_nodes(self, cwd=None): fieldvals = filename_to_list(getattr(self.inputs, field)) logger.debug('setting input %d %s %s', i, field, fieldvals[i]) setattr(node.inputs, field, fieldvals[i]) - node.config = self.config - node.base_dir = op.join(cwd, 'mapflow') yield i, node def _node_runner(self, nodes, updatehash=False): From f4aab6184311f5d89ddea9cdd146255e88324cc2 Mon Sep 17 00:00:00 2001 From: "Christopher J. Markiewicz" Date: Sat, 13 May 2017 23:35:03 -0400 Subject: [PATCH 2/3] TEST: Test attribute copying during MapNode expansion --- nipype/pipeline/engine/tests/test_engine.py | 22 +++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/nipype/pipeline/engine/tests/test_engine.py b/nipype/pipeline/engine/tests/test_engine.py index 5cd107bc69..e2624d03c8 100644 --- a/nipype/pipeline/engine/tests/test_engine.py +++ b/nipype/pipeline/engine/tests/test_engine.py @@ -486,6 +486,28 @@ def func1(in1): assert "can only concatenate list" in str(excinfo.value) +def test_mapnode_expansion(tmpdir): + os.chdir(str(tmpdir)) + from nipype import MapNode, Function + + def func1(in1): + return in1 + 1 + + mapnode = MapNode(Function(function=func1), + iterfield='in1', + name='mapnode') + mapnode.inputs.in1 = [1, 2] + mapnode.interface.num_threads = 2 + mapnode.interface.estimated_memory_gb = 2 + + for idx, node in mapnode._make_nodes(): + for attr in ('overwrite', 'run_without_submitting', 'plugin_args'): + assert getattr(node, attr) == getattr(mapnode, attr) + for attr in ('num_threads', 'estimated_memory_gb'): + assert (getattr(node._interface, attr) == + getattr(mapnode._interface, attr)) + + def test_node_hash(tmpdir): wd = str(tmpdir) os.chdir(wd) From 28198af64b26b16fed9a58f918230f6fb8b4daf4 Mon Sep 17 00:00:00 2001 From: "Christopher J. Markiewicz" Date: Sun, 14 May 2017 10:59:20 -0400 Subject: [PATCH 3/3] FIX: config can't be passed directly to Node --- nipype/pipeline/engine/nodes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nipype/pipeline/engine/nodes.py b/nipype/pipeline/engine/nodes.py index b203a2dccc..d52e589a08 100644 --- a/nipype/pipeline/engine/nodes.py +++ b/nipype/pipeline/engine/nodes.py @@ -1118,7 +1118,6 @@ def _make_nodes(self, cwd=None): overwrite=self.overwrite, needed_outputs=self.needed_outputs, run_without_submitting=self.run_without_submitting, - config=self.config, base_dir=op.join(cwd, 'mapflow'), name=nodename) node.plugin_args = self.plugin_args @@ -1131,6 +1130,7 @@ def _make_nodes(self, cwd=None): fieldvals = filename_to_list(getattr(self.inputs, field)) logger.debug('setting input %d %s %s', i, field, fieldvals[i]) setattr(node.inputs, field, fieldvals[i]) + node.config = self.config yield i, node def _node_runner(self, nodes, updatehash=False):