def exercise_specific(): from libtbx.topological_sort import stable from libtbx.topological_sort import strongly_connected_components as scc connections = [("a", ["b", "d"]), ("b", []), ("c", []), ("d", ["c"])] node_list = stable(connections=connections) assert node_list == ["b", "c", "d", "a"] assert scc(dict(connections)) == [] assert scc(dict(connections), omit_single_node_components=False) \ == [("b",), ("c",), ("d",), ("a",)] connections = [("a", ["d", "b"]), ("b", []), ("c", []), ("d", ["c"])] node_list = stable(connections=connections) assert node_list == ["b", "c", "d", "a"] assert scc(dict(connections)) == [] connections = [(0, [1]), (1, [2]), (2, [1, 3]), (3, [3])] node_list = stable(connections=connections) assert node_list == [3, 2, 1, 0] assert scc(dict(connections)) == [(1, 2)] connections = [("a", ["d", "b", "e"]), ("b", []), ("c", []), ("d", ["c"])] node_list = stable(connections=connections) assert node_list == ["b", "c", "d", "e", "a"] assert scc(dict(connections)) == [] # assert len( scc(successors_by_node={ "node1": ["successor1", "successor2"], "node2": ["successor1", "successor3"] }, omit_single_node_components=False)) == 5
def exercise_random(rng, n_nodes): # meant to discover endless loops or similar bugs connections = [] for i_node in range(n_nodes): if (rng.randrange(10) > 7): continue n_del = max(int(n_nodes * 0.6), rng.randrange(n_nodes)) deps = list(range(n_nodes)) for i_del in range(n_del): i = rng.randrange(len(deps)) del deps[i] connections.append((i_node, deps)) from libtbx.topological_sort import stable stable(connections=connections) # from libtbx.topological_sort import strongly_connected_components as scc from libtbx.topological_sort import find_path sbn = dict(connections) components = scc(successors_by_node=sbn) for component in components: for a in component: for b in component: path = find_path(successors_by_node=sbn, from_node=a, to_node=b) assert path is not None
def exercise_specific(): from libtbx.topological_sort import stable from libtbx.topological_sort import strongly_connected_components as scc connections = [ ("a", ["b", "d"]), ("b", []), ("c", []), ("d", ["c"])] node_list = stable(connections=connections) assert node_list == ["b", "c", "d", "a"] assert scc(dict(connections)) == [] assert scc(dict(connections), omit_single_node_components=False) \ == [("b",), ("c",), ("d",), ("a",)] connections = [ ("a", ["d", "b"]), ("b", []), ("c", []), ("d", ["c"])] node_list = stable(connections=connections) assert node_list == ["b", "c", "d", "a"] assert scc(dict(connections)) == [] connections = [ (0, [1]), (1, [2]), (2, [1,3]), (3, [3])] node_list = stable(connections=connections) assert node_list == [3,2,1,0] assert scc(dict(connections)) == [(1, 2)] connections = [ ("a", ["d", "b", "e"]), ("b", []), ("c", []), ("d", ["c"])] node_list = stable(connections=connections) assert node_list == ["b", "c", "d", "e", "a"] assert scc(dict(connections)) == [] # assert len(scc( successors_by_node={ "node1": ["successor1", "successor2"], "node2": ["successor1", "successor3"]}, omit_single_node_components=False)) == 5
def exercise_random(rng, n_nodes): # meant to discover endless loops or similar bugs connections = [] for i_node in xrange(n_nodes): if (rng.randrange(10) > 7): continue n_del = max(int(n_nodes*0.6), rng.randrange(n_nodes)) deps = range(n_nodes) for i_del in xrange(n_del): i = rng.randrange(len(deps)) del deps[i] connections.append((i_node, deps)) from libtbx.topological_sort import stable stable(connections=connections) # from libtbx.topological_sort import strongly_connected_components as scc from libtbx.topological_sort import find_path sbn = dict(connections) components = scc(successors_by_node=sbn) for component in components: for a in component: for b in component: path = find_path(successors_by_node=sbn, from_node=a, to_node=b) assert path is not None