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)
+