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