3737 Permutation ,
3838 PermutationCycle ,
3939)
40- from qualtran .bloqs .basic_gates import CNOT , TGate , XGate
41- from qualtran .bloqs .bookkeeping import Allocate , ArbitraryClifford , Free
42- from qualtran .resource_counting .generalizers import ignore_split_join
40+ from qualtran .bloqs .basic_gates import CNOT , XGate
41+ from qualtran .bloqs .bookkeeping import Allocate , Free
42+ from qualtran .bloqs .mcmt import And
43+ from qualtran .resource_counting .generalizers import generalize_cvs , ignore_split_join
4344from qualtran .symbolics import ceil , log2 , slen
4445
4546
@@ -62,11 +63,14 @@ def test_permutation_cycle_unitary_and_call_graph():
6263 bloq .tensor_contract (), np .array ([[0 , 0 , 1 , 0 ], [1 , 0 , 0 , 0 ], [0 , 1 , 0 , 0 ], [0 , 0 , 0 , 1 ]])
6364 )
6465
65- _ , sigma = bloq .call_graph (generalizer = ignore_split_join )
66+ cv = sympy .Symbol ('cv' )
67+ _ , sigma = bloq .call_graph (
68+ generalizer = [ignore_split_join , generalize_cvs ], keep = lambda b : isinstance (b , And )
69+ )
6670 assert sigma == {
6771 CNOT (): 8 ,
68- TGate ( ): 16 ,
69- ArbitraryClifford ( n = 2 ): 76 ,
72+ And ( cv1 = cv , cv2 = cv ): 4 ,
73+ And ( cv1 = cv , cv2 = cv ). adjoint (): 4 ,
7074 Allocate (QBit ()): 1 ,
7175 Free (QBit ()): 1 ,
7276 }
@@ -76,10 +80,10 @@ def test_permutation_cycle_symbolic_call_graph():
7680 bloq = _permutation_cycle_symb ()
7781 logN , L = ceil (log2 (bloq .N )), slen (bloq .cycle )
7882
79- _ , sigma = bloq .call_graph ()
83+ _ , sigma = bloq .call_graph (keep = lambda b : isinstance ( b , And ) )
8084 assert sigma == {
81- ArbitraryClifford ( n = 2 ): (L + 1 ) * (13 * logN - 13 ),
82- TGate () : (L + 1 ) * (4 * logN - 4 ),
85+ And ( ): (L + 1 ) * (logN - 1 ),
86+ And (). adjoint () : (L + 1 ) * (logN - 1 ),
8387 CNOT (): L * logN + L + 1 ,
8488 }
8589
@@ -103,12 +107,12 @@ def test_permutation_unitary_and_call_graph():
103107 ),
104108 )
105109
106- _ , sigma = bloq .call_graph (generalizer = ignore_split_join )
110+ _ , sigma = bloq .call_graph (generalizer = ignore_split_join , keep = lambda b : isinstance ( b , And ) )
107111 assert sigma == {
108112 CNOT (): 17 ,
109- TGate (): 56 ,
113+ And (): 56 // 4 ,
114+ And ().adjoint (): 56 // 4 ,
110115 XGate (): 56 ,
111- ArbitraryClifford (n = 2 ): 182 ,
112116 Allocate (QBit ()): 2 ,
113117 Free (QBit ()): 2 ,
114118 }
@@ -130,9 +134,9 @@ def test_permutation_symbolic_call_graph():
130134 logN = ceil (log2 (N ))
131135 bloq = _permutation_symb ()
132136
133- _ , sigma = bloq .call_graph ()
137+ _ , sigma = bloq .call_graph (keep = lambda b : isinstance ( b , And ) )
134138 assert sigma == {
135- ArbitraryClifford ( n = 2 ) : (N + 1 ) * (13 * logN - 13 ),
136- TGate (): (N + 1 ) * (4 * logN - 4 ),
139+ And (). adjoint () : (N + 1 ) * (logN - 1 ),
140+ And (): (N + 1 ) * (logN - 1 ),
137141 CNOT (): N * logN + N + 1 ,
138142 }
0 commit comments