Source code for ewokscore.bindings

from typing import Any, Optional, List, Union
from .graph import load_graph as _load_graph
from .graph import TaskGraph
from .graph.execute import sequential
from .graph.graph_io import update_default_inputs
from .events import job_decorator as execute_graph_decorator

__all__ = [
    "execute_graph",
    "load_graph",
    "save_graph",
    "convert_graph",
    "graph_is_supported",
    "execute_graph_decorator",
]


[docs] def load_graph( graph: Any, inputs: Optional[List[dict]] = None, **load_options ) -> TaskGraph: taskgraph = _load_graph(source=graph, **load_options) if inputs: update_default_inputs(taskgraph.graph, inputs) return taskgraph
[docs] def save_graph(graph: TaskGraph, destination, **save_options) -> Union[str, dict]: return graph.dump(destination, **save_options)
[docs] def convert_graph( source, destination, inputs: Optional[List[dict]] = None, load_options: Optional[dict] = None, save_options: Optional[dict] = None, ) -> Union[str, dict]: if load_options is None: load_options = dict() if save_options is None: save_options = dict() graph = load_graph(source, inputs=inputs, **load_options) return save_graph(graph, destination, **save_options)
[docs] @execute_graph_decorator() def execute_graph( graph, inputs: Optional[List[dict]] = None, load_options: Optional[dict] = None, **execute_options ): if load_options is None: load_options = dict() taskgraph = load_graph(graph, inputs=inputs, **load_options) return sequential.execute_graph(taskgraph.graph, **execute_options)
[docs] def graph_is_supported(graph: TaskGraph) -> bool: return not graph.is_cyclic and not graph.has_conditional_links