예제 #1
0
def test_retrieve_adjacency_matrix():
    # No connections.
    cgpms = build_cgpm_no_connection()
    vtc = helpers.retrieve_variable_to_cgpm(cgpms)
    adj = helpers.retrieve_adjacency_matrix(cgpms, vtc)
    assert np.allclose(adj, np.asarray([
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
    ]))

    # V structure.
    cgpms = build_cgpms_v_structure()
    vtc = helpers.retrieve_variable_to_cgpm(cgpms)
    adj = helpers.retrieve_adjacency_matrix(cgpms, vtc)
    assert np.allclose(adj, np.asarray([
        [0, 0, 1],
        [0, 0, 1],
        [0, 0, 0],
    ]))

    # Markov chain.
    cgpms = build_cgpms_markov_chain()
    vtc = helpers.retrieve_variable_to_cgpm(cgpms)
    adj = helpers.retrieve_adjacency_matrix(cgpms, vtc)
    assert np.allclose(adj, np.asarray([
        [0, 0, 1],
        [0, 0, 0],
        [0, 1, 0],
    ]))

    # Complex.
    cgpms = build_cgpms_complex()
    vtc = helpers.retrieve_variable_to_cgpm(cgpms)
    adj = helpers.retrieve_adjacency_matrix(cgpms, vtc)
    assert np.allclose(
        adj,
        np.asarray([
            [0, 0, 0, 0],
            [0, 0, 0, 0],
            [1, 0, 0, 1],
            [1, 1, 0, 0],
        ]))

    # Fork.
    cgpms = build_cgpms_fork()
    vtc = helpers.retrieve_variable_to_cgpm(cgpms)
    adj = helpers.retrieve_adjacency_matrix(cgpms, vtc)
    assert np.allclose(adj, np.asarray([
        [0, 0, 0],
        [1, 0, 0],
        [1, 0, 0],
    ]))
예제 #2
0
def test_retrieve_variable_to_cgpm():
    cgpms = [
        CGpm(outputs=[0, 1, 5], inputs=[2]),
        CGpm(outputs=[2], inputs=[]),
        CGpm(outputs=[-1], inputs=[7]),
    ]
    for order in itertools.permutations(cgpms):
        variable_to_cgpm = helpers.retrieve_variable_to_cgpm(order)
        for v, c in variable_to_cgpm.iteritems():
            assert v in order[c].outputs
예제 #3
0
 def __init__(self, cgpms, accuracy=None, rng=None):
     if accuracy is None:
         accuracy = 1
     self.rng = rng if rng else gu.gen_rng(1)
     self.cgpms = hu.validate_cgpms(cgpms)
     self.accuracy = accuracy
     self.v_to_c = hu.retrieve_variable_to_cgpm(self.cgpms)
     self.adjacency = hu.retrieve_adjacency_list(self.cgpms, self.v_to_c)
     self.extraneous = hu.retrieve_extraneous_inputs(
         self.cgpms, self.v_to_c)
     self.topo = hu.topological_sort(self.adjacency)
예제 #4
0
파일: chain.py 프로젝트: stjordanis/cgpm2
 def __init__(self, cgpms, accuracy=None, rng=None):
     # Validate inputs.
     cgpms_valid = validate_cgpms(cgpms)
     # From constructor
     self.cgpms = flatten_cgpms(cgpms_valid, Chain)
     self.accuracy = accuracy or 1
     self.rng = rng if rng else get_prng(1)
     # Derived attributes.
     self.outputs = lchain(*[cgpm.outputs for cgpm in self.cgpms])
     self.inputs = lchain(*[cgpm.inputs for cgpm in self.cgpms])
     self.v_to_c = retrieve_variable_to_cgpm(self.cgpms)
     self.adjacency = retrieve_adjacency_list(self.cgpms, self.v_to_c)
     self.extraneous = retrieve_extraneous_inputs(self.cgpms, self.v_to_c)
     self.topo = topological_sort(self.adjacency)
예제 #5
0
def test_retrieve_extraneous_inputs():
    # No connections.
    cgpms = build_cgpm_no_connection()
    vtc = helpers.retrieve_variable_to_cgpm(cgpms)
    ext = helpers.retrieve_extraneous_inputs(cgpms, vtc)
    assert [] == ext

    # V structure.
    cgpms = build_cgpms_v_structure()
    vtc = helpers.retrieve_variable_to_cgpm(cgpms)
    ext = helpers.retrieve_extraneous_inputs(cgpms, vtc)
    assert [] == ext

    # Markov chain.
    cgpms = build_cgpms_markov_chain()
    vtc = helpers.retrieve_variable_to_cgpm(cgpms)
    ext = helpers.retrieve_extraneous_inputs(cgpms, vtc)
    assert [5] == ext

    # Complex.
    cgpms = build_cgpms_complex()
    vtc = helpers.retrieve_variable_to_cgpm(cgpms)
    ext = helpers.retrieve_extraneous_inputs(cgpms, vtc)
    assert set([0, -8, -9, -10, -11, -12]) == set(ext)
예제 #6
0
def test_retrieve_adjacency_list():
    # No connections.
    cgpms = build_cgpm_no_connection()
    vtc = helpers.retrieve_variable_to_cgpm(cgpms)
    adj = helpers.retrieve_adjacency_list(cgpms, vtc)
    assert {0: [], 1: [], 2: []} == adj

    # V structure.
    cgpms = build_cgpms_v_structure()
    vtc = helpers.retrieve_variable_to_cgpm(cgpms)
    adj = helpers.retrieve_adjacency_list(cgpms, vtc)
    assert {0: [], 1: [], 2: [0, 1]} == adj

    # Markov chain.
    cgpms = build_cgpms_markov_chain()
    vtc = helpers.retrieve_variable_to_cgpm(cgpms)
    adj = helpers.retrieve_adjacency_list(cgpms, vtc)
    assert {0: [], 1: [2], 2: [0]} == adj

    # Complex.
    cgpms = build_cgpms_complex()
    vtc = helpers.retrieve_variable_to_cgpm(cgpms)
    adj = helpers.retrieve_adjacency_list(cgpms, vtc)
    assert {0: [2, 3], 1: [3], 2: [], 3: [2]} == adj