Beispiel #1
0
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)
Beispiel #2
0
def main():
    t = tsort()
    t.input_file()
    # t.display_vertices()
    # t.display_edges()
    t.display_graph()
    t.display_sorting()
Beispiel #3
0
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
Beispiel #4
0
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")
Beispiel #7
0
    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)
Beispiel #8
0
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