-
Notifications
You must be signed in to change notification settings - Fork 103
Expand file tree
/
Copy pathbloq_to_quirk_test.py
More file actions
64 lines (49 loc) · 2.09 KB
/
bloq_to_quirk_test.py
File metadata and controls
64 lines (49 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import pytest
from qualtran import BloqBuilder, QAny, QUInt
from qualtran.bloqs.bookkeeping import Allocate, Join, Split
from qualtran.bloqs.basic_gates import Toffoli
from qualtran.bloqs.mcmt import MultiTargetCNOT
from qualtran.bloqs.arithmetic import Add, Negate
from qualtran.quirk_interop.bloq_to_quirk import (
SparseLineManager,
bloq_to_quirk,
composite_bloq_to_quirk,
)
def _build_split_join_split_cbloq(n):
bb = BloqBuilder()
q = bb.add(Allocate(QAny(n)))
qs = bb.add(Split(QAny(n)), reg=q)
q_joined = bb.add(Join(QAny(n)), reg=qs)
qs_again = bb.add(Split(QAny(n)), reg=q_joined)
out = bb.add(Join(QAny(n)), reg=qs_again)
return bb.finalize(out=out)
@pytest.mark.parametrize("n", range(3, 6))
def test_sparse_line_manager_builds_dual_maps(n):
cbloq = _build_split_join_split_cbloq(n)
manager = SparseLineManager(cbloq)
assert manager._join_to_split_id
assert manager._split_to_join_id
@pytest.mark.parametrize("n", range(3, 6))
def test_composite_bloq_to_quirk_url_shape(n):
cbloq = MultiTargetCNOT(n).decompose_bloq().flatten()
url = composite_bloq_to_quirk(cbloq)
assert url.startswith('https://algassert.com/quirk#circuit={"cols":[')
assert url.endswith(']}')
def test_bloq_to_quirk():
url_add = bloq_to_quirk(Add(QUInt(5)))
assert url_add.startswith('https://algassert.com/quirk#circuit={"cols":[')
assert url_add.endswith(']}')
url_mtcnot = bloq_to_quirk(MultiTargetCNOT(3))
assert (
url_mtcnot
== 'https://algassert.com/quirk#circuit={"cols":[[1,"•",1,"X"],[1,"•","X",1],["•","X",1,1],[1,"•","X",1],[1,"•",1,"X"]]}'
)
def test_negate_to_quirk():
url = bloq_to_quirk(Negate(QUInt(2)))
assert (
url
== '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]]}'
)
def test_bloq_to_quirk_on_atomic():
url = bloq_to_quirk(Toffoli())
assert url == 'https://algassert.com/quirk#circuit={"cols":[["•","•","X"]]}'