def prove_reach(self, vs, input): # @timeit def f(task): vid, vld_cls = task vld = vld_cls(self.tmpdir) r, cex = vld.prove_reach(vs, input) if r is None: return None else: return vid, (r, cex) wrs = Miscs.run_mp_ex( "prove_reach", [(settings.CPAchecker.CPA_SHORT_NAME, CPAchecker), (settings.Ultimate.UAUTOMIZER_SHORT_NAME, UAutomizer), (settings.Ultimate.UTAIPAN_SHORT_NAME, UTaipan)], f, get_fst_res=True) mlog.debug('wrs: {}'.format(wrs)) if wrs: vid, r = wrs[0] mlog.debug('Got result firstly from {}'.format(vid)) return r else: return None, None
def _merge_traces(): # def f(task): # inp, l = task # # vtrace1: 8460 16 0 1 16 8460 # parts = l.split(':') # assert len(parts) == 2, parts # loc, tracevals = parts[0], parts[1] # loc = loc.strip() # vtrace1 # ss = inv_decls[loc].names # vs = tracevals.strip().split() # trace = Trace.parse(ss, vs) # return (inp, loc, trace) # tasks = [(inp, l) for inp, lines in raw_traces.items() for l in lines] # wrs = Miscs.run_mp_ex("merge traces", tasks, f) # itraces = defaultdict(dict) # for inp, loc, trace in wrs: # itraces[inp].setdefault(loc, []).append(trace) # return itraces def f(task): inp, lines = task dtraces = defaultdict(list) for l in lines: # vtrace1: 8460 16 0 1 16 8460 parts = l.split(':') assert len(parts) == 2, parts loc, tracevals = parts[0], parts[1] loc = loc.strip() # vtrace1 ss = inv_decls[loc].names vs = tracevals.strip().split() trace = Trace.parse(ss, vs) dtraces[loc].append(trace) return (inp, dtraces) tasks = raw_traces.items() wrs = Miscs.run_mp_ex("merge traces", tasks, f) itraces = {inp: dtraces for inp, dtraces in wrs} return itraces