Example #1
0
def locallyNormClean(prog, max_val):
    cube_count = -1
    switches = []
    for line in prog:
        if 'Cuboid' in line:
            if 'Program_' in line:
                switches.append((
                    f'cube{cube_count}', line.split()[0]
                ))

            cube_count += 1

    for a, b in switches:
        prog = [line.replace(b,a) for line in prog]

    clines = []

    P = ex.Program()
    for line in prog:
        if "Cuboid(" in line:
            parse = P.parseCuboid(line)
            name = parse[0]
            x = float(min(max(parse[1].item() / max_val, 0.01), 1.0))
            y = float(min(max(parse[2].item() / max_val, 0.01), 1.0))
            z = float(min(max(parse[3].item() / max_val, 0.01), 1.0))

            clines.append("\t" + gen.assign(
                name, gen.make_function('Cuboid', [x,y,z])))

        if "attach(" in line:
            parse = P.parseAttach(line)
            clines.append("\t" + gen.make_function(
                "attach",
                [parse[0], parse[1]] + [
                    torch.clamp(co, 0.0, 1.0).item() for co in parse[2:]
                ]
            ))

        if "reflect(" in line:
            parse = P.parseReflect(line)
            clines.append("\t" + gen.make_function(
                "reflect",
                [parse[0], parse[1]]
            ))

        if "translate(" in line:
            parse = P.parseTranslate(line)
            clines.append("\t" + gen.make_function(
                "translate",
                [
                    parse[0],
                    parse[1],
                    max(int(parse[2]), 1),
                    float(min(max(parse[3], 0.0), 1.0))
                ]
            ))

    return clines
Example #2
0
def getHierProgLines(root):
    prog_count = 0
    root["prog_num"] = prog_count
    lines = []
    q = [root]
    P = ex.Program()
    while(len(q) > 0):

        node = q.pop(0)

        lines.append(f"Assembly Program_{node['prog_num']}" +" {")

        NAME_DICT = {}

        c = 0
        for line in node["prog"]:
            if "Cuboid(" in line:
                parse = P.parseCuboid(line)
                if len(node["children"][c]) > 0:
                    prog_count += 1
                    name = f"Program_{prog_count}"
                    node["children"][c]["prog_num"] = prog_count
                else:
                    name = parse[0]

                NAME_DICT[parse[0]] = name

                x = round(float(parse[1]), PREC)
                y = round(float(parse[2]), PREC)
                z = round(float(parse[3]), PREC)
                aligned = str(parse[4])
                lines.append("\t" + gen.assign(
                    name, gen.make_function('Cuboid', [x,y,z,aligned]))
                )
                c += 1

            if "attach(" in line:
                parse = P.parseAttach(line)
                lines.append("\t" + gen.make_function(
                    "attach",
                    [NAME_DICT[parse[0]], NAME_DICT[parse[1]]] + [round(co.item(), PREC) for co in parse[2:]]
                ))

            if "reflect(" in line:
                parse = P.parseReflect(line)
                lines.append("\t" + gen.make_function(
                    "reflect",
                    [NAME_DICT[parse[0]], parse[1]]
                ))

            if "translate(" in line:
                parse = P.parseTranslate(line)
                lines.append("\t" + gen.make_function(
                    "translate",
                    [NAME_DICT[parse[0]], parse[1], int(parse[2]), round(float(parse[3]), PREC)]
                ))

            if "rotate(" in line:
                parse = P.parseRotate(line)
                lines.append("\t" + gen.make_function(
                    "rotate",
                    [NAME_DICT[parse[0]], int(parse[1]), round(float(parse[2]), PREC)]
                ))

            if "squeeze(" in line:
                parse = P.parseSqueeze(line)
                lines.append("\t" + gen.make_function(
                    "squeeze",
                    [NAME_DICT[parse[0]], NAME_DICT[parse[1]], NAME_DICT[parse[2]], parse[3]] + [round(co, PREC) for co in parse[4:]]
                ))

        lines.append("}")

        for c in node["children"]:
            if c is not None and len(c) > 0:
                if "prog_num" in c:
                    q.append(c)

    return lines