def __init__(self): """ Ctor. """ Ug.__init__(self) self.potentials = dict() self.evidences = dict() self.listener = None
def __init__(self): """ Ctor. """ Ug.__init__(self) self.potentials = dict() self.evidences = dict() self.listener = None self.parent_info = defaultdict(set)
def moralize(dag): """ Moralizes a DAG. :param dag: DAG. :return: Moralized (undirected) graph. """ ug = Ug() for node in dag.get_nodes(): ug.add_node(node) for edge in dag.get_edges(): ug.add_edge(Edge(edge.i, edge.j, EdgeType.UNDIRECTED)) for node in dag.get_nodes(): parents = [dag.get_node(pa) for pa in dag.get_parents(node.id)] size = len(parents) for i in range(size): pa1 = parents[i] for j in range(i + 1, size): pa2 = parents[j] ug.add_edge(Edge(pa1, pa2, EdgeType.UNDIRECTED)) for node in dag.get_nodes(): parents = [dag.get_node(pa) for pa in dag.get_parents(node.id)] node.add_metadata('parents', parents) return ug
def test_ug_neighbor_tracking(): """ Tests tracking neighbors for undirected graph. :return: None. """ n0 = Node(0) n1 = Node(1) n2 = Node(2) e0 = Edge(n0, n1, EdgeType.UNDIRECTED) e1 = Edge(n1, n2, EdgeType.UNDIRECTED) g = Ug() g.add_node(n0) g.add_node(n1) g.add_edge(e0) g.add_edge(e1) assert 3 == len(g.neighbors) assert 1 == len(g.neighbors[0]) assert 2 == len(g.neighbors[1]) assert 1 == len(g.neighbors[2]) assert 1 in g.neighbors[0] assert 0 in g.neighbors[1] assert 2 in g.neighbors[1] assert 1 in g.neighbors[2] g.remove_node(0) assert 0 not in g.neighbors assert 2 == len(g.neighbors) assert 1 == len(g.neighbors[1]) assert 1 == len(g.neighbors[2]) assert 2 in g.neighbors[1] assert 1 in g.neighbors[2]
def duplicate(g): """ Duplicates a undirected graph. :param g: Undirected graph. :return: Undirected graph. """ ug = Ug() for node in g.get_nodes(): ug.add_node(node) for edge in g.get_edges(): ug.add_edge(edge) return ug