diff --git a/groupConnectivity.pyx b/groupConnectivity.pyx index 28c4cc88b3b322fe79699264227ed5af94f84ada..69b87ef036891db9f8319b507dd56aa78c977963 100644 --- a/groupConnectivity.pyx +++ b/groupConnectivity.pyx @@ -163,6 +163,40 @@ def subdivisionIterator(G, edges = None): yield L +def guidedSubdivisionIterator(G, edges = None, guide = lambda H: (True, None)): + class DeadEnd(Exception): + pass + + if edges is None: + edges = G.edges() + + def impl(G, edges): + if len(edges) == 0: + cont, val = guide(G) + if not cont: + raise DeadEnd() + yield val + return + + for i in range(0, 3): + H = G.copy() + H.subdivide_edge(edges[0], i) + try: + for L in impl(H, edges[1:]): + yield L + except DeadEnd: + if i == 0: + raise + else: + break + + try: + for L in impl(G, edges): + yield L + except DeadEnd: + pass + + def generateSubdivisions(file, G, edges = None, function = lambda H: H.graph6_string(), parallel = 0, chunksize = 1, in_flight = None):