def main(): testcases = [f for f in os.listdir("test") if f[:3] == "inp"] os.chdir("test") count = 0 for fname in testcases: edges_list = [] with open(fname, "r") as f: n, m = map(int, f.readline().split(" ")[:2]) for i in xrange(m): u, v = map(int, f.readline().split(" ")[:2]) edges_list.append((u, v)) out = tsort.tsort(edges_list, n) fout = open(fname.replace("inp", "myout"), "w") for i in out: fout.write(str(i) + " ") fout.close() if filecmp.cmp(fname.replace("inp", "myout"), fname.replace("inp", "out")): count += 1 else: print "failed at", fname print "passed", count, "/", len(testcases)
def main(): t = tsort() t.input_file() # t.display_vertices() # t.display_edges() t.display_graph() t.display_sorting()
def sort_service(services): dependencies = {} for name, v in services.items(): if 'links' in v or 'depends_on' in v: dependencies[name] = set() if 'links' in v: for link in v['links']: dependencies[name].update({link}) if 'depends_on' in v: for d in v['depends_on']: dependencies[name].update({d}) if dependencies == {}: # TODO tidy up for this case return [services] order = flatten(tsort(dependencies, smallest_first=True)) sorted_services = [] for name in order: sorted_services.append({name: services[name]}) return sorted_services
def sort(services): dependencies = {} for name, v in services.items(): if 'links' in v or 'depends_on' in v: dependencies[name] = set() if 'links' in v: for link in v['links']: dependencies[name].update({link}) if 'depends_on' in v: for d in v['depends_on']: dependencies[name].update({d}) if dependencies == {}: # TODO tidy up for this case return [services] order = flatten(tsort(dependencies, smallest_first=True)) sorted_services = [] for name in order: sorted_services.append({name: services[name]}) return sorted_services
def _tsortTest(self, graph): def check_order(order, graph): # since multiple solutions can potentially exist, just verify # that the ordering constraints are satisfied for parent, child in graph['edges']: if order.index(parent) > order.index(child): return False return True try: order = tsort.tsort(graph) except Exception as e: self.fail(e) # verify output list is of the correct length self.failIf(len(order) != len(graph['items']), "sorted list length is incorrect") # verify that all ordering constraints are satisfied self.failUnless(check_order(order, graph), "ordering constraints not satisfied")
def _tsortTest(self, graph): def check_order(order, graph): # since multiple solutions can potentially exist, just verify # that the ordering constraints are satisfied for parent, child in graph['edges']: if order.index(parent) > order.index(child): return False return True try: order = tsort.tsort(graph) except Exception as e: self.fail(e) # verify output list is of the correct length self.failIf( len(order) != len(graph['items']), "sorted list length is incorrect") # verify that all ordering constraints are satisfied self.failUnless(check_order(order, graph), "ordering constraints not satisfied")
def fromProductDict(productDict): """ Create a `Manifest` by topologically sorting the dict of `Product`s Args: productDict (dict): A productName -> `Product` dictionary of products Returns: The created `Manifest`. """ deps = [ (dep.name, prod.name) for prod in productDict.itervalues() for dep in prod.dependencies ]; topoSortedProductNames = tsort.tsort(deps) # Append top-level products with no dependencies _p = set(topoSortedProductNames) for name in set(productDict.iterkeys()): if name not in _p: topoSortedProductNames.append(name) products = collections.OrderedDict() for name in topoSortedProductNames: products[name] = productDict[name] return Manifest(products, None)
def buildTsort(dd): dd = buildCellDependencies(dd) # Build DAG graph: dcells = dd['cells'] arcs = [] for key in dcells: for dependency in dcells[key]['d']: if dcells[dependency]["f"].startswith("="): arcs.append((dependency, key)) else: # No need to have cells with constant values in evaluation sort order: pass # Build topologically sorted list of graph nodes: ts = tsort.tsort(arcs) # Remove cell dependencies data that are no longer needed: # DEBUG: Comment thia outs, to get debug output: for key in dcells: del dcells[key]['d'] # DEBUG: Uncomment this, to get debug output: #dd['DAG'] = arcs dd['tsort'] = ts return dd