Source code for ewokscore.engine_interface
from pathlib import Path
from abc import ABC, abstractmethod
from typing import Any, Optional, Union, List
from .graph import TaskGraph
from .events.contexts import RawExecInfoType
[docs]
class WorkflowEngine(ABC):
"""Python projects that provide Ewoks engines for deserializing, serializing and executing
computational Ewoks graphs can implement this interface.
To make it discoverable it can be added as an entry-point the the project. For
example in a `pyproject.toml` file:
.. code-block: toml
[project.entry-points."ewoks.engines"]
"<engine-name>" = "<project-name>.engine:MyWorkflowEngine"
"""
[docs]
@abstractmethod
def execute_graph(
self,
graph: TaskGraph,
*,
inputs: Optional[List[dict]] = None,
load_options: Optional[dict] = None,
varinfo: Optional[dict] = None,
execinfo: Optional[RawExecInfoType] = None,
task_options: Optional[dict] = None,
outputs: Optional[List[dict]] = None,
merge_outputs: Optional[bool] = True,
# Engine specific:
**execute_options,
) -> Optional[dict]:
"""Execute a computional Ewoks graph."""
pass
[docs]
class WorkflowEngineWithSerialization(WorkflowEngine):
"""Ewoks engines with graph serialization capabilities."""
[docs]
@abstractmethod
def deserialize_graph(
self,
graph: Any,
*,
inputs: Optional[List[dict]] = None,
representation: Optional[str] = None,
root_dir: Optional[Union[str, Path]] = None,
root_module: Optional[str] = None,
# Serializer specific:
**deserialize_options,
) -> TaskGraph:
"""Convert a computational graph representation to the canonical in-memory representation `TaskGraph`."""
pass
[docs]
@abstractmethod
def serialize_graph(
self,
graph: TaskGraph,
destination: Any,
*,
representation: Optional[str] = None,
# Serializer specific:
**serialize_options,
) -> Any:
"""Convert the canonical computational graph representation `TaskGraph` to another representation."""
pass
[docs]
@abstractmethod
def get_graph_representation(self, graph: Any) -> Optional[str]:
"""Return the representation if the engine recognizes the graph object."""
pass