Skip to content

Commit ca439fd

Browse files
committed
ENH: Enable Merge(0) to merge a list of lists
1 parent cb207f8 commit ca439fd

File tree

1 file changed

+25
-11
lines changed

1 file changed

+25
-11
lines changed

nipype/interfaces/utility.py

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -134,24 +134,38 @@ class Merge(IOBase):
134134
def __init__(self, numinputs=0, **inputs):
135135
super(Merge, self).__init__(**inputs)
136136
self._numinputs = numinputs
137-
add_traits(self.inputs, ['in%d' % (i + 1) for i in range(numinputs)])
137+
if numinputs > 0:
138+
input_names = ['in%d' % (i + 1) for i in range(numinputs)]
139+
elif numinputs == 0:
140+
input_names = ['in_lists']
141+
else:
142+
input_names = []
143+
add_traits(self.inputs, input_names)
138144

139145
def _list_outputs(self):
140146
outputs = self._outputs().get()
141147
out = []
148+
149+
if self._numinputs == 0:
150+
values = getattr(self.inputs, 'in_lists')
151+
if not isdefined(values):
152+
return outputs
153+
else:
154+
getval = lambda idx: getattr(self.inputs, 'in%d' % (idx + 1))
155+
values = [getval(idx) for idx in range(self._numinputs)
156+
if isdefined(getval(idx))]
157+
142158
if self.inputs.axis == 'vstack':
143-
for idx in range(self._numinputs):
144-
value = getattr(self.inputs, 'in%d' % (idx + 1))
145-
if isdefined(value):
146-
if isinstance(value, list) and not self.inputs.no_flatten:
147-
out.extend(value)
148-
else:
149-
out.append(value)
159+
for value in values:
160+
if isinstance(value, list) and not self.inputs.no_flatten:
161+
out.extend(value)
162+
else:
163+
out.append(value)
150164
else:
151-
for i in range(len(filename_to_list(self.inputs.in1))):
165+
for i in range(len(filename_to_list(values[0]))):
152166
out.insert(i, [])
153-
for j in range(self._numinputs):
154-
out[i].append(filename_to_list(getattr(self.inputs, 'in%d' % (j + 1)))[i])
167+
for value in values:
168+
out[i].append(filename_to_list(values)[i])
155169
if out:
156170
outputs['out'] = out
157171
return outputs

0 commit comments

Comments
 (0)