Source code for causal_networkx.graphs.base

from abc import ABCMeta, abstractmethod
from typing import Any, List, Set, Union

import networkx as nx
from networkx.classes.reportviews import EdgeView, NodeView
from numpy.typing import NDArray


class BaseGraph(metaclass=ABCMeta):
    @property
    @abstractmethod
    def nodes(self) -> NodeView:
        pass

    @abstractmethod
    def adjacencies(self, u) -> List[Any]:
        pass

    @abstractmethod
    def has_adjacency(self, u, v) -> bool:
        pass

    @abstractmethod
    def add_node(self, node_for_adding, **attr):
        pass

    @abstractmethod
    def remove_node(self, u):
        pass


[docs]class MarkovianGraph(BaseGraph, metaclass=ABCMeta): @property @abstractmethod def edges(self) -> EdgeView: pass @abstractmethod def children(self, n) -> NodeView: pass @abstractmethod def parents(self, n) -> NodeView: pass @abstractmethod def add_edge(self, u_of_edge, v_of_edge, **attr): pass @abstractmethod def remove_edge(self, u, v): pass @abstractmethod def to_adjacency_graph(self) -> NDArray: pass @abstractmethod def compute_full_graph(self, to_networkx: bool = False) -> Union[nx.Graph, BaseGraph]: pass
[docs]class SemiMarkovianGraph(MarkovianGraph, metaclass=ABCMeta): @property @abstractmethod def bidirected_edges(self) -> EdgeView: pass @property @abstractmethod def c_components(self) -> List[Set]: pass @abstractmethod def has_bidirected_edge(self, u, v) -> bool: pass @abstractmethod def add_bidirected_edge(self, u_of_edge, v_of_edge, **attr): pass @abstractmethod def remove_bidirected_edge(self, u, v): pass
[docs]class MarkovEquivalenceClass(BaseGraph, metaclass=ABCMeta): @abstractmethod def possible_parents(self, n) -> NodeView: pass @abstractmethod def possible_children(self, n) -> NodeView: pass