Difference between revisions of "Automatic loops"
Jump to navigation
Jump to search
Line 23: | Line 23: | ||
** can probably be settable in module conf (and default to pairwise) | ** can probably be settable in module conf (and default to pairwise) | ||
== References == | === Implementation === | ||
The branch automatic-loops contains a working version using a ListOf module type. | |||
=== References === | |||
How Taverna does it: | How Taverna does it: | ||
http://dev.mygrid.org.uk/wiki/display/taverna/Loops | http://dev.mygrid.org.uk/wiki/display/taverna/Loops |
Revision as of 11:34, 21 January 2014
This page discusses the possibility or getting rid of the awkward controlflow-style looping. We could allow modules to automatically loop if a module's port gets a list of values (or multiple connections).
typed lists?
- list shouldn't be a type like any other
- allow connection List<T> -> T
- allow connection T -> List<T> (make a one-element list, or actual list if the module loops)
- RR proposes: don't duplicate modules to loop, just make update() call compute() several times
- probably needs the dont-use-modules-as-data work -- modules that return themselves are going to break
- add logic in vistrails_module:Module:
if inputport T and input list<T>, call compute several times and build list of outputs
- coupling problem
def test_module(a:T, b:T) -> (c:T, d:T):
- c = a*b
- d = a+b
- test_module([1, 2], [3, 4])
- is it c = [3, 8], d = [4, 6]? (pairwise)
- is it c = [3, 4, 6, 8], d = [4, 5, 5, 6]? (cartesian)
- can probably be settable in module conf (and default to pairwise)
Implementation
The branch automatic-loops contains a working version using a ListOf module type.
References
How Taverna does it: http://dev.mygrid.org.uk/wiki/display/taverna/Loops