def adjust_bias(value): index = list_box.curselection()[0] selected_text = list_box.get(index) pnd = mod_materials_12.make_pnd(selected_text) [rev_bias, layer_array, widths, first_indexes, n_indexes, p_indexes, sides] = calc_dep_widths.run(pnd) sketch.run(rev_bias, layer_array, widths, first_indexes, n_indexes, p_indexes, sides, True, value) mod_gui_class.graph(selected_text, rev_bias, widths[0:, 2])
def translate(**kwargs): ## logging configuration log_lvl = log_lvls.get(kwargs.get('log_lvl', '10')) logging.config.fileConfig(os.path.join(pwd, "logging.conf")) logging.getLogger().setLevel(log_lvl) prg = kwargs.get('prg', None) out_dir = kwargs.get('out_dir', res_dir) sk = kwargs.get('sketch', True) fs = kwargs.get('fs', False) cgen = kwargs.get('custom_gen', False) cntr = kwargs.get('cntr', False) skv = kwargs.get('skv', 0) lib = kwargs.get('lib', True) codegen_jar = os.path.join(root_dir, "codegen", "lib", "codegen.jar") logging.info('parsing {}'.format(prg)) prg_ast = parse(prg,lib=lib) util.add_object(prg_ast) encoder = Encoder(prg_ast, out_dir, fs) logging.info('encoding to Sketch') encoder.to_sk() # Sketch options opts = kwargs.get('opts', []) # print counter examples if cntr: opts.extend(['-V3', '--debug-cex']) if skv != 0: opts.extend(['-V{}'.format(skv)]) # place to keep sketch's temporary files opts.extend(["--fe-tempdir", out_dir]) opts.append("--fe-keep-tmp") # custom codegen if cgen: opts.extend(["--fe-custom-codegen", codegen_jar]) # run Sketch output_path = os.path.join(out_dir, "output", "{}.txt".format(encoder.demo_name)) if sk: if os.path.exists(output_path): os.remove(output_path) sketch.set_default_option(opts) logging.info('sk_dir: {}, output_path: {}'.format(encoder.sk_dir, output_path)) _, r = sketch.run(encoder.sk_dir, output_path) # if sketch fails, halt the process here if not r: return 1 elif not prg: jskparser.error("need to pass in some file") return 0
def main(cmd, smpl_paths, tmpl_paths, patterns, out_dir, log_lv=logging.DEBUG): ## logging configuration logging.config.fileConfig(os.path.join(pwd, "logging.conf")) logging.getLogger().setLevel(log_lv) ## check custom codegen was built codegen_jar = os.path.join("codegen", "lib", "codegen.jar") if not os.path.isfile(codegen_jar): raise Exception("can't find " + codegen_jar) if cmd == "android": tmpl_paths.append(adr_tmpl) elif cmd == "gui": tmpl_paths.append(gui_tmpl) if cmd == "pattern": _patterns = patterns[:] else: ## android or gui _patterns = [C.P.ACCA, C.P.ACCU, C.P.ACCM, C.P.ADP, \ C.P.BLD, C.P.FAC, C.P.SNG, C.P.PRX, C.P.OBS, C.P.STA] opts = [] ## sketch options if conf["verbose"]: opts.extend(["-V", "10"]) if conf["timeout"]: opts.extend(["--fe-timeout", str(conf["timeout"])]) opts.extend(["--slv-timeout", str(conf["timeout"])]) # place to keep sketch's temporary files opts.extend(["--fe-tempdir", out_dir]) opts.append("--fe-keep-tmp") tmpls = [] output_paths = [] for p in patterns: ## for each pattern or demo logging.info("demo: " + p) _smpl_paths = smpl_paths[:] _tmpl_paths = tmpl_paths[:] _smpl_paths.append(os.path.join(smpl_dir, cmd, p)) if cmd == "pattern": client_path = os.path.join(tmpl_dir, cmd, p) else: ## android or gui client_path = os.path.join(tmpl_dir, app, cmd, p) _tmpl_paths.append(client_path) ## (smpl|tmpl)_path is either a single file or a folder containing files ## read and parse templates tmpl_files = [] for tmpl_path in _tmpl_paths: tmpl_files.extend(util.get_files_from_path(tmpl_path, "java")) ast = util.toAST(tmpl_files) ## convert AST to meta data tmpl = Template(ast) ## mark client-side classes client_files = util.get_files_from_path(client_path, "java") for client in client_files: base = os.path.basename(client) cname = os.path.splitext(base)[0] cls = class_lookup(cname) cls.client = True ## read and parse samples smpl_files = [] for smpl_path in _smpl_paths: smpl_files.extend(util.get_files_from_path(smpl_path, "txt")) sample.reset() smpls = [] for fname in smpl_files: smpl = Sample(fname, tmpl.is_event) smpls.append(smpl) ## make harness harness.mk_harnesses(cmd, tmpl, smpls) ## pattern rewriting rewrite.visit(cmd, smpls, tmpl, _patterns) java_sk_dir = os.path.join(out_dir, '_'.join(["java_sk", p])) decode.dump(cmd, java_sk_dir, tmpl) ## clean up templates #reducer.reduce_anno(smpls, tmpl) #reducer.remove_cls(smpls, tmpl) tmpl.freeze() tmpls.append(tmpl) ## encode (rewritten) templates into sketch files sk_dir = os.path.join(out_dir, '_'.join(["sk", p])) if conf["encoding"]: encoder.to_sk(cmd, smpls, tmpl, sk_dir) else: # not encoding logging.info("pass the encoding phase; rather use previous files") ## run sketch output_path = os.path.join(out_dir, "output", "{}.txt".format(p)) output_paths.append(output_path) if conf["sketch"]: if os.path.exists(output_path): os.remove(output_path) # custom codegen _opts = opts[:] _opts.extend(["--fe-custom-codegen", codegen_jar]) if conf["randassign"] or conf["parallel"]: _opts.append("--slv-randassign") _opts.extend(["--bnd-dag-size", "16000000"]) # 16M ~> 8G memory sketch.set_default_option(_opts) if conf["parallel"]: ## Python implementation as a CEGIS (sketch-backend) wrapper #_, r = sketch.be_p_run(sk_dir, output_path) # Java implementation inside sketch-frontend _opts.append("--slv-parallel") if conf["p_cpus"]: _opts.extend(["--slv-p-cpus", str(conf["p_cpus"])]) if conf["ntimes"]: _opts.extend(["--slv-ntimes", str(conf["ntimes"])]) if conf["randdegree"]: # assume FIXED strategy _opts.extend(["--slv-randdegree", str(conf["randdegree"])]) else: # adaptive concretization _opts.extend(["--slv-strategy", "WILCOXON"]) _, r = sketch.run(sk_dir, output_path) else: _, r = sketch.run(sk_dir, output_path) # if sketch fails, halt the process here if not r: sys.exit(1) ## run sketch again to obtain control-flows sketch.set_default_option(opts) r = sketch.ctrl_flow_run(sk_dir, output_path, out_dir) if not r: sys.exit(1) else: # not running sketch logging.info("pass sketch; rather read: {}".format(output_path)) ## end of loop (per pattern/demo) ## generate compilable model java_dir = os.path.join(out_dir, "java") decode.to_java(cmd, java_dir, tmpls, output_paths, _patterns) logging.info("synthesis done") return 0
def main(cmd, smpl_paths, tmpl_paths, patterns, out_dir, log_lv=logging.DEBUG): ## logging configuration logging.config.fileConfig(os.path.join(pwd, "logging.conf")) logging.getLogger().setLevel(log_lv) ## check custom codegen was built codegen_jar = os.path.join("codegen", "lib", "codegen.jar") if not os.path.isfile(codegen_jar): raise Exception("can't find " + codegen_jar) if cmd == "android": tmpl_paths.append(adr_tmpl) elif cmd == "gui": tmpl_paths.append(gui_tmpl) if cmd == "pattern": _patterns = patterns[:] else: ## android or gui _patterns = [C.P.ACCA, C.P.ACCU, C.P.ACCM, C.P.ADP, C.P.BLD, C.P.FAC, C.P.SNG, C.P.PRX, C.P.OBS, C.P.STA] opts = [] ## sketch options if conf["verbose"]: opts.extend(["-V", "10"]) if conf["timeout"]: opts.extend(["--fe-timeout", str(conf["timeout"])]) opts.extend(["--slv-timeout", str(conf["timeout"])]) # place to keep sketch's temporary files opts.extend(["--fe-tempdir", out_dir]) opts.append("--fe-keep-tmp") tmpls = [] output_paths = [] for p in patterns: ## for each pattern or demo logging.info("demo: " + p) _smpl_paths = smpl_paths[:] _tmpl_paths = tmpl_paths[:] _smpl_paths.append(os.path.join(smpl_dir, cmd, p)) if cmd == "pattern": client_path = os.path.join(tmpl_dir, cmd, p) else: ## android or gui client_path = os.path.join(tmpl_dir, app, cmd, p) _tmpl_paths.append(client_path) ## (smpl|tmpl)_path is either a single file or a folder containing files ## read and parse templates tmpl_files = [] for tmpl_path in _tmpl_paths: tmpl_files.extend(util.get_files_from_path(tmpl_path, "java")) ast = util.toAST(tmpl_files) ## convert AST to meta data tmpl = Template(ast) ## mark client-side classes client_files = util.get_files_from_path(client_path, "java") for client in client_files: base = os.path.basename(client) cname = os.path.splitext(base)[0] cls = class_lookup(cname) cls.client = True ## read and parse samples smpl_files = [] for smpl_path in _smpl_paths: smpl_files.extend(util.get_files_from_path(smpl_path, "txt")) sample.reset() smpls = [] for fname in smpl_files: smpl = Sample(fname, tmpl.is_event) smpls.append(smpl) ## make harness harness.mk_harnesses(cmd, tmpl, smpls) ## pattern rewriting rewrite.visit(cmd, smpls, tmpl, _patterns) java_sk_dir = os.path.join(out_dir, "_".join(["java_sk", p])) decode.dump(cmd, java_sk_dir, tmpl) ## clean up templates # reducer.reduce_anno(smpls, tmpl) # reducer.remove_cls(smpls, tmpl) tmpl.freeze() tmpls.append(tmpl) ## encode (rewritten) templates into sketch files sk_dir = os.path.join(out_dir, "_".join(["sk", p])) if conf["encoding"]: encoder.to_sk(cmd, smpls, tmpl, sk_dir) else: # not encoding logging.info("pass the encoding phase; rather use previous files") ## run sketch output_path = os.path.join(out_dir, "output", "{}.txt".format(p)) output_paths.append(output_path) if conf["sketch"]: if os.path.exists(output_path): os.remove(output_path) # custom codegen _opts = opts[:] _opts.extend(["--fe-custom-codegen", codegen_jar]) if conf["randassign"] or conf["parallel"]: _opts.append("--slv-randassign") _opts.extend(["--bnd-dag-size", "16000000"]) # 16M ~> 8G memory sketch.set_default_option(_opts) if conf["parallel"]: ## Python implementation as a CEGIS (sketch-backend) wrapper # _, r = sketch.be_p_run(sk_dir, output_path) # Java implementation inside sketch-frontend _opts.append("--slv-parallel") if conf["p_cpus"]: _opts.extend(["--slv-p-cpus", str(conf["p_cpus"])]) if conf["ntimes"]: _opts.extend(["--slv-ntimes", str(conf["ntimes"])]) if conf["randdegree"]: # assume FIXED strategy _opts.extend(["--slv-randdegree", str(conf["randdegree"])]) else: # adaptive concretization _opts.extend(["--slv-strategy", "WILCOXON"]) _, r = sketch.run(sk_dir, output_path) else: _, r = sketch.run(sk_dir, output_path) # if sketch fails, halt the process here if not r: sys.exit(1) ## run sketch again to obtain control-flows sketch.set_default_option(opts) r = sketch.ctrl_flow_run(sk_dir, output_path, out_dir) if not r: sys.exit(1) else: # not running sketch logging.info("pass sketch; rather read: {}".format(output_path)) ## end of loop (per pattern/demo) ## generate compilable model java_dir = os.path.join(out_dir, "java") decode.to_java(cmd, java_dir, tmpls, output_paths, _patterns) logging.info("synthesis done") return 0
def translate(**kwargs): ## logging configuration log_lvl = log_lvls.get(kwargs.get('log_lvl', '10')) logging.config.fileConfig(os.path.join(pwd, "logging.conf")) logging.getLogger().setLevel(log_lvl) prg = kwargs.get('prg', None) out_dir = kwargs.get('out_dir', res_dir) sk = kwargs.get('sketch', True) fs = kwargs.get('fs', False) cgen = kwargs.get('custom_gen', False) cntr = kwargs.get('cntr', False) skv = kwargs.get('skv', 0) lib = kwargs.get('lib', True) inline = kwargs.get('inline', None) unroll = kwargs.get('unroll', None) parallel = kwargs.get('parallel', None) codegen_jar = os.path.join(root_dir, "codegen", "lib", "codegen.jar") logging.info('parsing {}'.format(prg)) prg_ast = parse(prg, lib=lib) util.add_object(prg_ast) encoder = Encoder(prg_ast, out_dir, fs) logging.info('encoding to Sketch') encoder.to_sk() # Sketch options opts = kwargs.get('opts', []) # Sketch inlining and unrolling if inline: opts.extend(['--bnd-inline-amnt', inline]) if unroll: opts.extend(['--bnd-unroll-amnt', unroll]) if parallel: opts.append("--slv-parallel") # print counter examples if cntr: opts.extend(['-V3', '--debug-cex']) if skv != 0: opts.extend(['-V{}'.format(skv)]) # place to keep sketch's temporary files opts.extend(["--fe-tempdir", out_dir]) opts.append("--fe-keep-tmp") # custom codegen if cgen: opts.extend(["--fe-custom-codegen", codegen_jar]) # run Sketch output_path = os.path.join(out_dir, "output", "{}.txt".format(encoder.demo_name)) if sk: if os.path.exists(output_path): os.remove(output_path) sketch.set_default_option(opts) logging.info('sk_dir: {}, output_path: {}'.format( encoder.sk_dir, output_path)) _, r = sketch.run(encoder.sk_dir, output_path) # if sketch fails, halt the process here if not r: return 1 elif not prg: jskparser.error("need to pass in some file") return 0
def main(jsk_paths, out_dir=res_dir, log_lv=logging.DEBUG): ## check custom codegen was built codegen_jar = os.path.join(root_dir, "codegen", "lib", "codegen.jar") if not os.path.isfile(codegen_jar): raise Exception("can't find " + codegen_jar) ## logging configuration logging.config.fileConfig(os.path.join(pwd, "logging.conf")) logging.getLogger().setLevel(log_lv) ast = util.toAST(jsk_paths) pgr = Program(ast) main_cls = pgr.main_cls demo_name = str(main_cls.name) ## rewrite field/method holes rewrite.visit(pgr) ## encode the program into sketch files sk_dir = os.path.join(out_dir, '_'.join(["sk", demo_name])) if conf["encoding"]: encoder.to_sk(pgr, sk_dir) else: # not encoding logging.info("pass the encoding phase; rather use previous files") opts = [] ## sketch options if conf["verbose"]: opts.extend(["-V", "10"]) if conf["timeout"]: opts.extend(["--fe-timeout", str(conf["timeout"])]) opts.extend(["--slv-timeout", str(conf["timeout"])]) # place to keep sketch's temporary files opts.extend(["--fe-tempdir", out_dir]) opts.append("--fe-keep-tmp") # custom codegen opts.extend(["--fe-custom-codegen", codegen_jar]) ## run Sketch output_path = os.path.join(out_dir, "output", "{}.txt".format(demo_name)) if conf["sketch"]: if os.path.exists(output_path): os.remove(output_path) if conf["randassign"] or conf["parallel"]: opts.append("--slv-randassign") opts.extend(["--bnd-dag-size", "16000000"]) # 16M ~> 8G memory sketch.set_default_option(opts) if conf["parallel"]: ## Python implementation as a CEGIS (sketch-backend) wrapper #_, r = sketch.be_p_run(sk_dir, output_path) # Java implementation inside sketch-frontend opts.append("--slv-parallel") if conf["p_cpus"]: opts.extend(["--slv-p-cpus", str(conf["p_cpus"])]) if conf["ntimes"]: opts.extend(["--slv-ntimes", str(conf["ntimes"])]) if conf["randdegree"]: # assume FIXED strategy opts.extend(["--slv-randdegree", str(conf["randdegree"])]) else: # adaptive concretization opts.extend(["--slv-strategy", "WILCOXON"]) _, r = sketch.run(sk_dir, output_path) else: _, r = sketch.run(sk_dir, output_path) # if sketch fails, halt the process here if not r: return 1 else: # not running Sketch logging.info("pass sketch; rather read: {}".format(output_path)) ## generate Java code java_dir = os.path.join(out_dir, "java") decode.to_java(java_dir, pgr, output_path) logging.info("synthesis done") return 0