Automatic loops

From VistrailsWiki
Revision as of 16:18, 17 January 2014 by Tommy (talk | contribs)
Jump to navigation Jump to search

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)

References

How Taverna does it: http://dev.mygrid.org.uk/wiki/display/taverna/Loops