Source code for mode.utils.types.graphs

"""Type classes for :mod:`mode.utils.graphs`."""
import abc
from typing import (
    Any, Generic, IO, Iterable, Mapping, MutableMapping, Sequence, TypeVar,
)

__all__ = ['GraphFormatterT', 'DependencyGraphT']

_T = TypeVar('_T')


[docs]class GraphFormatterT(Generic[_T]): """Type class for graph formatters.""" scheme: Mapping[str, Any] edge_scheme: Mapping[str, Any] node_scheme: Mapping[str, Any] term_scheme: Mapping[str, Any] graph_scheme: Mapping[str, Any] @abc.abstractmethod def __init__(self, root: Any = None, type: str = None, id: str = None, indent: int = 0, inw: str = ' ' * 4, **scheme: Any) -> None: ...
[docs] @abc.abstractmethod def attr(self, name: str, value: Any) -> str: ...
[docs] @abc.abstractmethod def attrs(self, d: Mapping = None, scheme: Mapping = None) -> str: ...
[docs] @abc.abstractmethod def head(self, **attrs: Any) -> str: ...
[docs] @abc.abstractmethod def tail(self) -> str: ...
[docs] @abc.abstractmethod def label(self, obj: _T) -> str: ...
[docs] @abc.abstractmethod def node(self, obj: _T, **attrs: Any) -> str: ...
[docs] @abc.abstractmethod def terminal_node(self, obj: _T, **attrs: Any) -> str: ...
[docs] @abc.abstractmethod def edge(self, a: _T, b: _T, **attrs: Any) -> str: ...
[docs] @abc.abstractmethod def FMT(self, fmt: str, *args: Any, **kwargs: Any) -> str: ...
[docs] @abc.abstractmethod def draw_edge(self, a: _T, b: _T, scheme: Mapping = None, attrs: Mapping = None) -> str: ...
[docs] @abc.abstractmethod def draw_node(self, obj: _T, scheme: Mapping = None, attrs: Mapping = None) -> str: ...
[docs]class DependencyGraphT(Generic[_T], Mapping[_T, _T]): """Type class for dependency graphs.""" adjacent: MutableMapping[_T, _T] @abc.abstractmethod def __init__(self, it: Iterable[_T] = None, formatter: GraphFormatterT[_T] = None) -> None: ...
[docs] @abc.abstractmethod def add_arc(self, obj: _T) -> None: ...
[docs] @abc.abstractmethod def add_edge(self, A: _T, B: _T) -> None: ...
[docs] @abc.abstractmethod def connect(self, graph: 'DependencyGraphT') -> None: ...
[docs] @abc.abstractmethod def topsort(self) -> Sequence: ...
[docs] @abc.abstractmethod def valency_of(self, obj: _T) -> int: ...
[docs] @abc.abstractmethod def update(self, it: Iterable) -> None: ...
[docs] @abc.abstractmethod def edges(self) -> Iterable: ...
[docs] @abc.abstractmethod def to_dot(self, fh: IO, *, formatter: GraphFormatterT[_T] = None) -> None: ...