Source code for dodiscover._protocol
from typing import Dict, FrozenSet, Iterable, Protocol
import networkx as nx
[docs]class Graph(Protocol):
"""Protocol for graphs to work with dodiscover algorithms."""
@property
def nodes(self) -> Iterable:
"""Return an iterable over nodes in graph."""
pass
[docs] def edges(self, data=None) -> Iterable:
"""Return an iterable over edge tuples in graph."""
pass
[docs] def has_edge(self, u, v, edge_type="any") -> bool:
"""Check if graph has an edge for a specific edge type."""
pass
[docs] def add_node(self, node_for_adding, **attr) -> None:
"""Add a node to the graph."""
pass
[docs] def remove_node(self, u) -> None:
"""Remove a node from the graph."""
pass
[docs] def remove_edges_from(self, edges) -> None:
"""Remove a set of edges from the graph."""
pass
[docs] def add_edge(self, u, v, edge_type="all") -> None:
"""Add an edge to the graph."""
pass
[docs] def remove_edge(self, u, v, edge_type="all") -> None:
"""Remove an edge from the graph."""
pass
[docs] def neighbors(self, node) -> Iterable:
"""Iterate over all nodes that have any edge connection with 'node'."""
pass
[docs] def to_undirected(self) -> nx.Graph:
"""Convert a graph to a fully undirected networkx graph.
All nodes are connected by an undirected edge if there are any
edges between the two.
"""
pass
[docs] def subgraph(self, nodes):
"""Get subgraph based on nodes."""
pass
[docs] def copy(self):
"""Create a copy of the graph."""
pass
[docs]class EquivalenceClass(Graph, Protocol):
"""Protocol for equivalence class of graphs."""
@property
def excluded_triples(self) -> Dict[FrozenSet, None]:
"""A set of triples that are excluded from orientation."""
pass
@property
def directed_edge_name(self) -> str:
"""Name of the directed edges."""
pass
@property
def undirected_edge_name(self) -> str:
"""Name of the undirected edges."""
pass
@property
def circle_edge_name(self) -> str:
"""Name of the circle edge endpoints."""
pass
@property
def bidirected_edge_name(self) -> str:
"""Name of the bidirected edges."""
pass
[docs] def orient_uncertain_edge(self, u, v) -> None:
"""Orients an uncertain edge in the equivalence class to directed ``'u'*->'v'``."""
pass
[docs] def mark_unfaithful_triple(self, v_i, u, v_j) -> None:
"""Mark a triple as unfaithful, and put it in the excluded triple set."""
pass
[docs] def predecessors(self, node) -> Iterable:
"""Nodes with directed edges pointing to 'node'."""
pass
[docs] def successors(self, node) -> Iterable:
"""Nodes with directed edges pointing from 'node'."""
pass