def get_SMTCode(mdg, mp_prop, opts): # input mdg # output SMTCode list, result per results = {'SCCs':[], 'AccSCCs':[]} if opts.tgba: all_acceptlist = mdg.graph['acccond'] SCCs = nx.strongly_connected_component_subgraphs(mdg) for scc in SCCs: results['SCCs'].append({'edges':nx.number_of_edges(scc), 'nodes':nx.number_of_nodes(scc)}) if scc.edges() == []: pass else: # nx.draw_circular(scc) accept = 0 if opts.tgba: a = reduce(lambda x, y : x | y , [set(edge[2]['acc']) for edge in scc.edges(data=True)]) print a acceptlist = list(a) print acceptlist """for edge in scc.edges(data=True): for acc in edge[2]['acc']: if not acc in acceptlist: acceptlist.append(acc) if opts.debug: print acceptlist """ if all_acceptlist.sort() == acceptlist.sort(): if opts.pdebug: print acceptlist,' ==? ',all_acceptlist print ' TGBA-Accept' accept = 1 else: for node in scc.nodes(): if 'accept' in node: accept = 1 break if accept == 1: if opts.debug: print '\t found BA/TGBA-Accept SCC' code_time = runsmt.gen_smtcodelist_time(scc, mp_prop, opts) results['AccSCCs'].append({'SMTCode':code_time['code'], 'edges':nx.number_of_edges(scc), 'nodes':nx.number_of_nodes(scc), 'gen_time':code_time['time'], 'sat_time':0}) else: if opts.pdebug: print ' non accept SCC' return results
def gen_smt(sat_or_list, scc, mp_prop, opts): if scc.edges() == []: pass else: accept = 0 if opts.tgba: #all_acceptlist = mdg.graph['acccond'] all_acceptlist = scc.graph['acccond'] a = reduce(lambda x, y: x | y, [set(edge[2]['acc']) for edge in scc.edges(data=True)]) accept_list = list(a) if all_acceptlist.sort() == accept_list.sort(): accept = 1 else: for node in scc.nodes(): if 'accept' in node: accept = 1 break if accept == 1: code_and_time = runsmt.gen_smtcodelist_time(scc, mp_prop, opts) code = code_and_time['code'] time = code_and_time['time'] sat_or_list.append(self.SccUnit(code, time, opts))