From 587e51d546673bdffc47325c156462e9800c0a97 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Radek=20Hu=C5=A1ek?= <PitelVonSacek@gmail.com>
Date: Thu, 10 Dec 2015 22:53:50 +0100
Subject: [PATCH] Add guidedSubdivisionIterator()

---
 groupConnectivity.pyx | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/groupConnectivity.pyx b/groupConnectivity.pyx
index 28c4cc8..69b87ef 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):
-- 
GitLab