diff --git a/experiments/flowers.py b/experiments/flowers.py index e8b2aee9d44a57049edb134dd769287041c7387d..393a82499ba178751f4af369a0383d26966e02f4 100755 --- a/experiments/flowers.py +++ b/experiments/flowers.py @@ -16,6 +16,13 @@ from graph_tools.all import * @GraphSequence class Flower: + """ + >>> all( cdc_count(Flower.graph(k)) == (2**(k-1) + (-1)**k) // 3 + 1 for k in range(3, 20) ) + True + >>> Flower.stabilize(CircuitDoubleCover, 2)['formula'] + Loop 1 done - 3 boundaries (0 new) + 1/3*2^(k - 1) + 1/3*(-1)^k + 1 + """ sequence_start = 2 SCV = FakeGadget(3, [ BoundaryValue(((1,), (2,), (1, 2), None), 1) ]) diff --git a/graph_tools/tests.py b/graph_tools/tests.py index f488f5e60129e2aeb4e7f4431b255178ba6f8a0a..eaa06a4c0ef56029b80a86174cb99b2320ae2a4a 100644 --- a/graph_tools/tests.py +++ b/graph_tools/tests.py @@ -18,16 +18,13 @@ 104 >>> all( cdc_count(Necklace.graph(i)) == 2 * 4**(i-1) for i in range(1, 100) ) True ->>> all( cdc_count(Flower.graph(k)) == (2**(k-1) + (-1)**k) // 3 + 1 for k in range(3, 20) ) -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} ->>> Flower.stabilize(CircuitDoubleCover, 2)['formula'] -Loop 1 done - 3 boundaries (0 new) -1/3*2^(k - 1) + 1/3*(-1)^k + 1 + >>> f = CyclicLadder().stabilize(CircuitDoubleCover, start_at=1)['formula']; f Loop 1 done - 6 boundaries (6 new) Loop 2 done - 13 boundaries (6 new) @@ -35,11 +32,13 @@ 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