def test_nbunch_argument(self): G=nx.DiGraph() G.add_edges_from([(1,2), (2,3), (1,4), (1,5), (2,6)]) assert_equal(nx.topological_sort(G), [1, 2, 3, 6, 4, 5]) assert_equal(nx.topological_sort_recursive(G), [1, 5, 4, 2, 6, 3]) assert_equal(nx.topological_sort(G,[1]), [1, 2, 3, 6, 4, 5]) assert_equal(nx.topological_sort_recursive(G,[1]), [1, 5, 4, 2, 6, 3]) assert_equal(nx.topological_sort(G,[5]), [5]) assert_equal(nx.topological_sort_recursive(G,[5]), [5])
def test_topological_sort1(self): DG=nx.DiGraph() DG.add_edges_from([(1,2),(1,3),(2,3)]) assert_equal(nx.topological_sort(DG),[1, 2, 3]) assert_equal(nx.topological_sort_recursive(DG),[1, 2, 3]) DG.add_edge(3,2) assert_raises(nx.NetworkXUnfeasible, nx.topological_sort, DG) assert_raises(nx.NetworkXUnfeasible, nx.topological_sort_recursive, DG) DG.remove_edge(2,3) assert_equal(nx.topological_sort(DG),[1, 3, 2]) assert_equal(nx.topological_sort_recursive(DG),[1, 3, 2])
def causal_order(self): G = self.g.copy() # remove cycle for s, d in G.edges(): if G.has_edge(d, s): if G.get_edge_data(s, d).has_key("read"): G.remove_edge(s, d) return nx.topological_sort_recursive(G)
def get_stack_order(cls, desired_stacks): graph = cls.create_stacks_directed_graph(desired_stacks) try: order = networkx.topological_sort_recursive(graph) except NetworkXUnfeasible as e: raise Exception("Could not define an order of stacks: {0}".format(e)) return cls.filter_unmanaged_stacks(desired_stacks, order)
def get_stack_order(cls, desired_stacks): graph = cls.create_stacks_directed_graph(desired_stacks) try: order = networkx.topological_sort_recursive(graph) except NetworkXUnfeasible as e: cls.analyse_cyclic_dependencies(graph) raise InvalidDependencyGraphException("Could not define an order of stacks: {0}".format(e)) return cls.filter_unmanaged_stacks(desired_stacks, order)
def get_stack_order(cls, desired_stacks): graph = cls.create_stacks_directed_graph(desired_stacks) try: order = networkx.topological_sort_recursive(graph) except NetworkXUnfeasible as e: cls.analyse_cyclic_dependencies(graph) raise InvalidDependencyGraphException( "Could not define an order of stacks: {0}".format(e)) return cls.filter_unmanaged_stacks(desired_stacks, order)
def test_topological_sort2(self): DG = nx.DiGraph({1: [2], 2: [3], 3: [4], 4: [5], 5: [1], 11: [12], 12: [13], 13: [14], 14: [15]}) assert_raises(nx.NetworkXUnfeasible, nx.topological_sort, DG) assert_raises(nx.NetworkXUnfeasible, nx.topological_sort_recursive, DG) assert_false(nx.is_directed_acyclic_graph(DG)) DG.remove_edge(1, 2) assert_equal(nx.topological_sort_recursive(DG), [11, 12, 13, 14, 15, 2, 3, 4, 5, 1]) assert_equal(nx.topological_sort(DG), [11, 12, 13, 14, 15, 2, 3, 4, 5, 1]) assert_true(nx.is_directed_acyclic_graph(DG))
def test_topological_sort3(self): DG=nx.DiGraph() DG.add_edges_from([(1,i) for i in range(2,5)]) DG.add_edges_from([(2,i) for i in range(5,9)]) DG.add_edges_from([(6,i) for i in range(9,12)]) DG.add_edges_from([(4,i) for i in range(12,15)]) assert_equal(nx.topological_sort_recursive(DG), [1, 4, 14, 13, 12, 3, 2, 7, 6, 11, 10, 9, 5, 8]) assert_equal(nx.topological_sort(DG), [1, 2, 8, 5, 6, 9, 10, 11, 7, 3, 4, 12, 13, 14]) DG.add_edge(14,1) assert_raises(nx.NetworkXUnfeasible, nx.topological_sort, DG) assert_raises(nx.NetworkXUnfeasible, nx.topological_sort_recursive, DG)
def test_topological_sort2(self): DG=nx.DiGraph({1:[2],2:[3],3:[4], 4:[5],5:[1],11:[12], 12:[13],13:[14],14:[15]}) assert_raises(nx.NetworkXUnfeasible, nx.topological_sort, DG) assert_raises(nx.NetworkXUnfeasible, nx.topological_sort_recursive, DG) assert_false(nx.is_directed_acyclic_graph(DG)) DG.remove_edge(1,2) assert_equal(nx.topological_sort_recursive(DG), [11, 12, 13, 14, 15, 2, 3, 4, 5, 1]) assert_equal(nx.topological_sort(DG), [11, 12, 13, 14, 15, 2, 3, 4, 5, 1]) assert_true(nx.is_directed_acyclic_graph(DG))
def test_topological_sort3(self): DG=nx.DiGraph() DG.add_edges_from([(1,i) for i in range(2,5)]) DG.add_edges_from([(2,i) for i in range(5,9)]) DG.add_edges_from([(6,i) for i in range(9,12)]) DG.add_edges_from([(4,i) for i in range(12,15)]) def validate(order): ok_(isinstance(order, list)) assert_equal(set(order), set(DG)) for u, v in combinations(order, 2): assert_false(nx.has_path(DG, v, u)) validate(nx.topological_sort_recursive(DG)) validate(nx.topological_sort(DG)) DG.add_edge(14,1) assert_raises(nx.NetworkXUnfeasible, nx.topological_sort, DG) assert_raises(nx.NetworkXUnfeasible, nx.topological_sort_recursive, DG)
def test_topological_sort3(self): DG = nx.DiGraph() DG.add_edges_from([(1, i) for i in range(2, 5)]) DG.add_edges_from([(2, i) for i in range(5, 9)]) DG.add_edges_from([(6, i) for i in range(9, 12)]) DG.add_edges_from([(4, i) for i in range(12, 15)]) def validate(order): ok_(isinstance(order, list)) assert_equal(set(order), set(DG)) for u, v in combinations(order, 2): assert_false(nx.has_path(DG, v, u)) validate(nx.topological_sort_recursive(DG)) validate(nx.topological_sort(DG)) DG.add_edge(14, 1) assert_raises(nx.NetworkXUnfeasible, nx.topological_sort, DG) assert_raises(nx.NetworkXUnfeasible, nx.topological_sort_recursive, DG)
def cycle_exists(G): # - G is a directed graph color = {u: "white" for u in G} # - All nodes are initially white found_cycle = [False] # - Define found_cycle as a list so we can change for u in G: # - Visit all nodes. if color[u] == "white": dfs_visit(G, u, color, found_cycle) if found_cycle[0]: break if found_cycle[0] == False: print("given schedule is ******************* CONFLICT***************") #print(nx.topological_sort(G,nbunch=None,reverse=False)) print(nx.topological_sort_recursive(G, nbunch=None, reverse=False)) else: print("cycle found so ... -->>") print( "given schedule is ******************* NOT CONFLICT ***************" ) return found_cycle[0]
def return_alphabet(self, graph): #This is a library function for validation return nx.topological_sort_recursive(graph)
def ts(G): return nx.topological_sort_recursive(G)
def test_topological_sort5(self): G=nx.DiGraph() G.add_edge(0,1) assert_equal(nx.topological_sort_recursive(G), [0,1]) assert_equal(nx.topological_sort(G), [0,1])
#print downstream order = set() length = len(sys.argv) i = 1 print G.degree(sys.argv[i]) print G.degree(sys.argv[2]) print nx.ancestors(G, sys.argv[i]) print nx.ancestors(G, sys.argv[2]) print len(nx.ancestors(G, sys.argv[i])) print len(nx.ancestors(G, sys.argv[2])) print "ancestors^^" print "**" print sys.argv[1] print nx.topological_sort_recursive(G, nx.ancestors(G, sys.argv[i])) print "&&&&&&&&&&&&&&&&&&&&&&&" print sys.argv[2] print nx.topological_sort_recursive(G, nx.ancestors(G, sys.argv[2])) print len(nx.topological_sort(G, nx.ancestors(G, sys.argv[i]))) print "^^^^^^^^^^^^^^^^^^^^^^^^^^" depends = [] while (i < length): order = nx.topological_sort_recursive(G, nx.ancestors(G, sys.argv[i])) for o in order: depends.append(o) i = i + 1 print "**********************" #print len(nx.topological_sort_recursive(G,nx.ancestors(G,sys.argv[i]))) print "**"