def test_structural_hamming_distance(adjacency_matrix_1, adjacency_matrix_2, expected_shd): graph_1 = Graph(adjacency_matrix=adjacency_matrix_1) graph_2 = Graph(adjacency_matrix=adjacency_matrix_2) actual_shd = graph_1.structural_hamming_distance(graph_2) assert expected_shd == actual_shd
def test_adjacency_lists_to_adjacency_matrix(adjacency_lists, expected_adjacency_matrix): actual_adjacency_matrix = Graph.adjacency_lists_to_adjacency_matrix( adjacency_lists=adjacency_lists) assert np.all(actual_adjacency_matrix == expected_adjacency_matrix)
def validate_directed_graph_adjacency_matrix(matrix): """ Checks that a matrix is a valid adjacency matrix for a directed graph. Parameters ---------- matrix : array_like The matrix to check. Returns ------- bool Whether the matrix to check is a valid adjacency matrix for a directed graph. """ if not Graph.validate_binary_matrix(matrix): return False # Check that there are no self-loops no_self_loops = np.asarray( [matrix[i, i] == 0 for i in range(matrix.shape[0])]) if not np.all(no_self_loops): return False # Check that there are no undirected edges for i in range(matrix.shape[0]): for j in range(i): if matrix[i, j] == 1 and matrix[j, i] == 1: return False return True
def test_adjacency_matrix_to_adjacency_lists(adjacency_matrix, expected_adjacency_lists): actual_adjacency_lists = Graph.adjacency_matrix_to_adjacency_lists( adjacency_matrix=adjacency_matrix) adjacency_lists_equal = [] for l1, l2 in zip(actual_adjacency_lists, expected_adjacency_lists): adjacency_lists_equal.append(set(l1) == set(l2)) assert all(adjacency_lists_equal)
def test_crash_compute_edge_types(): with pytest.raises(ImpossibleEdgeConfiguration): Graph.compute_edge_type(-1, 1)
def test_compute_edge_types(m_ij, m_ji, expected_typed_edge): actual_typed_edge = Graph.compute_edge_type(m_ij=m_ij, m_ji=m_ji) assert actual_typed_edge == expected_typed_edge
def test_validate_adjacency_matrix(matrix, expected): assert Graph.validate_binary_matrix(matrix) == expected
def test_adjacency_list_to_edges(adjacency_lists, expected_typed_edges): actual_typed_edges = Graph.adjacency_lists_to_edges(adjacency_lists) assert actual_typed_edges == expected_typed_edges
def test_edges_to_adjacency_matrix(edges, expected_adjacency_matrix): actual_adjacency_matrix = Graph.edges_to_adjacency_matrix(edges) assert np.all(actual_adjacency_matrix == expected_adjacency_matrix)
def test_edges_to_adjacency_lists(edges, expected_adjacency_lists): actual_adjacency_lists = Graph.edges_to_adjacency_lists(edges) assert actual_adjacency_lists == expected_adjacency_lists
def test_adjacency_matrix_to_edges(adjacency_matrix, expected_typed_edges): actual_edge_types = Graph.adjacency_matrix_to_edges(adjacency_matrix) assert actual_edge_types == expected_typed_edges