Exemplo n.º 1
0
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
Exemplo n.º 2
0
            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))