Open
Description
Summary
When one writes a nipype interface or workflow there is a fair bit of boilerplate. The intent of this discussion is to figure out how we reduce/simplify this, and to think about the v2 api.
should we:
- just simplify syntax (allow more restricted forms only)/update our examples to use more compact pythonic forms. for example:
# common form
a.inputs.one = 2
a.inputs.two = 3
# alternate allowed forms
a = Interface(one=2, two=3)
or
a = Interface(...)
a.inputs.update(one=2, two=3)
except for special interfaces (e.g., Function)
- add support for lazy evaluation in new api and make it more compact (my current preference):
wf2=Workflow('wf12, ..., distribute=False, global_cache=False)
...
wf1=Workflow('wf1', ..., distribute=True)
wf1.add('a', BET(...))
wf1.add('wf2', wf2(..., inputs='node2.in1=a.out1'))
wf1.add('b', antsRegistration(..., in1='a.out1')).map('in1'))
wf1.add('x', SomeFunc(..., in1='b.out1')) # map automatically continues
wf1.add('c', ImageMaths(..., in1='wf2.node1.out1')).join('b.in1')
wf1.run()
or more compactly:
wf2=Workflow('wf2', ..., distribute=False, global_cache=False)
...
wf1=Workflow('wf1', ..., distribute=True)
.add('a', BET(...))
.add('wf2', wf2(..., inputs='node2.in1=a.out1'))
.add('b', antsRegistration(..., in1='a.out1')).map('in1'))
.add('x', SomeFunc(..., in1='b.out1')) # map automatically continues
.add('c', ImageMaths(..., in1='wf2.node1.out1')).join('b.in1')
wf1.run()
.add
will return a composite reference to both the workflow and the interface added
- create a DSL (domain specific language - like WDL/CWL) instead of using Python
@djarecka @Shotgunosine @effigies @chrisfilo @oesteban - open for discussion.