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