Select Git revision
test_cycle.py
-
Radek Hušek authoredRadek Hušek authored
analyze-cycle.py 1.25 KiB
from graph_tools.base import *
from graph_tools.parameters import *
from sage.all import *
from collections import namedtuple
from itertools import *
def calc(s):
b = list(CircuitDoubleCover.enumerate_boundaries(s))
m = dict()
_bmap = { x: i for i, x in enumerate(b) }
def eval_(g):
ret = set()
g_ = FakeGadget(g.size(), g.eval(CircuitDoubleCover))
for c, cb in enumerate(b):
cg = FakeGadget(g.size(), [ Boundary(cb, 1) ])
v = Gadget.join(
[ cg, g_ ],
[ ((1, i), (2, i)) for i in range(1, s+1) ],
[]
).eval(CircuitDoubleCover)
if v > 0: ret.add(c)
return ret
ret = namedtuple("calc_ret", ["boundaries", "eval", "map"])
ret.boundaries = b
ret.eval = eval_
ret.map = lambda x: _bmap[x]
return ret
def C_k(k):
return Gadget.join(
[CUBIC_VERTEX]*k,
[ ((i+1, 2), (((i+1) % k) + 1, 1)) for i in range(k) ],
[ (i+1, 3) for i in range(k) ]
)
def G_k(k):
return Gadget.join(
[CUBIC_VERTEX]*k,
[ ((i+1, 2), (((i+1) % (k-1)) + 1, 1)) for i in range(k-1) ] + [ ((1,3), (k,1)) ],
[ (i+2, 3) for i in range(k-2) ] + [ (k, 2), (k, 3) ]
)
k = 6
c = calc(k)
e = c.eval(C_k(k))
f = c.eval(G_k(k))
print(len(e))
print(len(f))
print(len(set(f).intersection(set(e))))