From 015b4bb8449be1fd2125d2c60f45b74077964d72 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Radek=20Hu=C5=A1ek?= <husek@iuuk.mff.cuni.cz>
Date: Mon, 13 Sep 2021 14:08:18 +0200
Subject: [PATCH] make edge_model_join_matrix parallel

---
 graph_tools/misc.py | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/graph_tools/misc.py b/graph_tools/misc.py
index bc737e9..11c5fe4 100644
--- a/graph_tools/misc.py
+++ b/graph_tools/misc.py
@@ -176,10 +176,22 @@ def _init_():
     return m
 
 
-  # FIXME k cemu je to dobry?
-  def edge_model_join_matrix(P, k):
+  def edge_model_join_matrix(P, k, threads=1):
+    from sage.all import matrix, QQ
+    from parmap import parmap
+
     BG = [ FakeGadget(k, [ BoundaryValue(b, 1) ]) for b in P.enumerate_boundaries(k) ]
-    return parameter_matrix(P, BG)
+    inp = ( (r, c) for r in range(len(BG)) for c in range(len(BG)) )
+
+    def worker(x):
+      r, c = x
+      return (r, c, edge_model_join(BG[r], BG[c]).eval(P, no_cache=True))
+
+    m = matrix(QQ, len(BG), len(BG), sparse=True)
+    for r, c, v in parmap(worker, inp, nprocs=threads, in_order=False):
+      m[r, c] = v
+
+    return m
 
 
   def enumerate_diamond_matchings(k):
-- 
GitLab