def test_is_bipartite(self): biadjacency = star_wars(metadata=False) adjacency = bipartite2undirected(biadjacency) self.assertTrue(is_bipartite(adjacency)) bipartite, pred = is_bipartite(adjacency, return_biadjacency=True) self.assertEqual(bipartite, True) self.assertEqual(np.all(biadjacency.data == pred.data), True) adjacency = sparse.identity(2, format='csr') bipartite, biadjacency = is_bipartite(adjacency, return_biadjacency=True) self.assertEqual(bipartite, False) self.assertIsNone(biadjacency) adjacency = directed2undirected(cyclic_digraph(3)) bipartite, biadjacency = is_bipartite(adjacency, return_biadjacency=True) self.assertEqual(bipartite, False) self.assertIsNone(biadjacency) with self.assertRaises(ValueError): is_bipartite(cyclic_digraph(3)) self.assertTrue(~is_bipartite(sparse.eye(3)))
def test_largest_cc(self): adjacency = cyclic_digraph(3) adjacency += adjacency.T largest_cc, indices = largest_connected_component(adjacency, return_labels=True) self.assertAlmostEqual( np.linalg.norm(largest_cc.toarray() - np.array([[0, 1, 1], [1, 0, 1], [1, 1, 0]])), 0) self.assertEqual(np.linalg.norm(indices - np.array([0, 1, 2])), 0) biadjacency = star_wars(metadata=False) largest_cc, indices = largest_connected_component(biadjacency, return_labels=True) self.assertAlmostEqual( np.linalg.norm( largest_cc.toarray() - np.array([[1, 0, 1], [1, 0, 0], [1, 1, 1], [0, 1, 1]])), 0) self.assertEqual(np.linalg.norm(indices[0] - np.array([0, 1, 2, 3])), 0) self.assertEqual(np.linalg.norm(indices[1] - np.array([0, 1, 2])), 0) self.assertTrue( isinstance( largest_connected_component(adjacency, return_labels=False), sparse.csr_matrix))
def test_scaling(self): adjacency = cyclic_digraph(3) with self.assertRaises(ValueError): check_scaling(-1, adjacency, regularize=True) adjacency = test_graph_disconnect() with self.assertRaises(ValueError): check_scaling(-1, adjacency, regularize=False)
def test_is_acyclic(self): adjacency_with_self_loops = sparse.identity(2, format='csr') self.assertFalse(is_acyclic(adjacency_with_self_loops)) directed_cycle = cyclic_digraph(3) self.assertFalse(is_acyclic(directed_cycle)) undirected_line = linear_graph(2) self.assertFalse(is_acyclic(undirected_line)) acyclic_graph = linear_digraph(2) self.assertTrue(is_acyclic(acyclic_graph))
def test_dir2undir(self): n = 3 adjacency = cyclic_digraph(n) ref = directed2undirected(adjacency) self.assertEqual(ref.shape, adjacency.shape) self.assertTrue(is_symmetric(ref)) adjacency = house() n = adjacency.shape[0] error = 0.5 * directed2undirected(adjacency) - adjacency self.assertEqual(error.nnz, 0) slr = SparseLR(adjacency, [(np.zeros(n), np.zeros(n))]) slr = 0.5 * directed2undirected(slr) self.assertEqual(slr.shape, (n, n)) x = np.random.randn(n) error = np.linalg.norm(slr.dot(x) - adjacency.dot(x)) self.assertAlmostEqual(error, 0)
def setUp(self) -> None: """Load graph for tests.""" self.adjacency = cyclic_digraph(3)
def setUp(self): """Simple graphs for tests.""" self.adjacency = cyclic_digraph(3) self.dense_mat = np.identity(3)
def test_shortest_paths(self): with self.assertRaises(ValueError): shortest_path(cyclic_digraph(3), [0, 1], [0, 1])