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], ]))
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
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)
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)
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)
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