| from abc import ABC, abstractmethod |
| from typing import List, Dict, Tuple, Any |
| from torch import Tensor |
| from dataclasses import dataclass |
|
|
| @dataclass |
| class GraphName: |
| feature_graph: str = 'feature_graph' |
| computational_graph: str = 'computational_graph' |
| |
| class Node(ABC): |
| @property |
| @abstractmethod |
| def name(self) -> str: |
| pass |
| |
| @abstractmethod |
| def __eq__(self, other) -> bool: |
| pass |
| |
| @abstractmethod |
| def __repr__(self) -> str: |
| pass |
| |
| @abstractmethod |
| def __hash__(self) -> int: |
| pass |
| |
| class Index(ABC): |
| @property |
| @abstractmethod |
| def as_index(self) -> Tuple[int|slice, ...]: |
| pass |
| |
| @abstractmethod |
| def __eq__(self, other) -> bool: |
| pass |
| |
| @abstractmethod |
| def __repr__(self) -> str: |
| pass |
| |
| @abstractmethod |
| def __hash__(self) -> int: |
| pass |
| |
| class Graph(ABC): |
| |
| @abstractmethod |
| def add_node(self, *args, **kwargs) -> None: |
| pass |
| |
| @abstractmethod |
| def add_edge(self, *args, **kwargs) -> None: |
| pass |
| |
| @abstractmethod |
| def delete_node(self, *args, **kwargs) -> None: |
| pass |
| |
| @abstractmethod |
| def delete_edge(self, *args, **kwargs) -> None: |
| pass |
| |
| @abstractmethod |
| def update_node(self, *args, **kwargs) -> None: |
| pass |
| |
| @abstractmethod |
| def update_edge(self, *args, **kwargs) -> None: |
| pass |
| |
| @abstractmethod |
| def find_deleted_nodes(self, *args, **kwargs) -> List[Tuple[Node, Index]]: |
| pass |
| |
| @abstractmethod |
| def find_deleted_edges(self, *args, **kwargs) -> List[Tuple[Node, Index, Node, Index]]: |
| pass |
| |
| @abstractmethod |
| def iterate_nodes(self) -> List[Tuple[Node, Index]]: |
| pass |
| |
| @abstractmethod |
| def iterate_edges(self) -> List[Tuple[Node, Index, Node, Index]]: |
| pass |
| |
| @abstractmethod |
| def forward(self, *args, **kwargs) -> Tuple[Tensor, Dict[str, Any]]: |
| pass |
| |
| def __call__(self, *args, **kwargs): |
| return self.forward(*args, **kwargs) |
| |
| @abstractmethod |
| def forward_backward_gradient(self, *args, **kwargs) -> Tuple[ |
| Dict[Tuple[Node, Index], Any], |
| Dict[Tuple[Node, Index, Node, Index], Any], |
| ]: |
| pass |
| |
| @abstractmethod |
| def model_setup(self) -> None: |
| pass |
| |
| @abstractmethod |
| def run_model(self, *args, **kwargs) -> Tuple[Any, Any]: |
| pass |
| |
| @abstractmethod |
| def graph_type(self) -> str: |
| pass |
| |