diff --git a/voltage_test_snarks.py b/voltage_test_snarks.py new file mode 100755 index 0000000000000000000000000000000000000000..ae5c0cbe3f5deabc5192ed709c4696467815bc07 --- /dev/null +++ b/voltage_test_snarks.py @@ -0,0 +1,58 @@ +#!/usr/bin/python + +import os, sys +import json +import re + +from parmap import parmap + +def lists_to_tuples(x): + if isinstance(x, (list, tuple)): + return tuple( lists_to_tuples(e) for e in x ) + if isinstance(x, dict): + return { k: lists_to_tuples(v) for k, v in x.items() } + return x + +L = set() + +for line in sys.stdin: + L.add(lists_to_tuples(eval(line))); continue + + j = json.loads(line.rstrip()) + n = int(re.match("Z_([0-9]+)", j["template_group"])[1]) + + a = j["assignment"] + for i in range(len(a)): + if a[i] >= n//2: a[i] -= n + + s = sum(abs(x) for x in a) + + L.add(lists_to_tuples((2*s, j["template_graph"], a))) + +L = list(enumerate(sorted(L))) + +nproc = int(os.getenv("P", "0")) + +def worker(T): +# return json.dumps(T) + + from graph_tools.all import EdgeColoring, voltage_graph_zn_to_sequence + from graph_tools.utils import stabilize_period + i, (s, t, a) = T + gs = voltage_graph_zn_to_sequence(t, a) + v = gs.graph(s).eval(EdgeColoring(3)) + yield "%i G> %i %i" % (i, s, v) + X = gs.stabilize(EdgeColoring(3)) + yield "%i S>" % (i,) + p, l = stabilize_period(X, shift=1) + yield json.dumps({ + "id": i, + "template": t, + "assignment": a, + "repeats_from": p, + "has_three_coloring": l + }) + +for x in parmap(worker, L, nproc or None, multimap=True, in_order=False, out_chunksize=1): + print(x) +