7.2.6.19. SubDispatch

class SubDispatch(dsp, outputs=None, cutoff=None, inputs_dist=None, wildcard=False, no_call=False, shrink=False, rm_unused_nds=False, output_type='all')[source]

It dispatches a given Dispatcher() like a function.

This function takes a sequence of dictionaries as input that will be combined before the dispatching.

Returns:A function that executes the dispatch of the given Dispatcher().
Return type:callable

See also

dispatch(), combine_dicts()

Example:

>>> from schedula import Dispatcher
>>> sub_dsp = Dispatcher(name='Sub-dispatcher')
...
>>> def fun(a):
...     return a + 1, a - 1
...
>>> sub_dsp.add_function('fun', fun, ['a'], ['b', 'c'])
'fun'
>>> dispatch = SubDispatch(sub_dsp, ['a', 'b', 'c'], output_type='dict')
>>> dsp = Dispatcher(name='Dispatcher')
>>> dsp.add_function('Sub-dispatch', dispatch, ['d'], ['e'])
'Sub-dispatch'

digraph dmap { graph [ratio=1] node [style=filled] label = <dmap> splines = ortho style = filled 352 [label=<<TABLE border="0" cellspacing="0"><TR><TD border="0" colspan="2" href="./dispatcher-7240d75f5a430c6b49362c1e8a725efea2e8528c/Sub-dispatch.html">Sub-dispatch</TD></TR></TABLE>> fillcolor=yellow shape=note style=filled tooltip="Sub-dispatcher"] 353 [label=<<TABLE border="0" cellspacing="0"><TR><TD border="0" colspan="2">d</TD></TR></TABLE>> fillcolor=cyan shape=box style="rounded,filled" tooltip=d] 354 [label=<<TABLE border="0" cellspacing="0"><TR><TD border="0" colspan="2">e</TD></TR></TABLE>> fillcolor=cyan shape=box style="rounded,filled" tooltip=e] 353 -> 352 352 -> 354 }

The Dispatcher output is:

>>> o = dsp.dispatch(inputs={'d': {'a': 3}})

digraph workflow { graph [ratio=1] node [style=filled] label = <workflow> splines = ortho style = filled 368 [label=<<TABLE border="0" cellspacing="0"><TR><TD border="0" colspan="2" href="./dispatcher-8f655bb679d0596fb301a5d0f266efecf5acdac4/Sub-dispatch.html">Sub-dispatch</TD></TR><TR><TD align="RIGHT" border="1">distance</TD><TD align="LEFT" border="1">1.0</TD></TR><TR><TD align="RIGHT" border="1">started</TD><TD align="LEFT" border="1">2018-06-05T10:44:21.905096</TD></TR><TR><TD align="RIGHT" border="1">duration</TD><TD align="LEFT" border="1">0:00:00.000633</TD></TR></TABLE>> fillcolor=yellow shape=note style=filled tooltip="Sub-dispatcher"] 369 [label=<<TABLE border="0" cellspacing="0"><TR><TD border="0" colspan="2" href="./dispatcher-8f655bb679d0596fb301a5d0f266efecf5acdac4/d-output.html">d</TD></TR><TR><TD align="RIGHT" border="1">distance</TD><TD align="LEFT" border="1">0.0</TD></TR></TABLE>> fillcolor=cyan shape=box style="rounded,filled" tooltip=d] 370 [label=<<TABLE border="0" cellspacing="0"><TR><TD border="0" colspan="2" href="./dispatcher-8f655bb679d0596fb301a5d0f266efecf5acdac4/e-output.html">e</TD></TR><TR><TD align="RIGHT" border="1">distance</TD><TD align="LEFT" border="1">2.0</TD></TR></TABLE>> fillcolor=cyan shape=box style="rounded,filled" tooltip=e] 371 [label=start fillcolor=red shape=egg] 371 -> 369 369 -> 368 368 -> 370 }

while, the Sub-dispatch is:

>>> sol = o.workflow.node['Sub-dispatch']['solution']
>>> sol
Solution([('a', 3), ('b', 4), ('c', 2)])
>>> sol == o['e']
True

digraph workflow { graph [ratio=1] node [style=filled] label = <workflow> splines = ortho style = filled 384 [label=<<TABLE border="0" cellspacing="0"><TR><TD border="0" colspan="2" href="./dispatcher-3723aa45f6e69d24535003cb5cab2f7e2f0678bf/a-output.html">a</TD></TR><TR><TD align="RIGHT" border="1">distance</TD><TD align="LEFT" border="1">0.0</TD></TR></TABLE>> fillcolor=cyan shape=box style="rounded,filled" tooltip=a] 385 [label=<<TABLE border="0" cellspacing="0"><TR><TD border="0" colspan="2" href="./dispatcher-3723aa45f6e69d24535003cb5cab2f7e2f0678bf/b-output.html">b</TD></TR><TR><TD align="RIGHT" border="1">distance</TD><TD align="LEFT" border="1">2.0</TD></TR></TABLE>> fillcolor=cyan shape=box style="rounded,filled" tooltip=b] 386 [label=<<TABLE border="0" cellspacing="0"><TR><TD border="0" colspan="2" href="./dispatcher-3723aa45f6e69d24535003cb5cab2f7e2f0678bf/c-output.html">c</TD></TR><TR><TD align="RIGHT" border="1">distance</TD><TD align="LEFT" border="1">2.0</TD></TR></TABLE>> fillcolor=cyan shape=box style="rounded,filled" tooltip=c] 387 [label=<<TABLE border="0" cellspacing="0"><TR><TD border="0" colspan="2" href="./dispatcher-3723aa45f6e69d24535003cb5cab2f7e2f0678bf/fun.html">fun</TD></TR><TR><TD align="RIGHT" border="1">distance</TD><TD align="LEFT" border="1">1.0</TD></TR><TR><TD align="RIGHT" border="1">started</TD><TD align="LEFT" border="1">2018-06-05T10:44:22.021651</TD></TR><TR><TD align="RIGHT" border="1">duration</TD><TD align="LEFT" border="1">0:00:00.000020</TD></TR></TABLE>> fillcolor=springgreen shape=box tooltip=fun] 388 [label=start fillcolor=red shape=egg] 387 -> 385 384 -> 387 388 -> 384 387 -> 386 }

Methods

__init__ Initializes the Sub-dispatch.
copy
get_node Returns a sub node of a dispatcher.
plot Plots the Dispatcher with a graph in the DOT language with Graphviz.
search_node_description
web Creates a dispatcher Flask app.
__init__(dsp, outputs=None, cutoff=None, inputs_dist=None, wildcard=False, no_call=False, shrink=False, rm_unused_nds=False, output_type='all')[source]

Initializes the Sub-dispatch.

Parameters:
  • dsp (schedula.Dispatcher) – A dispatcher that identifies the model adopted.
  • outputs (list[str], iterable) – Ending data nodes.
  • cutoff (float, int, optional) – Depth to stop the search.
  • inputs_dist (dict[str, int | float], optional) – Initial distances of input data nodes.
  • wildcard (bool, optional) – If True, when the data node is used as input and target in the ArciDispatch algorithm, the input value will be used as input for the connected functions, but not as output.
  • no_call (bool, optional) – If True data node estimation function is not used.
  • shrink (bool, optional) – If True the dispatcher is shrink before the dispatch.
  • rm_unused_nds (bool, optional) – If True unused function and sub-dispatcher nodes are removed from workflow.
  • output_type (str, optional) –

    Type of function output:

    • ‘all’: a dictionary with all dispatch outputs.
    • ‘list’: a list with all outputs listed in outputs.
    • ‘dict’: a dictionary with any outputs listed in outputs.