11import pytest
22
3- from qualtran import BloqBuilder , QAny , QUInt
3+ from qualtran import BloqBuilder , QAny
4+ from qualtran .bloqs .basic_gates import Toffoli , XGate
45from qualtran .bloqs .bookkeeping import Allocate , Join , Split
5- from qualtran .bloqs .basic_gates import Toffoli
6- from qualtran .bloqs .mcmt import MultiTargetCNOT
7- from qualtran .bloqs .arithmetic import Add , Negate
86from qualtran .quirk_interop .bloq_to_quirk import (
97 SparseLineManager ,
108 bloq_to_quirk ,
1412
1513def _build_split_join_split_cbloq (n ):
1614 bb = BloqBuilder ()
17- q = bb .add (Allocate (QAny (n )))
18- qs = bb .add (Split (QAny (n )), reg = q )
19- q_joined = bb .add (Join (QAny (n )), reg = qs )
20- qs_again = bb .add (Split (QAny (n )), reg = q_joined )
21- out = bb .add (Join (QAny (n )), reg = qs_again )
22- return bb .finalize (out = out )
15+ q1 = bb .add (Allocate (QAny (n )))
16+ q2 = bb .add (Allocate (QAny (n )))
17+ qs1 = bb .add (Split (QAny (n )), reg = q1 )
18+ qs2 = bb .add (Split (QAny (n )), reg = q2 )
19+ for i in range (n ):
20+ qs1 [i ] = bb .add (XGate (), q = qs1 [i ])
21+ q1 = bb .add (Join (QAny (n )), reg = qs1 )
22+ q2 = bb .add (Join (QAny (n )), reg = qs2 )
23+ qs1 = bb .add (Split (QAny (n )), reg = q1 )
24+ qs2 = bb .add (Split (QAny (n )), reg = q2 )
25+ for i in range (n ):
26+ qs2 [i ] = bb .add (XGate (), q = qs2 [i ])
27+ q2 = bb .add (Join (QAny (n )), reg = qs2 )
28+ q1 = bb .add (Join (QAny (n )), reg = qs1 )
29+ return bb .finalize (q1 = q1 , q2 = q2 )
2330
2431
2532@pytest .mark .parametrize ("n" , range (3 , 6 ))
@@ -33,29 +40,22 @@ def test_sparse_line_manager_builds_dual_maps(n):
3340
3441@pytest .mark .parametrize ("n" , range (3 , 6 ))
3542def test_composite_bloq_to_quirk_url_shape (n ):
36- cbloq = MultiTargetCNOT ( n ). decompose_bloq (). flatten ( )
43+ cbloq = _build_split_join_split_cbloq ( n )
3744 url = composite_bloq_to_quirk (cbloq )
3845
3946 assert url .startswith ('https://algassert.com/quirk#circuit={"cols":[' )
4047 assert url .endswith (']}' )
4148
4249
43- def test_bloq_to_quirk ():
44- url_add = bloq_to_quirk (Add (QUInt (5 )))
45- assert url_add .startswith ('https://algassert.com/quirk#circuit={"cols":[' )
46- assert url_add .endswith (']}' )
47- url_mtcnot = bloq_to_quirk (MultiTargetCNOT (3 ))
48- assert (
49- url_mtcnot
50- == 'https://algassert.com/quirk#circuit={"cols":[[1,"•",1,"X"],[1,"•","X",1],["•","X",1,1],[1,"•","X",1],[1,"•",1,"X"]]}'
51- )
52-
53-
54- def test_negate_to_quirk ():
55- url = bloq_to_quirk (Negate (QUInt (2 )))
50+ def test_composite_bloq_to_quirk ():
51+ cbloq1 = _build_split_join_split_cbloq (1 )
52+ url1 = composite_bloq_to_quirk (cbloq1 )
53+ assert url1 == 'https://algassert.com/quirk#circuit={"cols":[["X",1],[1,"X"]]}'
54+ cbloq2 = _build_split_join_split_cbloq (2 )
55+ url2 = composite_bloq_to_quirk (cbloq2 )
5656 assert (
57- url
58- == 'https://algassert.com/quirk#circuit={"cols":[["X",1,1,1,1 ],[1,"X",1,1,1 ],[1,1,1, "X",1],[1,"•",1,"•","X"],["X",1,1,1,"•"],[1,"•",1,"•","X"],["X",1,"•",1,1],[1,"X",1,"•",1],[1,1,1,"X",1 ]]}'
57+ url2
58+ == 'https://algassert.com/quirk#circuit={"cols":[["X",1,1,1],[1,"X",1,1],[1,1,"X",1],[1,1,1,"X" ]]}'
5959 )
6060
6161
0 commit comments