Select Git revision
matrix_transpose.h
tests.py 2.22 KiB
"""Helper to run tests.
>>> from .all import *
>>> from sage.all import *
>>> g2g = lambda gadget: gadget.eval(UnderlayingGraph)
>>> assert graphs.CompleteGraph(4).is_isomorphic(g2g(Necklace.graph(1)))
>>> assert graphs.PetersenGraph().is_isomorphic(g2g(Petersen))
>>> assert all( \
g2g(CyclicLadder().graph(i)).is_isomorphic(g2g(GeneralizedPetersen(1).graph(i))) \
for i in range(3, 20) )
>>> cdc_count = lambda gadget: gadget.eval(CircuitDoubleCover)
>>> cdc_count(Petersen)
52
>>> cdc_count(GeneralizedPetersen(2).graph(5))
52
>>> cdc_count(FlowerSnark.graph(3))
104
>>> all( cdc_count(Necklace.graph(i)) == 2 * 4**(i-1) for i in range(1, 100) )
True
>>> Necklace.stabilize(CircuitDoubleCover)
Loop 1 done - 1 boundaries (0 new)
{'variables': [((1, 2), (1, 2), None)], 'step_matrix': [4], 'initial_vector': [2], \
'finalize': [1], 'simplified': ([1], [4], [2]), 'formula': 1/2*4^k, 'formula_if': k - 1 >= 0}
>>> f = CyclicLadder().stabilize(CircuitDoubleCover, start_at=1)['formula']; f
Loop 1 done - 6 boundaries (6 new)
Loop 2 done - 13 boundaries (6 new)
Loop 3 done - 15 boundaries (2 new)
Loop 4 done - 15 boundaries (0 new)
1/2*(-1)^k*(k - 1) + 1/6*4^(k - 1) + 3*2^(k - 1) + 1/3*(-2)^(k - 2) - 5/2*k - 3/2
>>> assert all( f(k=k) == cdc_count(CyclicLadder().graph(k)) for k in range(3, 10) )
>>> f = CyclicLadder(crossed=True).stabilize(CircuitDoubleCover, start_at=3)['formula']; f
Loop 1 done - 12 boundaries (4 new)
Loop 2 done - 14 boundaries (0 new)
-1/2*(-1)^k*k + 1/6*4^(k - 1) + 3*2^(k - 1) + 1/3*(-2)^(k - 2) - 5/2*k
>>> assert all( f(k=k) == cdc_count(CyclicLadder(True).graph(k)) for k in range(3, 10) )
>>> sun_cdc = lambda n: sum( b.value for b in sun(n).eval_gadget(CircuitDoubleCover) )
>>> all( sun_cdc(n) == 2**n - 2*n for n in range(3, 10) )
True
>>> d = [ list(range(5)), list(range(5, 10)) ]
>>> graph_to_gadget(graphs.PetersenGraph(), d).eval(GroupFlow(Integers(3), False))
729
>>> graph_to_gadget(graphs.PetersenGraph(), d).eval(GroupFlow(Integers(4), True))
0
>>> graph_to_gadget(graphs.PetersenGraph(), d).eval(GroupFlow(Integers(5), True))
240
>>> [ GeneralizedPetersen(1).graph(i).eval(CircuitDoubleCover) for i in range(3, 16) ]
[4, 26, 72, 258, 842, 3118, 11620, 45290, 177630, 705510, 2807768, 11210722, 44785618]
"""