Пример #1
0
def calc_domset_graph(domset, dominators, d):
    h = Graph.on(domset)

    for v in dominators:
        if v in domset:
            continue
        # Collect closest pairs
        sorted_doms = filter(lambda s: len(s) > 0, [dominators[v][r] for r in xrange(d+1)])
        if len(sorted_doms[0]) >= 2:
            for x,y in itertools.combinations(sorted_doms[0],2):
                h.add_edge(x,y)
        else:
            assert len(sorted_doms[0]) == 1
            x = iter(sorted_doms[0]).next()
            if len(sorted_doms) >= 2:
                for y in sorted_doms[1]:
                    h.add_edge(x,y)

    return h