Exemple #1
0
def write_to_code_file(mode, data, path_to_load, path_to_export,
                       path_raw_code):
    g = data.grammar
    nt = {v: reverse_typename(k) for k, v in g.node_type_to_id.items()}

    #print(nt,g.node_type_to_id)
    v = data.terminal_vocab

    raw = []
    with open(path_raw_code, 'r') as f:
        for line in f:
            raw.append(line[:-1])

    with open(path_to_load, 'r') as f:
        l = json.load(f, encoding='utf8')
    l_code = []
    for i in range(len(l)):
        # print(raw[i])
        try:
            t = ASTNode.from_dict(l[i], nt, v)
            ast_tree = parse.decode_tree_to_python_ast(t)
            code = astor.to_source(ast_tree)[:-1]
            real_code = parse.de_canonicalize_code(code, raw[i])
            if (mode == "hs"):
                real_code = " ".join(parse.tokenize_code_adv(
                    real_code, True)).replace("\n", "#NEWLINE#").replace(
                        "#NEWLINE# ", "").replace("#INDENT# ", "")
                real_code = " ".join(parse.tokenize_code_adv(real_code, False))
            #print(real_code,raw[i])
            l_code.append(real_code)
        except:
            print "Tree %d impossible to parse" % (i)
            l_code.append("")

    with open(path_to_export, 'w') as f:
        for c in l_code:
            f.write(c + "\n")
        return reverse_typename(t[:-1])
    else:
        return vars(ast)[t]

if __name__ == '__main__':

    flag = "hs"
    path_to_load = "../data/exp/results/test_hs_10_iter.json"
    if flag == "django":
        train_data, dev_data, test_data = deserialize_from_file("../../django.cleaned.dataset.freq5.par_info.refact.space_only.bin")
    elif flag == "hs":
        train_data, dev_data, test_data = deserialize_from_file("../../hs.freq3.pre_suf.unary_closure.bin")
    data = test_data
    g = data.grammar
    nt = {v:reverse_typename(k) for k,v in g.node_type_to_id.items()}

    #print(nt,g.node_type_to_id)
    v = data.terminal_vocab

    results = []
    with open(path_to_load,'r') as f:
        l = json.load(f, encoding='utf8')

    for i in range(len(l)):
        t = ASTNode.from_dict(l[i], nt,v)
        ast_tree = parse.decode_tree_to_python_ast(t)
        results.append(ast_tree)


    evaluate_decode_results(flag, test_data, results, verbose=True)