def test_nodes(self): graph = Graph() self.assertEqual(graph.node_list(), []) o1 = object() o1b = object() o2 = object() graph.add_node(1, o1) graph.add_node(1, o1b) graph.add_node(2, o2) graph.add_node(3) self.assertRaises(TypeError, graph.add_node, []) self.assertTrue(graph.node_data(1) is o1) self.assertTrue(graph.node_data(2) is o2) self.assertTrue(graph.node_data(3) is None) self.assertTrue(1 in graph) self.assertTrue(2 in graph) self.assertTrue(3 in graph) self.assertEqual(graph.number_of_nodes(), 3) self.assertEqual(graph.number_of_hidden_nodes(), 0) self.assertEqual(graph.hidden_node_list(), []) self.assertEqual(list(sorted(graph)), [1, 2, 3]) graph.hide_node(1) graph.hide_node(2) graph.hide_node(3) self.assertEqual(graph.number_of_nodes(), 0) self.assertEqual(graph.number_of_hidden_nodes(), 3) self.assertEqual(list(sorted(graph.hidden_node_list())), [1, 2, 3]) self.assertFalse(1 in graph) self.assertFalse(2 in graph) self.assertFalse(3 in graph) graph.add_node(1) self.assertFalse(1 in graph) graph.restore_node(1) self.assertTrue(1 in graph) self.assertFalse(2 in graph) self.assertFalse(3 in graph) graph.restore_all_nodes() self.assertTrue(1 in graph) self.assertTrue(2 in graph) self.assertTrue(3 in graph) self.assertEqual(list(sorted(graph.node_list())), [1, 2, 3]) v = graph.describe_node(1) self.assertEqual(v, (1, o1, [], []))
def test_constructor(self): graph = Graph(iter([ (1, 2), (2, 3, 'a'), (1, 3), (3, 4), ])) self.assertEqual(graph.number_of_nodes(), 4) self.assertEqual(graph.number_of_edges(), 4) try: graph.edge_by_node(1,2) graph.edge_by_node(2,3) graph.edge_by_node(1,3) graph.edge_by_node(3,4) except GraphError: self.fail("Incorrect graph") self.assertEqual(graph.edge_data(graph.edge_by_node(2, 3)), 'a') self.assertRaises(GraphError, Graph, [(1,2,3,4)])
def davaj_trať(id_relace): ''' zahájí běh programu ''' from altgraph.Graph import Graph graf = Graph() cesty = davaj_cesty_z_relace(id_relace) # vložím cesty do grafu for cesta in cesty: graf.add_edge(cesta.body_v_cestě[0], cesta.body_v_cestě[-1], { 'id': cesta.id_cesty, 'pořadí': cesta.pořadí_cesty }) print('graf má {} vrcholů a {} hran'.format(graf.number_of_nodes(), graf.number_of_edges())) # projdu všechny vrcholy a vyberu ty, které mají pouze jednu hranu jednohrané_vrcholy = [] for bod in graf.node_list(): if graf.all_degree(bod) == 1: # print("vrchol {} vstupuje {} a vystupuje {} hran, celkem {}".format(bod, graf.inc_degree(bod), graf.out_degree(bod), graf.all_degree(bod))) jednohrané_vrcholy.append(bod) # jednohrané vrcholy musí být právě dva if len(jednohrané_vrcholy) != 2: raise ValueError( 'Tož ale graf musí být právě jeden počátek a právě jeden konec') # když má graf právě jeden začátek a právě jeden konec, možeme srovnat hrany, otočit je do jednoho směru else: print('jednohrané vrcholy', jednohrané_vrcholy) # tu práci obsatrá rekurzivně tato funkce, která graf pozmění seřadím_hrany_v_grafu(graf, jednohrané_vrcholy[0]) #včíl projdu už upravený, správně natočený graf a načtu všechny body najdu_body_pro_hrany_v_grafu(graf)