From 67a38da0b9204e835e98c2a7a2bc2f267267bb88 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Radek=20Hu=C5=A1ek?= <husek@iuuk.mff.cuni.cz>
Date: Wed, 7 Dec 2016 08:39:03 +0100
Subject: [PATCH] groupConnectivityNaive: small optimizations

---
 groupConnectivityNaive.py | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/groupConnectivityNaive.py b/groupConnectivityNaive.py
index 92420e0..af4c4bc 100644
--- a/groupConnectivityNaive.py
+++ b/groupConnectivityNaive.py
@@ -1,3 +1,5 @@
+from sage.graphs.graph import Graph, DiGraph
+
 def flowEnumerator(G, group):
   """Enumerate all flows of given graph.
 
@@ -33,7 +35,7 @@ def flowEnumerator(G, group):
     yield tuple(v)
 
 
-def testGroupConnectivityNaive(G_, group, forb_spanning_tree = False,
+def testGroupConnectivityNaive(G_, group, forb_spanning_tree = True,
                                list_all = False, counts = False):
   E = [ (u, v, i) for i, (u, v, _) in enumerate(G_.edges()) ]
   G = DiGraph([G_.vertices(), E], format='vertices_and_edges')
@@ -61,7 +63,7 @@ def testGroupConnectivityNaive(G_, group, forb_spanning_tree = False,
     mask[e] = None
 
   def is_compatible(f, x):
-    for i in range(m):
+    for i in xrange(m):
       if f[i] == x[i]:
         return False
     return True
@@ -90,9 +92,8 @@ def testGroupConnectivityNaive(G_, group, forb_spanning_tree = False,
       return False
   else:
     def find_flow(forb):
-      c = len(filter(lambda f: is_compatible(f, forb), flows))
-      C[forb] = c
-      return (c > 0)
+      C[forb] = filter(lambda f: is_compatible(f, forb), flows)
+      return (len(C[forb]) > 0)
 
   ret = []
 
@@ -100,7 +101,7 @@ def testGroupConnectivityNaive(G_, group, forb_spanning_tree = False,
     if not find_flow(forb):
       if not list_all:
         return (False, info, [forb])
-      ret.append(list(forb))
+      ret.append(forb)
 
   return (len(ret) == 0, info, ret)
 
@@ -108,4 +109,14 @@ def labelsFromArray(G, E, labels):
   for (u, v, i) in E:
     G.set_edge_label(u, v, labels[i])
 
+def dictMap(f, d):
+  return { k: f(v) for k, v in d.iteritems() }
+
+def myHistogram(data):
+  s = dict()
+  for i in data:
+    if i not in s:
+      s[i] = 0
+    s[i] += 1
+  return s
 
-- 
GitLab