示例#1
0
文件: jointree.py 项目: ekko2/py-bbn
 def __init__(self):
     """
     Ctor.
     """
     Ug.__init__(self)
     self.potentials = dict()
     self.evidences = dict()
     self.listener = None
示例#2
0
 def __init__(self):
     """
     Ctor.
     """
     Ug.__init__(self)
     self.potentials = dict()
     self.evidences = dict()
     self.listener = None
     self.parent_info = defaultdict(set)
示例#3
0
    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
示例#4
0
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]
示例#5
0
 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