def main(argv): parser = argparse.ArgumentParser(description='Sequential Benchmarking SMT Solver.') #should precede arguments with var nargs parser.add_argument('klee_query_file', type=str, help='file with a query in klee format') parser.add_argument('-smtconverter', type=str, required=True, help='converter command: smt2->smt1 format') parser.add_argument('-kleeconverter', type=str, required=True, help='converter command: klee->smt2 format') parser.add_argument('-timeout', metavar='timeout', type=float, default=120, nargs= "?", help='time limit(sec) for each solver (default: %(default)i)') add_solvers_args_to_parser(parser) args = parser.parse_args(argv) timeout = args.timeout with open(args.klee_query_file) as f: klee_query = f.read() #create converter klee_to_smt2 = CmdLineConverter(args.kleeconverter.split(' ')[0], args.kleeconverter.split(' ')[1:]) smt2_to_smt1 = CmdLineConverter(args.smtconverter.split(' ')[0], args.smtconverter.split(' ')[1:]) klee_to_smt1 = KleeToSmt1Converter(klee_to_smt2, smt2_to_smt1) #create solvers z3_solvers = create_solvers(lambda: Z3StatsAwareParser(Z3Parser()), 'Z3', args.z3_solvers) stp_solvers = create_solvers(lambda: STPStatsAwareParser(STPParser()), 'STP', args.stp_solvers) boolector_solvers = create_solvers(lambda: BoolectorStatsAwareParser(BoolectorParser()), 'Boolector', args.boolector_solvers) timed_solvers = [TimedSolverWrapper(s, timeout) for s in z3_solvers+stp_solvers+boolector_solvers] assert len(timed_solvers) > 0, 'no solvers supplied' solver = SequentialBenchmarkingSolver(timed_solvers) #convert, solve try: smt1_query = klee_to_smt1.convert(klee_query) results = solver.solve(UniqueQuery(123, smt1_query)) for s in results.stats: print str(s), ": ", str(results.stats[s]) except ConversionException, e: print("couldn't parse a query: ", e)
def main(argv): global ev_stop ev_stop = gevent.event.Event() gevent.signal(signal.SIGINT, sigint_handler) signal.signal(signal.SIGINT, sigint_handler) gevent.spawn(work_around_infinite_wait) #TODO: add sanity validations of input: port number, etc. parser = argparse.ArgumentParser(description='SMT Solver Server.') parser.add_argument('-p', dest = 'port', type=int, default=12345, help='listening port (default: %(default)i)') parser.add_argument('-timeout', dest = 'timeout', type=int, default=360, help='solving timeout(sec.) for a query (benchmarking mode only) (default: %(default)i)') parser.add_argument('-smtconverter', type=str, required=True, help='converter command: smt2->smt1 format') parser.add_argument('-kleeconverter', type=str, required=True, help='converter command: klee->smt2 format') add_solvers_args_to_parser(parser) args = parser.parse_args(argv) port = args.port sync_solvers = create_solvers_from_args(args) print "Created {0} solvers to feed PortfolioSolver".format(len(sync_solvers)) if not sync_solvers: print 'Provide input solvers.' return sync_solver = PortfolioSolver([AsyncSolverWrapper(s) for s in sync_solvers]) klee_to_smt2 = CmdLineConverter(args.kleeconverter.split(' ')[0], args.kleeconverter.split(' ')[1:]) smt2_to_smt1 = CmdLineConverter(args.smtconverter.split(' ')[0], args.smtconverter.split(' ')[1:]) klee_to_smt1 = KleeToSmt1Converter(klee_to_smt2, smt2_to_smt1) solver = AsyncSolverWrapper(QueryConvertingWrapper(klee_to_smt1, SyncSolverWrapper(sync_solver))) cmd_channel = TcpCmdChannel("localhost", port) man = Manager(solver, cmd_channel) man.start(ev_stop) #blocking