예제 #1
0
    def find_better(self):
        processed = set()
        for fun in self.functions:

            simpl = simplify(fun)
            r     = repr(simpl)
            if r in processed:
                continue

            processed.add(r)

            root  = self.transform(simpl)
            gen   = BodyGenerator(root, self.AssemblerClass())
            body  = gen.run()
            index = fun.bin()
            if len(body) < len(self.data[index][1]):
                print
                print "improved %02x (%s):" % (index, root)
                print "was:"
                print "\n".join(self.data[index][1])
                print "better:"
                print "\n".join(body)
                print
                self.data[index] = (root, body)
                self.improved.add(index)
예제 #2
0
def conditions():
    processed = set()
    functions = []
    for fun in chain(variables(), functions_1level(), functions_2levels()):
        expr  = simplify(fun)
        index = expr.bin()
        if index not in processed:
            processed.add(index)
            functions.append(expr)

    for var in [Variable('A'), Variable('B'), Variable('C')]:
        for t in functions:
            for f in functions:
                yield Condition(var, t, f)
예제 #3
0
def simplify_track(filepath, filename, simplify_dir):
    """
    parse GPX file, simplifying track and create new GPX file with simplified track
    """
    full_filename = os.path.join(filepath, filename)
    print "{0}:".format(filename)
    parsed_gpx, points = gpx.get_data(full_filename)
    print "\tPoints before simplifying: {0}".format(len(points))
    simplified_points = simplify.simplify(points, TOLERANCE, True)
    print "\tPoints after simplifying: {0}\n".format(len(simplified_points))

    with open(os.path.join(simplify_dir, filename), 'w') as f:
        f.write(gpx.generate_gpx(parsed_gpx, simplified_points))
        f.flush()
예제 #4
0
def reduce_wgs_rdp(coordinates, resolution):
    """Takes a set of coordinates (a polygon) and smooths the lines
       using the Ramer-Douglas-Peucker algorithm to reduce the number of
       vertices.

       Arguments:
       coordinates: List of coordinates in the form [(lon, lat), ...]
       resolution: Vertices reduction factor.

       Returns: A flattened list of coordinates, of the form
                [lon, lat, lon, lat, lon, lat, ...]
    """
    coordinates = [{"x": point[1], "y": point[0]}
                   for point in coordinates]
    coordinates = simplify.simplify(coordinates, resolution)
    output = list()
    for point in coordinates:
        output.extend([point['y'], point['x']])
    return output