Line | Branch | Decision | Exec | Source |
---|---|---|---|---|
1 | // Copyright 2019-2022 Cambridge Quantum Computing | |||
2 | // | |||
3 | // Licensed under the Apache License, Version 2.0 (the "License"); | |||
4 | // you may not use this file except in compliance with the License. | |||
5 | // You may obtain a copy of the License at | |||
6 | // | |||
7 | // http://www.apache.org/licenses/LICENSE-2.0 | |||
8 | // | |||
9 | // Unless required by applicable law or agreed to in writing, software | |||
10 | // distributed under the License is distributed on an "AS IS" BASIS, | |||
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
12 | // See the License for the specific language governing permissions and | |||
13 | // limitations under the License. | |||
14 | ||||
15 | #include "CircPool.hpp" | |||
16 | ||||
17 | #include <tkassert/Assert.hpp> | |||
18 | ||||
19 | #include "CircUtils.hpp" | |||
20 | #include "Circuit.hpp" | |||
21 | #include "Gate/Rotation.hpp" | |||
22 | #include "OpType/OpType.hpp" | |||
23 | #include "Utils/Expression.hpp" | |||
24 | #include "Utils/MatrixAnalysis.hpp" | |||
25 | ||||
26 | namespace tket { | |||
27 | ||||
28 | namespace CircPool { | |||
29 | ||||
30 | 15 | const Circuit &BRIDGE_using_CX_0() { | ||
31 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
32 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(3); | |
33 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
34 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 2}); | |
35 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
36 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 2}); | |
37 | 1 | return c; | ||
38 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 14 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
17 | }()); | |
39 | 15 | return *C; | ||
40 | } | |||
41 | ||||
42 | 33 | const Circuit &BRIDGE_using_CX_1() { | ||
43 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
44 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(3); | |
45 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 2}); | |
46 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
47 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 2}); | |
48 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
49 | 1 | return c; | ||
50 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 32 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
35 | }()); | |
51 | 33 | return *C; | ||
52 | } | |||
53 | ||||
54 | 492 | const Circuit &CX_using_TK2() { | ||
55 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
56 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
57 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(tket::OpType::V, {0}); | |
58 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(tket::OpType::S, {0}); | |
59 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(tket::OpType::V, {1}); | |
60 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(tket::OpType::Z, {1}); | |
61 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(tket::OpType::TK2, {-0.5, 0, 0}, {0, 1}); | |
62 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(tket::OpType::H, {0}); | |
63 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(tket::OpType::Y, {1}); | |
64 | 1 | return c; | ||
65 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 491 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
494 | }()); | |
66 | 492 | return *C; | ||
67 | } | |||
68 | ||||
69 | 608 | const Circuit &CX_using_flipped_CX() { | ||
70 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
71 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
72 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(tket::OpType::H, {0}); | |
73 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(tket::OpType::H, {1}); | |
74 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(tket::OpType::CX, {1, 0}); | |
75 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(tket::OpType::H, {0}); | |
76 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(tket::OpType::H, {1}); | |
77 | 1 | return c; | ||
78 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 607 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
610 | }()); | |
79 | 608 | return *C; | ||
80 | } | |||
81 | ||||
82 | 63 | const Circuit &CX_using_ECR() { | ||
83 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
84 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
85 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::U3, {-1, -1, -1.5}, {0}); | |
86 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rx, 0.5, {1}); | |
87 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::ECR, {0, 1}); | |
88 | 1 | return c; | ||
89 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 62 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
65 | }()); | |
90 | 63 | return *C; | ||
91 | } | |||
92 | ||||
93 | 118 | const Circuit &CX_using_ZZMax() { | ||
94 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
95 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
96 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rz, 1.5, {0}); | |
97 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rx, 0.5, {1}); | |
98 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rz, 1.5, {1}); | |
99 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rx, 1.5, {1}); | |
100 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::ZZMax, {0, 1}); | |
101 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rx, 1.5, {1}); | |
102 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rz, 1.5, {1}); | |
103 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | c.add_phase(0.75); | |
104 | 1 | return c; | ||
105 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 117 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
120 | }()); | |
106 | 118 | return *C; | ||
107 | } | |||
108 | ||||
109 | 5 | const Circuit &CX_using_XXPhase_0() { | ||
110 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
111 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
112 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Ry, 0.5, {0}); | |
113 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::XXPhase, 0.5, {0, 1}); | |
114 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Ry, -0.5, {0}); | |
115 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rz, -0.5, {0}); | |
116 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rx, -0.5, {1}); | |
117 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | c.add_phase(-0.25); | |
118 | 1 | return c; | ||
119 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
7 | }()); | |
120 | 5 | return *C; | ||
121 | } | |||
122 | ||||
123 | 45 | const Circuit &CX_using_XXPhase_1() { | ||
124 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
125 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
126 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rx, 1.5, {1}); | |
127 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rx, 0.5, {0}); | |
128 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rz, 0.5, {0}); | |
129 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::XXPhase, 0.5, {0, 1}); | |
130 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rz, 0.5, {0}); | |
131 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rx, 0.5, {0}); | |
132 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rz, 0.5, {0}); | |
133 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | c.add_phase(-0.25); | |
134 | 1 | return c; | ||
135 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 44 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
47 | }()); | |
136 | 45 | return *C; | ||
137 | } | |||
138 | ||||
139 | ✗ | const Circuit &CX_VS_CX_reduced() { | ||
140 | ✗ | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | ||
141 | ✗ | Circuit c(2); | ||
142 | ✗ | c.add_op<unsigned>(OpType::Z, {0}); | ||
143 | ✗ | c.add_op<unsigned>(OpType::X, {1}); | ||
144 | ✗ | c.add_op<unsigned>(OpType::S, {0}); | ||
145 | ✗ | c.add_op<unsigned>(OpType::V, {1}); | ||
146 | ✗ | c.add_op<unsigned>(OpType::V, {0}); | ||
147 | ✗ | c.add_op<unsigned>(OpType::S, {1}); | ||
148 | ✗ | c.add_op<unsigned>(OpType::CX, {1, 0}); | ||
149 | ✗ | c.add_op<unsigned>(OpType::S, {0}); | ||
150 | ✗ | c.add_op<unsigned>(OpType::V, {1}); | ||
151 | ✗ | c.add_op<unsigned>(OpType::SWAP, {0, 1}); | ||
152 | ✗ | c.add_phase(0.5); | ||
153 | ✗ | return c; | ||
154 | ✗ | }()); | ||
155 | ✗ | return *C; | ||
156 | } | |||
157 | ||||
158 | 5 | const Circuit &CX_V_CX_reduced() { | ||
159 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
160 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
161 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::X, {0}); | |
162 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::V, {0}); | |
163 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {0}); | |
164 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::V, {0}); | |
165 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::V, {1}); | |
166 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
167 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::V, {0}); | |
168 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {0}); | |
169 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | c.add_phase(0.25); | |
170 | 1 | return c; | ||
171 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
7 | }()); | |
172 | 5 | return *C; | ||
173 | } | |||
174 | ||||
175 | 5 | const Circuit &CX_S_CX_reduced() { | ||
176 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
177 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
178 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {0}); | |
179 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::Z, {1}); | |
180 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {1}); | |
181 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::V, {1}); | |
182 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {1}); | |
183 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
184 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {1}); | |
185 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::V, {1}); | |
186 | 1 | return c; | ||
187 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
7 | }()); | |
188 | 5 | return *C; | ||
189 | } | |||
190 | ||||
191 | 3 | const Circuit &CX_V_S_XC_reduced() { | ||
192 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
193 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
194 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::Z, {1}); | |
195 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {0}); | |
196 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {1}); | |
197 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
198 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::V, {0}); | |
199 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {0}); | |
200 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {1}); | |
201 | 1 | return c; | ||
202 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
5 | }()); | |
203 | 3 | return *C; | ||
204 | } | |||
205 | ||||
206 | 3 | const Circuit &CX_S_V_XC_reduced() { | ||
207 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
208 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
209 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::X, {0}); | |
210 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::V, {0}); | |
211 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::V, {1}); | |
212 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
213 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::V, {0}); | |
214 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {1}); | |
215 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::V, {1}); | |
216 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | c.add_phase(0.75); | |
217 | 1 | return c; | ||
218 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
5 | }()); | |
219 | 3 | return *C; | ||
220 | } | |||
221 | ||||
222 | 1 | const Circuit &CX_XC_reduced() { | ||
223 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
224 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
225 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 0}); | |
226 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::SWAP, {0, 1}); | |
227 | 1 | return c; | ||
228 |
3/8✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
3 | }()); | |
229 | 1 | return *C; | ||
230 | } | |||
231 | ||||
232 | 894 | const Circuit &SWAP_using_CX_0() { | ||
233 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
234 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
235 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
236 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 0}); | |
237 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
238 | 1 | return c; | ||
239 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 893 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
896 | }()); | |
240 | 894 | return *C; | ||
241 | } | |||
242 | ||||
243 | 73 | const Circuit &SWAP_using_CX_1() { | ||
244 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
245 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
246 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 0}); | |
247 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
248 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 0}); | |
249 | 1 | return c; | ||
250 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 72 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
75 | }()); | |
251 | 73 | return *C; | ||
252 | } | |||
253 | ||||
254 | ✗ | const Circuit &two_Rz1() { | ||
255 | ✗ | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | ||
256 | ✗ | Circuit c(2); | ||
257 | ✗ | Op_ptr z = get_op_ptr(OpType::Rz, 1.); | ||
258 | ✗ | c.add_op<unsigned>(z, {0}); | ||
259 | ✗ | c.add_op<unsigned>(z, {1}); | ||
260 | ✗ | return c; | ||
261 | ✗ | }()); | ||
262 | ✗ | return *C; | ||
263 | } | |||
264 | ||||
265 | 2 | const Circuit &X1_CX() { | ||
266 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
267 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
268 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::X, {1}); | |
269 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
270 | 1 | return c; | ||
271 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
4 | }()); | |
272 | 2 | return *C; | ||
273 | } | |||
274 | ||||
275 | 1 | const Circuit &Z0_CX() { | ||
276 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
277 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
278 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::Z, {0}); | |
279 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
280 | 1 | return c; | ||
281 |
3/8✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
3 | }()); | |
282 | 1 | return *C; | ||
283 | } | |||
284 | ||||
285 | 520 | const Circuit &CCX_modulo_phase_shift() { | ||
286 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
287 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(3); | |
288 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Ry, 0.25, {2}); | |
289 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 2}); | |
290 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Ry, 0.25, {2}); | |
291 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 2}); | |
292 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Ry, -0.25, {2}); | |
293 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 2}); | |
294 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Ry, -0.25, {2}); | |
295 | 1 | return c; | ||
296 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 519 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
522 | }()); | |
297 | 520 | return *C; | ||
298 | } | |||
299 | ||||
300 | 352 | const Circuit &CCX_normal_decomp() { | ||
301 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
302 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(3); | |
303 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {2}); | |
304 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 2}); | |
305 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::Tdg, {2}); | |
306 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 2}); | |
307 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::T, {2}); | |
308 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 2}); | |
309 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::Tdg, {2}); | |
310 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 2}); | |
311 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::T, {2}); | |
312 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {2}); | |
313 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::T, {1}); | |
314 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
315 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::T, {0}); | |
316 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::Tdg, {1}); | |
317 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
318 | 1 | return c; | ||
319 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 351 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
354 | }()); | |
320 | 352 | return *C; | ||
321 | } | |||
322 | ||||
323 | 33 | const Circuit &C3X_normal_decomp() { | ||
324 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
325 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(4); | |
326 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {3}); | |
327 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, 0.125, {0}); | |
328 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, 0.125, {1}); | |
329 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, 0.125, {2}); | |
330 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, 0.125, {3}); | |
331 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
332 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, -0.125, {1}); | |
333 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
334 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 2}); | |
335 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, -0.125, {2}); | |
336 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 2}); | |
337 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, 0.125, {2}); | |
338 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 2}); | |
339 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, -0.125, {2}); | |
340 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 2}); | |
341 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {2, 3}); | |
342 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, -0.125, {3}); | |
343 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 3}); | |
344 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, 0.125, {3}); | |
345 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {2, 3}); | |
346 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, -0.125, {3}); | |
347 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 3}); | |
348 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, 0.125, {3}); | |
349 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {2, 3}); | |
350 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, -0.125, {3}); | |
351 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 3}); | |
352 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, 0.125, {3}); | |
353 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {2, 3}); | |
354 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, -0.125, {3}); | |
355 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 3}); | |
356 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {3}); | |
357 | 1 | return c; | ||
358 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 32 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
35 | }()); | |
359 | 33 | return *C; | ||
360 | } | |||
361 | ||||
362 | // Implementing C3X up to a relative phase | |||
363 | // https://arxiv.org/pdf/1508.03273.pdf figure 4 | |||
364 | 2 | static const Circuit &RC3X_normal_decomp() { | ||
365 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
366 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(4); | |
367 |
7/14✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 2 times.
✓ Branch 21 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
3 | c.add_op<unsigned>(OpType::U2, {0, 1}, {3}); | |
368 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, 0.25, {3}); | |
369 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {2, 3}); | |
370 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, -0.25, {3}); | |
371 |
7/14✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 2 times.
✓ Branch 21 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
3 | c.add_op<unsigned>(OpType::U2, {0, 1}, {3}); | |
372 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 3}); | |
373 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, 0.25, {3}); | |
374 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 3}); | |
375 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, -0.25, {3}); | |
376 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 3}); | |
377 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, 0.25, {3}); | |
378 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 3}); | |
379 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, -0.25, {3}); | |
380 |
7/14✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 2 times.
✓ Branch 21 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
3 | c.add_op<unsigned>(OpType::U2, {0, 1}, {3}); | |
381 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, 0.25, {3}); | |
382 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {2, 3}); | |
383 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, -0.25, {3}); | |
384 |
7/14✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 2 times.
✓ Branch 21 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
3 | c.add_op<unsigned>(OpType::U2, {0, 1}, {3}); | |
385 | 1 | return c; | ||
386 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
4 | }()); | |
387 | 2 | return *C; | ||
388 | } | |||
389 | ||||
390 | // Implementing 3-controlled SX gate | |||
391 | // https://arxiv.org/pdf/quant-ph/9503016.pdf page 17 | |||
392 | 1 | static const Circuit &C3SX_normal_decomp() { | ||
393 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
394 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(4); | |
395 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {3}); | |
396 |
4/8✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
|
1 | c.append_qubits(CU1_using_CX(-0.125), {0, 3}); | |
397 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {3}); | |
398 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
399 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {3}); | |
400 |
4/8✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
|
1 | c.append_qubits(CU1_using_CX(0.125), {1, 3}); | |
401 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {3}); | |
402 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
403 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {3}); | |
404 |
4/8✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
|
1 | c.append_qubits(CU1_using_CX(-0.125), {1, 3}); | |
405 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {3}); | |
406 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 2}); | |
407 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {3}); | |
408 |
4/8✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
|
1 | c.append_qubits(CU1_using_CX(0.125), {2, 3}); | |
409 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {3}); | |
410 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 2}); | |
411 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {3}); | |
412 |
4/8✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
|
1 | c.append_qubits(CU1_using_CX(-0.125), {2, 3}); | |
413 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {3}); | |
414 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 2}); | |
415 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {3}); | |
416 |
4/8✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
|
1 | c.append_qubits(CU1_using_CX(0.125), {2, 3}); | |
417 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {3}); | |
418 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 2}); | |
419 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {3}); | |
420 |
4/8✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
|
1 | c.append_qubits(CU1_using_CX(-0.125), {2, 3}); | |
421 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {3}); | |
422 | 1 | return c; | ||
423 |
3/8✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
3 | }()); | |
424 | 1 | return *C; | ||
425 | } | |||
426 | ||||
427 | // https://arxiv.org/pdf/quant-ph/9503016.pdf lemma 7.5 | |||
428 | 25 | const Circuit &C4X_normal_decomp() { | ||
429 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
430 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(5); | |
431 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {4}); | |
432 |
4/8✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
|
1 | c.append_qubits(CU1_using_CX(-0.5), {3, 4}); | |
433 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {4}); | |
434 | ||||
435 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.append_qubits(RC3X_normal_decomp(), {0, 1, 2, 3}); | |
436 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {4}); | |
437 |
4/8✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
|
1 | c.append_qubits(CU1_using_CX(0.5), {3, 4}); | |
438 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {4}); | |
439 |
4/8✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
|
1 | c.append_qubits(RC3X_normal_decomp().dagger(), {0, 1, 2, 3}); | |
440 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.append_qubits(C3SX_normal_decomp(), {0, 1, 2, 4}); | |
441 | 1 | return c; | ||
442 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 24 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
27 | }()); | |
443 | 25 | return *C; | ||
444 | } | |||
445 | ||||
446 | 26 | const Circuit &ladder_down() { | ||
447 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
448 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(3); | |
449 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
450 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {2, 0}); | |
451 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CCX, {0, 1, 2}); | |
452 | 1 | return c; | ||
453 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 25 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
28 | }()); | |
454 | 26 | return *C; | ||
455 | } | |||
456 | ||||
457 | 26 | const Circuit &ladder_down_2() { | ||
458 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
459 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(3); | |
460 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
461 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::X, {0}); | |
462 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::X, {2}); | |
463 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CCX, {0, 1, 2}); | |
464 | 1 | return c; | ||
465 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 25 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
28 | }()); | |
466 | 26 | return *C; | ||
467 | } | |||
468 | ||||
469 | 26 | const Circuit &ladder_up() { | ||
470 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
471 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(3); | |
472 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CCX, {0, 1, 2}); | |
473 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {2, 0}); | |
474 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {2, 1}); | |
475 | 1 | return c; | ||
476 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 25 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
28 | }()); | |
477 | 26 | return *C; | ||
478 | } | |||
479 | ||||
480 | 4 | const Circuit &X() { | ||
481 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
482 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(1); | |
483 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::X, {0}); | |
484 | 1 | return c; | ||
485 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
6 | }()); | |
486 | 4 | return *C; | ||
487 | } | |||
488 | ||||
489 | 206 | const Circuit &CX() { | ||
490 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
491 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
492 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
493 | 1 | return c; | ||
494 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 205 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
208 | }()); | |
495 | 206 | return *C; | ||
496 | } | |||
497 | ||||
498 | 23 | const Circuit &CCX() { | ||
499 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
500 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(3); | |
501 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CCX, {0, 1, 2}); | |
502 | 1 | return c; | ||
503 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 22 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
25 | }()); | |
504 | 23 | return *C; | ||
505 | } | |||
506 | ||||
507 | 1 | const Circuit &BRIDGE() { | ||
508 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
509 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(3); | |
510 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::BRIDGE, {0, 1, 2}); | |
511 | 1 | return c; | ||
512 |
3/8✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
3 | }()); | |
513 | 1 | return *C; | ||
514 | } | |||
515 | ||||
516 | 1 | const Circuit &H_CZ_H() { | ||
517 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
518 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
519 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {1}); | |
520 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CZ, {0, 1}); | |
521 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {1}); | |
522 | 1 | return c; | ||
523 |
3/8✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
3 | }()); | |
524 | 1 | return *C; | ||
525 | } | |||
526 | ||||
527 | 150 | const Circuit &CZ_using_CX() { | ||
528 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
529 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
530 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {1}); | |
531 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
532 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {1}); | |
533 | 1 | return c; | ||
534 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 149 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
152 | }()); | |
535 | 150 | return *C; | ||
536 | } | |||
537 | ||||
538 | 6 | const Circuit &CY_using_CX() { | ||
539 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
540 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
541 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::Sdg, {1}); | |
542 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
543 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {1}); | |
544 | 1 | return c; | ||
545 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 5 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
8 | }()); | |
546 | 6 | return *C; | ||
547 | } | |||
548 | ||||
549 | 10 | const Circuit &CH_using_CX() { | ||
550 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
551 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
552 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {1}); | |
553 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::Sdg, {1}); | |
554 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
555 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {1}); | |
556 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::T, {1}); | |
557 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
558 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::T, {1}); | |
559 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {1}); | |
560 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {1}); | |
561 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::X, {1}); | |
562 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {0}); | |
563 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | c.add_phase(-0.25); | |
564 | 1 | return c; | ||
565 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 9 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
12 | }()); | |
566 | 10 | return *C; | ||
567 | } | |||
568 | ||||
569 | 6 | const Circuit &CV_using_CX() { | ||
570 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
571 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c = CRx_using_CX(0.5); | |
572 | 1 | return c; | ||
573 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 5 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
8 | }()); | |
574 | 6 | return *C; | ||
575 | } | |||
576 | ||||
577 | 4 | const Circuit &CVdg_using_CX() { | ||
578 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
579 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c = CRx_using_CX(-0.5); | |
580 | 1 | return c; | ||
581 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
6 | }()); | |
582 | 4 | return *C; | ||
583 | } | |||
584 | ||||
585 | 6 | const Circuit &CSX_using_CX() { | ||
586 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
587 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
588 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {1}); | |
589 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | Circuit c2 = CU1_using_CX(0.5); | |
590 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | c.append(c2); | |
591 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {1}); | |
592 | 2 | return c; | ||
593 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 5 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
9 | }()); | |
594 | 6 | return *C; | ||
595 | } | |||
596 | ||||
597 | 4 | const Circuit &CSXdg_using_CX() { | ||
598 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
599 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
600 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {1}); | |
601 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | Circuit c2 = CU1_using_CX(-0.5); | |
602 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | c.append(c2); | |
603 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {1}); | |
604 | 2 | return c; | ||
605 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
7 | }()); | |
606 | 4 | return *C; | ||
607 | } | |||
608 | ||||
609 | 4 | const Circuit &CSWAP_using_CX() { | ||
610 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
611 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(3); | |
612 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {2, 1}); | |
613 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {2}); | |
614 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 2}); | |
615 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::Tdg, {2}); | |
616 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 2}); | |
617 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::T, {2}); | |
618 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 2}); | |
619 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::Tdg, {2}); | |
620 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 2}); | |
621 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::T, {1}); | |
622 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::T, {2}); | |
623 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::H, {2}); | |
624 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
625 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::T, {0}); | |
626 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::Tdg, {1}); | |
627 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
628 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {2, 1}); | |
629 | 1 | return c; | ||
630 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
6 | }()); | |
631 | 4 | return *C; | ||
632 | } | |||
633 | ||||
634 | 18 | const Circuit &ECR_using_CX() { | ||
635 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
636 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
637 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rx, -0.5, {1}); | |
638 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::U3, {1, 1.5, 1}, {0}); | |
639 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
640 | 1 | return c; | ||
641 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 17 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
20 | }()); | |
642 | 18 | return *C; | ||
643 | } | |||
644 | ||||
645 | 171 | const Circuit &ZZMax_using_CX() { | ||
646 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | static std::unique_ptr<const Circuit> C = std::make_unique<Circuit>([]() { | |
647 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
648 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rz, 0.5, {0}); | |
649 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::U3, {0.5, 0, 0}, {1}); | |
650 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
651 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::U3, {0.5, -0.5, 1}, {1}); | |
652 | 1 | return c; | ||
653 |
4/8✓ Branch 0 taken 1 times.
✓ Branch 1 taken 170 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
173 | }()); | |
654 | 171 | return *C; | ||
655 | } | |||
656 | ||||
657 | 1 | Circuit CRz_using_TK2(const Expr &alpha) { | ||
658 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
659 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {0.5, 0.5, 1}, {0}); | |
660 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {0.5, 0.5, 0}, {1}); | |
661 |
9/18✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 3 times.
✓ Branch 27 taken 1 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
4 | c.add_op<unsigned>(OpType::TK2, {-0.5 * alpha, 0, 0}, {0, 1}); | |
662 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {0, 0.5, 0.5}, {0}); | |
663 |
11/22✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 32 taken 3 times.
✓ Branch 33 taken 1 times.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {-1 + 0.5 * alpha, 0.5, 0.5}, {1}); | |
664 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | c.add_phase(1); | |
665 | 1 | return c; | ||
666 | } | |||
667 | ||||
668 | 4107 | Circuit CRz_using_CX(const Expr &alpha) { | ||
669 |
1/2✓ Branch 2 taken 4107 times.
✗ Branch 3 not taken.
|
4107 | Circuit c(2); | |
670 |
4/6✓ Branch 1 taken 4107 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4107 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✓ Branch 8 taken 4104 times.
|
2/2✓ Decision 'true' taken 3 times.
✓ Decision 'false' taken 4104 times.
|
4107 | if (equiv_expr(alpha, 1.)) { |
671 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.add_op<unsigned>(OpType::H, {1}); | |
672 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
673 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.add_op<unsigned>(OpType::H, {1}); | |
674 |
4/6✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 1 times.
|
2/2✓ Decision 'true' taken 2 times.
✓ Decision 'false' taken 1 times.
|
3 | if (equiv_expr(alpha, 1., 4)) { |
675 |
2/4✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
|
2 | c.add_op<unsigned>(OpType::Sdg, {0}); | |
676 | } else { | |||
677 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {0}); | |
678 | } | |||
679 | } else { | |||
680 |
4/8✓ Branch 3 taken 4104 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4104 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4104 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4104 times.
✗ Branch 13 not taken.
|
4104 | c.add_op<unsigned>(OpType::Rz, alpha / 2, {1}); | |
681 |
2/4✓ Branch 3 taken 4104 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4104 times.
✗ Branch 7 not taken.
|
4104 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
682 |
5/10✓ Branch 3 taken 4104 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4104 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4104 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4104 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 4104 times.
✗ Branch 16 not taken.
|
4104 | c.add_op<unsigned>(OpType::Rz, -alpha / 2, {1}); | |
683 |
2/4✓ Branch 3 taken 4104 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4104 times.
✗ Branch 7 not taken.
|
4104 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
684 | } | |||
685 | 4107 | return c; | ||
686 | } | |||
687 | ||||
688 | 1 | Circuit CRx_using_TK2(const Expr &alpha) { | ||
689 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
690 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {-0.5, 0.5, 0}, {0}); | |
691 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {1, 0.5, 0}, {1}); | |
692 |
9/18✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 3 times.
✓ Branch 27 taken 1 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
4 | c.add_op<unsigned>(OpType::TK2, {-0.5 * alpha, 0, 0}, {0, 1}); | |
693 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {-1, 0.5, -0.5}, {0}); | |
694 |
11/22✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 32 taken 3 times.
✓ Branch 33 taken 1 times.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {1, 0.5 - 0.5 * alpha, 0}, {1}); | |
695 | 1 | return c; | ||
696 | } | |||
697 | ||||
698 | 4258 | Circuit CRx_using_CX(const Expr &alpha) { | ||
699 |
1/2✓ Branch 2 taken 4258 times.
✗ Branch 3 not taken.
|
4258 | Circuit c(2); | |
700 |
4/6✓ Branch 1 taken 4258 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4258 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8 times.
✓ Branch 8 taken 4250 times.
|
2/2✓ Decision 'true' taken 8 times.
✓ Decision 'false' taken 4250 times.
|
4258 | if (equiv_expr(alpha, 1.)) { |
701 |
2/4✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 7 not taken.
|
8 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
702 |
4/6✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✓ Branch 8 taken 4 times.
|
2/2✓ Decision 'true' taken 4 times.
✓ Decision 'false' taken 4 times.
|
8 | if (equiv_expr(alpha, 1., 4)) { |
703 |
2/4✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
|
4 | c.add_op<unsigned>(OpType::Sdg, {0}); | |
704 | } else { | |||
705 |
2/4✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
|
4 | c.add_op<unsigned>(OpType::S, {0}); | |
706 | } | |||
707 | } else { | |||
708 |
4/8✓ Branch 3 taken 4250 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4250 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4250 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4250 times.
✗ Branch 13 not taken.
|
4250 | c.add_op<unsigned>(OpType::Rx, alpha / 2, {1}); | |
709 |
2/4✓ Branch 3 taken 4250 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4250 times.
✗ Branch 7 not taken.
|
4250 | c.add_op<unsigned>(OpType::H, {1}); | |
710 |
2/4✓ Branch 3 taken 4250 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4250 times.
✗ Branch 7 not taken.
|
4250 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
711 |
2/4✓ Branch 3 taken 4250 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4250 times.
✗ Branch 7 not taken.
|
4250 | c.add_op<unsigned>(OpType::H, {1}); | |
712 |
5/10✓ Branch 3 taken 4250 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4250 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4250 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4250 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 4250 times.
✗ Branch 16 not taken.
|
4250 | c.add_op<unsigned>(OpType::Rx, -alpha / 2, {1}); | |
713 |
2/4✓ Branch 3 taken 4250 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4250 times.
✗ Branch 7 not taken.
|
4250 | c.add_op<unsigned>(OpType::H, {1}); | |
714 |
2/4✓ Branch 3 taken 4250 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4250 times.
✗ Branch 7 not taken.
|
4250 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
715 |
2/4✓ Branch 3 taken 4250 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4250 times.
✗ Branch 7 not taken.
|
4250 | c.add_op<unsigned>(OpType::H, {1}); | |
716 | } | |||
717 | 4258 | return c; | ||
718 | } | |||
719 | ||||
720 | 1 | Circuit CRy_using_TK2(const Expr &alpha) { | ||
721 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
722 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {0.5, 0.5, 0.5}, {0}); | |
723 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {0, 0.5, -0.5}, {1}); | |
724 |
9/18✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 3 times.
✓ Branch 27 taken 1 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
4 | c.add_op<unsigned>(OpType::TK2, {-0.5 * alpha, 0, 0}, {0, 1}); | |
725 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {0.5, 0.5, 0.5}, {0}); | |
726 |
11/22✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 32 taken 3 times.
✓ Branch 33 taken 1 times.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {-0.5, 0.5 - 0.5 * alpha, 1}, {1}); | |
727 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | c.add_phase(-1); | |
728 | 1 | return c; | ||
729 | } | |||
730 | ||||
731 | 4386 | Circuit CRy_using_CX(const Expr &alpha) { | ||
732 |
1/2✓ Branch 2 taken 4386 times.
✗ Branch 3 not taken.
|
4386 | Circuit c(2); | |
733 |
4/6✓ Branch 1 taken 4386 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4386 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 4384 times.
|
2/2✓ Decision 'true' taken 2 times.
✓ Decision 'false' taken 4384 times.
|
4386 | if (equiv_expr(alpha, 1.)) { |
734 |
2/4✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
|
2 | c.add_op<unsigned>(OpType::Sdg, {1}); | |
735 |
2/4✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
|
2 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
736 |
2/4✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
|
2 | c.add_op<unsigned>(OpType::S, {1}); | |
737 |
4/6✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
|
2/2✓ Decision 'true' taken 1 times.
✓ Decision 'false' taken 1 times.
|
2 | if (equiv_expr(alpha, 1., 4)) { |
738 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::Sdg, {0}); | |
739 | } else { | |||
740 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {0}); | |
741 | } | |||
742 | } else { | |||
743 |
4/8✓ Branch 3 taken 4384 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4384 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4384 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4384 times.
✗ Branch 13 not taken.
|
4384 | c.add_op<unsigned>(OpType::Ry, alpha / 2, {1}); | |
744 |
2/4✓ Branch 3 taken 4384 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4384 times.
✗ Branch 7 not taken.
|
4384 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
745 |
5/10✓ Branch 3 taken 4384 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4384 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4384 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4384 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 4384 times.
✗ Branch 16 not taken.
|
4384 | c.add_op<unsigned>(OpType::Ry, -alpha / 2, {1}); | |
746 |
2/4✓ Branch 3 taken 4384 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4384 times.
✗ Branch 7 not taken.
|
4384 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
747 | } | |||
748 | 4386 | return c; | ||
749 | } | |||
750 | ||||
751 | 1 | Circuit CU1_using_TK2(const Expr &alpha) { | ||
752 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
753 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {0.5, 0.5, 1}, {0}); | |
754 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {0.5, 0.5, 0}, {1}); | |
755 |
9/18✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 3 times.
✓ Branch 27 taken 1 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
4 | c.add_op<unsigned>(OpType::TK2, {-0.5 * alpha, 0, 0}, {0, 1}); | |
756 |
9/18✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 3 times.
✓ Branch 27 taken 1 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {0.5 * alpha, 0.5, 0.5}, {0}); | |
757 |
11/22✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 32 taken 3 times.
✓ Branch 33 taken 1 times.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {-1 + 0.5 * alpha, 0.5, 0.5}, {1}); | |
758 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
|
1 | c.add_phase(-1 + 0.25 * alpha); | |
759 | 1 | return c; | ||
760 | } | |||
761 | ||||
762 | 4342 | Circuit CU1_using_CX(const Expr &lambda) { | ||
763 |
1/2✓ Branch 2 taken 4342 times.
✗ Branch 3 not taken.
|
4342 | Circuit c(2); | |
764 |
4/8✓ Branch 3 taken 4342 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4342 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4342 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4342 times.
✗ Branch 13 not taken.
|
4342 | c.add_op<unsigned>(OpType::U1, lambda / 2, {0}); | |
765 |
2/4✓ Branch 3 taken 4342 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4342 times.
✗ Branch 7 not taken.
|
4342 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
766 |
5/10✓ Branch 3 taken 4342 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4342 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4342 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4342 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 4342 times.
✗ Branch 16 not taken.
|
4342 | c.add_op<unsigned>(OpType::U1, -lambda / 2, {1}); | |
767 |
2/4✓ Branch 3 taken 4342 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4342 times.
✗ Branch 7 not taken.
|
4342 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
768 |
4/8✓ Branch 3 taken 4342 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4342 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4342 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4342 times.
✗ Branch 13 not taken.
|
4342 | c.add_op<unsigned>(OpType::U1, lambda / 2, {1}); | |
769 | 4342 | return c; | ||
770 | } | |||
771 | ||||
772 | 4137 | Circuit CU3_using_CX(const Expr &theta, const Expr &phi, const Expr &lambda) { | ||
773 |
1/2✓ Branch 2 taken 4137 times.
✗ Branch 3 not taken.
|
4137 | Circuit c(2); | |
774 |
5/10✓ Branch 3 taken 4137 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4137 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4137 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4137 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 4137 times.
✗ Branch 16 not taken.
|
4137 | c.add_op<unsigned>(OpType::U1, (lambda + phi) / 2, {0}); | |
775 |
5/10✓ Branch 3 taken 4137 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4137 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4137 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4137 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 4137 times.
✗ Branch 16 not taken.
|
4137 | c.add_op<unsigned>(OpType::U1, (lambda - phi) / 2, {1}); | |
776 |
2/4✓ Branch 3 taken 4137 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4137 times.
✗ Branch 7 not taken.
|
4137 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
777 |
13/26✓ Branch 3 taken 4137 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4137 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4137 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4137 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 4137 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 4137 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 4137 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 4137 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 4137 times.
✗ Branch 28 not taken.
✓ Branch 31 taken 4137 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 4137 times.
✗ Branch 35 not taken.
✓ Branch 38 taken 12411 times.
✓ Branch 39 taken 4137 times.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
|
16548 | c.add_op<unsigned>(OpType::U3, {-theta / 2, 0., -(lambda + phi) / 2}, {1}); | |
778 |
2/4✓ Branch 3 taken 4137 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4137 times.
✗ Branch 7 not taken.
|
4137 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
779 |
9/18✓ Branch 3 taken 4137 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4137 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4137 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4137 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 4137 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 4137 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 4137 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 12411 times.
✓ Branch 27 taken 4137 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
16548 | c.add_op<unsigned>(OpType::U3, {theta / 2, phi, 0.}, {1}); | |
780 |
1/2✓ Branch 1 taken 4137 times.
✗ Branch 2 not taken.
|
4137 | c.remove_noops(); | |
781 | 4137 | return c; | ||
782 | } | |||
783 | ||||
784 | 1 | Circuit ISWAP_using_TK2(const Expr &alpha) { | ||
785 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
786 |
10/20✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 29 taken 3 times.
✓ Branch 30 taken 1 times.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
|
4 | c.add_op<unsigned>(OpType::TK2, {-0.5 * alpha, -0.5 * alpha, 0}, {0, 1}); | |
787 | 1 | return c; | ||
788 | } | |||
789 | ||||
790 | 5 | Circuit ISWAP_using_CX(const Expr &alpha) { | ||
791 |
1/2✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
|
5 | Circuit c(2); | |
792 |
8/16✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 5 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 5 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 5 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 5 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 5 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 15 times.
✓ Branch 24 taken 5 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
20 | c.add_op<unsigned>(OpType::U3, {0.5, -0.5, 0.5}, {0}); | |
793 |
8/16✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 5 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 5 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 5 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 5 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 5 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 15 times.
✓ Branch 24 taken 5 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
20 | c.add_op<unsigned>(OpType::U3, {0.5, -0.5, 0.5}, {1}); | |
794 |
2/4✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 5 times.
✗ Branch 7 not taken.
|
5 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
795 |
9/18✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 5 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 5 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 5 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 5 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 5 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 5 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 15 times.
✓ Branch 27 taken 5 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
20 | c.add_op<unsigned>(OpType::U3, {-0.5 * alpha, -0.5, 0.5}, {0}); | |
796 |
4/8✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 5 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 5 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 5 times.
✗ Branch 13 not taken.
|
5 | c.add_op<unsigned>(OpType::Rz, -0.5 * alpha, {1}); | |
797 |
2/4✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 5 times.
✗ Branch 7 not taken.
|
5 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
798 |
8/16✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 5 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 5 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 5 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 5 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 5 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 15 times.
✓ Branch 24 taken 5 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
20 | c.add_op<unsigned>(OpType::U3, {-0.5, -0.5, 0.5}, {0}); | |
799 |
8/16✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 5 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 5 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 5 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 5 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 5 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 15 times.
✓ Branch 24 taken 5 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
20 | c.add_op<unsigned>(OpType::U3, {-0.5, -0.5, 0.5}, {1}); | |
800 | 5 | return c; | ||
801 | } | |||
802 | ||||
803 | 1 | Circuit XXPhase_using_TK2(const Expr &alpha) { | ||
804 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
805 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK2, {alpha, 0, 0}, {0, 1}); | |
806 | 1 | return c; | ||
807 | } | |||
808 | ||||
809 | 12 | Circuit XXPhase_using_CX(const Expr &alpha) { | ||
810 |
1/2✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
|
12 | Circuit c(2); | |
811 |
2/4✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
|
12 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
812 |
8/16✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 12 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 12 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 12 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 36 times.
✓ Branch 24 taken 12 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
48 | c.add_op<unsigned>(OpType::U3, {alpha, -0.5, 0.5}, {0}); | |
813 |
2/4✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
|
12 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
814 | 12 | return c; | ||
815 | } | |||
816 | ||||
817 | 1 | Circuit YYPhase_using_TK2(const Expr &alpha) { | ||
818 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
819 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK2, {0, alpha, 0}, {0, 1}); | |
820 | 1 | return c; | ||
821 | } | |||
822 | ||||
823 | 3 | Circuit YYPhase_using_CX(const Expr &alpha) { | ||
824 |
1/2✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
|
3 | Circuit c(2); | |
825 |
8/16✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 9 times.
✓ Branch 24 taken 3 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
12 | c.add_op<unsigned>(OpType::U3, {0.5, -0.5, 0.5}, {0}); | |
826 |
8/16✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 9 times.
✓ Branch 24 taken 3 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
12 | c.add_op<unsigned>(OpType::U3, {0.5, -0.5, 0.5}, {1}); | |
827 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
828 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.add_op<unsigned>(OpType::Rz, alpha, {1}); | |
829 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
830 |
8/16✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 9 times.
✓ Branch 24 taken 3 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
12 | c.add_op<unsigned>(OpType::U3, {-0.5, -0.5, 0.5}, {0}); | |
831 |
8/16✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 9 times.
✓ Branch 24 taken 3 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
12 | c.add_op<unsigned>(OpType::U3, {-0.5, -0.5, 0.5}, {1}); | |
832 | 3 | return c; | ||
833 | } | |||
834 | ||||
835 | 1 | Circuit ZZPhase_using_TK2(const Expr &alpha) { | ||
836 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
837 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK2, {0, 0, alpha}, {0, 1}); | |
838 | 1 | return c; | ||
839 | } | |||
840 | ||||
841 | 9 | Circuit ZZPhase_using_CX(const Expr &alpha) { | ||
842 |
1/2✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
|
9 | Circuit c(2); | |
843 |
2/4✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
|
9 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
844 |
2/4✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
|
9 | c.add_op<unsigned>(OpType::Rz, alpha, {1}); | |
845 |
2/4✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
|
9 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
846 | 9 | return c; | ||
847 | } | |||
848 | ||||
849 | 15 | Circuit XXPhase_using_ZZPhase(const Expr &alpha) { | ||
850 |
1/2✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
|
15 | Circuit c(2); | |
851 |
2/4✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 15 times.
✗ Branch 7 not taken.
|
15 | c.add_op<unsigned>(OpType::H, {0}); | |
852 |
2/4✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 15 times.
✗ Branch 7 not taken.
|
15 | c.add_op<unsigned>(OpType::H, {1}); | |
853 |
2/4✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 15 times.
✗ Branch 7 not taken.
|
15 | c.add_op<unsigned>(OpType::ZZPhase, alpha, {0, 1}); | |
854 |
2/4✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 15 times.
✗ Branch 7 not taken.
|
15 | c.add_op<unsigned>(OpType::H, {0}); | |
855 |
2/4✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 15 times.
✗ Branch 7 not taken.
|
15 | c.add_op<unsigned>(OpType::H, {1}); | |
856 | 15 | return c; | ||
857 | } | |||
858 | ||||
859 | 8 | Circuit YYPhase_using_ZZPhase(const Expr &alpha) { | ||
860 |
1/2✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
|
8 | Circuit c(2); | |
861 |
2/4✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 7 not taken.
|
8 | c.add_op<unsigned>(OpType::Vdg, {0}); | |
862 |
2/4✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 7 not taken.
|
8 | c.add_op<unsigned>(OpType::Vdg, {1}); | |
863 |
2/4✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 7 not taken.
|
8 | c.add_op<unsigned>(OpType::ZZPhase, alpha, {0, 1}); | |
864 |
2/4✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 7 not taken.
|
8 | c.add_op<unsigned>(OpType::V, {0}); | |
865 |
2/4✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 7 not taken.
|
8 | c.add_op<unsigned>(OpType::V, {1}); | |
866 | 8 | return c; | ||
867 | } | |||
868 | ||||
869 | 1467 | Circuit approx_TK2_using_1xCX() { | ||
870 |
1/2✓ Branch 2 taken 1467 times.
✗ Branch 3 not taken.
|
1467 | Circuit c(2); | |
871 |
8/16✓ Branch 3 taken 1467 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1467 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1467 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1467 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1467 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1467 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 4401 times.
✓ Branch 24 taken 1467 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
5868 | c.add_op<unsigned>(OpType::TK1, {0.5, 1.5, 1.5}, {0}); | |
872 |
8/16✓ Branch 3 taken 1467 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1467 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1467 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1467 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1467 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1467 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 4401 times.
✓ Branch 24 taken 1467 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
5868 | c.add_op<unsigned>(OpType::TK1, {0., 0.5, 0}, {1}); | |
873 |
2/4✓ Branch 3 taken 1467 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1467 times.
✗ Branch 7 not taken.
|
1467 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
874 |
8/16✓ Branch 3 taken 1467 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1467 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1467 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1467 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1467 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1467 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 4401 times.
✓ Branch 24 taken 1467 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
5868 | c.add_op<unsigned>(OpType::TK1, {0.5, 0.5, 0}, {0}); | |
875 |
2/4✓ Branch 1 taken 1467 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1467 times.
✗ Branch 5 not taken.
|
1467 | c.add_phase(0.25); | |
876 | 1467 | return c; | ||
877 | } | |||
878 | ||||
879 | 4455 | Circuit approx_TK2_using_2xCX(const Expr &alpha, const Expr &beta) { | ||
880 |
1/2✓ Branch 2 taken 4455 times.
✗ Branch 3 not taken.
|
4455 | Circuit c(2); | |
881 |
8/16✓ Branch 3 taken 4455 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4455 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4455 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4455 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 4455 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 4455 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 13365 times.
✓ Branch 24 taken 4455 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
17820 | c.add_op<unsigned>(OpType::TK1, {0.5, 0.5, 0}, {0}); | |
882 |
8/16✓ Branch 3 taken 4455 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4455 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4455 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4455 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 4455 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 4455 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 13365 times.
✓ Branch 24 taken 4455 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
17820 | c.add_op<unsigned>(OpType::TK1, {0., 1.5, 0}, {1}); | |
883 |
2/4✓ Branch 3 taken 4455 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4455 times.
✗ Branch 7 not taken.
|
4455 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
884 |
9/18✓ Branch 3 taken 4455 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4455 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4455 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4455 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 4455 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 4455 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 4455 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 13365 times.
✓ Branch 27 taken 4455 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
17820 | c.add_op<unsigned>(OpType::TK1, {0., 1 + alpha, 1.5}, {0}); | |
885 |
9/18✓ Branch 3 taken 4455 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4455 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4455 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4455 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 4455 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 4455 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 4455 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 13365 times.
✓ Branch 27 taken 4455 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
17820 | c.add_op<unsigned>(OpType::TK1, {0., 1.5, 2 - beta}, {1}); | |
886 |
2/4✓ Branch 3 taken 4455 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4455 times.
✗ Branch 7 not taken.
|
4455 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
887 |
8/16✓ Branch 3 taken 4455 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4455 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4455 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4455 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 4455 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 4455 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 13365 times.
✓ Branch 24 taken 4455 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
17820 | c.add_op<unsigned>(OpType::TK1, {0., 0.5, 0}, {0}); | |
888 |
2/4✓ Branch 1 taken 4455 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4455 times.
✗ Branch 5 not taken.
|
4455 | c.add_phase(0.5); | |
889 | 4455 | return c; | ||
890 | } | |||
891 | ||||
892 | 376 | Circuit TK2_using_3xCX(const Expr &alpha, const Expr &beta, const Expr &gamma) { | ||
893 |
1/2✓ Branch 2 taken 376 times.
✗ Branch 3 not taken.
|
376 | Circuit c(2); | |
894 |
8/16✓ Branch 3 taken 376 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 376 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 376 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 376 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 376 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 376 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1128 times.
✓ Branch 24 taken 376 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
1504 | c.add_op<unsigned>(OpType::TK1, {0.5, 1.5, 1}, {0}); | |
895 |
8/16✓ Branch 3 taken 376 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 376 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 376 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 376 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 376 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 376 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1128 times.
✓ Branch 24 taken 376 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
1504 | c.add_op<unsigned>(OpType::TK1, {0, 0.5, 0}, {1}); | |
896 |
2/4✓ Branch 3 taken 376 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 376 times.
✗ Branch 7 not taken.
|
376 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
897 |
9/18✓ Branch 3 taken 376 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 376 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 376 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 376 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 376 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 376 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 376 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 1128 times.
✓ Branch 27 taken 376 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
1504 | c.add_op<unsigned>(OpType::TK1, {3.5 + alpha, 3.5, 0.}, {0}); | |
898 |
9/18✓ Branch 3 taken 376 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 376 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 376 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 376 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 376 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 376 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 376 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 1128 times.
✓ Branch 27 taken 376 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
1504 | c.add_op<unsigned>(OpType::TK1, {0.5, 1, 0.5 + beta}, {1}); | |
899 |
2/4✓ Branch 3 taken 376 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 376 times.
✗ Branch 7 not taken.
|
376 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
900 |
8/16✓ Branch 3 taken 376 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 376 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 376 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 376 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 376 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 376 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1128 times.
✓ Branch 24 taken 376 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
1504 | c.add_op<unsigned>(OpType::TK1, {0.5, 0.5, 0.}, {0}); | |
901 |
8/16✓ Branch 3 taken 376 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 376 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 376 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 376 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 376 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 376 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1128 times.
✓ Branch 24 taken 376 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
1504 | c.add_op<unsigned>(OpType::TK1, {0, 0, gamma}, {1}); | |
902 |
2/4✓ Branch 3 taken 376 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 376 times.
✗ Branch 7 not taken.
|
376 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
903 |
2/4✓ Branch 1 taken 376 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 376 times.
✗ Branch 5 not taken.
|
376 | c.add_phase(0.75); | |
904 | 376 | return c; | ||
905 | } | |||
906 | ||||
907 | 4911 | Circuit normalised_TK2_using_CX( | ||
908 | const Expr &alpha, const Expr &beta, const Expr &gamma) { | |||
909 | // only handle TK2 if normalised to Weyl chamber | |||
910 |
6/8✓ Branch 1 taken 109 times.
✓ Branch 2 taken 4802 times.
✓ Branch 4 taken 109 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 109 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 109 times.
✓ Branch 10 taken 4802 times.
|
2/2✓ Decision 'true' taken 109 times.
✓ Decision 'false' taken 4802 times.
|
4911 | if (equiv_0(alpha, 4) && equiv_0(beta, 4) && equiv_0(gamma, 4)) { |
911 |
1/2✓ Branch 2 taken 109 times.
✗ Branch 3 not taken.
|
109 | return Circuit(2); | |
912 | 4802 | } else if ( | ||
913 |
12/20✓ Branch 1 taken 4802 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4802 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2940 times.
✓ Branch 7 taken 1862 times.
✓ Branch 9 taken 2940 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 1416 times.
✓ Branch 12 taken 1524 times.
✓ Branch 14 taken 1416 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 1416 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 4802 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1416 times.
✓ Branch 22 taken 3386 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
4802 | equiv_expr(alpha, 0.5, 4) && equiv_0(beta, 4) && equiv_0(gamma, 4)) { | |
914 | 1416 | return approx_TK2_using_1xCX(); | ||
915 |
2/2✓ Branch 1 taken 3034 times.
✓ Branch 2 taken 352 times.
|
2/2✓ Decision 'true' taken 3034 times.
✓ Decision 'false' taken 352 times.
|
3386 | } else if (equiv_0(gamma, 4)) { |
916 | 3034 | return approx_TK2_using_2xCX(alpha, beta); | ||
917 | } else { | |||
918 | 352 | return TK2_using_3xCX(alpha, beta, gamma); | ||
919 | } | |||
920 | } | |||
921 | ||||
922 | 625 | Circuit TK2_using_CX(const Expr &alpha, const Expr &beta, const Expr &gamma) { | ||
923 | 625 | Circuit c = TK2_using_normalised_TK2(alpha, beta, gamma); | ||
924 | // Find the TK2 vertex and replace it. | |||
925 |
5/8✓ Branch 1 taken 625 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2780 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2780 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 625 times.
✓ Branch 12 taken 625 times.
|
3405 | BGL_FORALL_VERTICES(v, c.dag, DAG) { | |
926 |
1/2✓ Branch 1 taken 2780 times.
✗ Branch 2 not taken.
|
2780 | Op_ptr op = c.get_Op_ptr_from_Vertex(v); | |
927 |
2/2✓ Branch 2 taken 625 times.
✓ Branch 3 taken 2155 times.
|
2/2✓ Decision 'true' taken 625 times.
✓ Decision 'false' taken 2155 times.
|
2780 | if (op->get_type() == OpType::TK2) { |
928 |
1/2✓ Branch 2 taken 625 times.
✗ Branch 3 not taken.
|
625 | std::vector<Expr> params = op->get_params(); | |
929 | TKET_ASSERT(params.size() == 3); | |||
930 |
1/2✓ Branch 4 taken 625 times.
✗ Branch 5 not taken.
|
625 | Circuit rep = normalised_TK2_using_CX(params[0], params[1], params[2]); | |
931 |
1/2✓ Branch 1 taken 625 times.
✗ Branch 2 not taken.
|
625 | c.substitute(rep, v, Circuit::VertexDeletion::Yes); | |
932 | 625 | break; | ||
933 | 625 | } | ||
934 |
2/2✓ Branch 1 taken 2155 times.
✓ Branch 2 taken 625 times.
|
2780 | } | |
935 | 625 | return c; | ||
936 | } | |||
937 | ||||
938 | 7 | Circuit approx_TK2_using_1xZZPhase(const Expr &alpha) { | ||
939 | 7 | return XXPhase_using_ZZPhase(alpha); | ||
940 | } | |||
941 | ||||
942 | 2 | Circuit approx_TK2_using_2xZZPhase(const Expr &alpha, const Expr &beta) { | ||
943 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | Circuit c(2); | |
944 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
2 | c.append(XXPhase_using_ZZPhase(alpha)); | |
945 |
2/4✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
2 | c.append(YYPhase_using_ZZPhase(beta)); | |
946 | 2 | return c; | ||
947 | } | |||
948 | ||||
949 | 3 | Circuit TK2_using_ZZPhase( | ||
950 | const Expr &alpha, const Expr &beta, const Expr &gamma) { | |||
951 |
1/2✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
|
3 | Circuit c(2); | |
952 |
2/4✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
|
3 | c.append(XXPhase_using_ZZPhase(alpha)); | |
953 |
2/4✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
|
3 | c.append(YYPhase_using_ZZPhase(beta)); | |
954 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.add_op<unsigned>(OpType::ZZPhase, gamma, {0, 1}); | |
955 | 3 | return c; | ||
956 | } | |||
957 | ||||
958 | 4 | Circuit TK2_using_ZZMax( | ||
959 | const Expr &alpha, const Expr &beta, const Expr &gamma) { | |||
960 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | Circuit c = TK2_using_CX(alpha, beta, gamma); | |
961 | // Find the CX gates and replace them with ZZMax. | |||
962 | 4 | VertexSet bin; | ||
963 |
7/8✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 106 times.
✓ Branch 6 taken 4 times.
✓ Branch 8 taken 106 times.
✓ Branch 9 taken 4 times.
✓ Branch 11 taken 4 times.
✓ Branch 12 taken 4 times.
|
114 | BGL_FORALL_VERTICES(v, c.dag, DAG) { | |
964 |
1/2✓ Branch 1 taken 106 times.
✗ Branch 2 not taken.
|
106 | Op_ptr op = c.get_Op_ptr_from_Vertex(v); | |
965 |
2/2✓ Branch 2 taken 7 times.
✓ Branch 3 taken 99 times.
|
2/2✓ Decision 'true' taken 7 times.
✓ Decision 'false' taken 99 times.
|
106 | if (op->get_type() == OpType::CX) { |
966 |
2/4✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7 times.
✗ Branch 5 not taken.
|
7 | c.substitute(CX_using_ZZMax(), v, Circuit::VertexDeletion::No); | |
967 |
1/2✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
|
7 | bin.insert(v); | |
968 | } | |||
969 | 106 | } | ||
970 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | c.remove_vertices( | |
971 | bin, Circuit::GraphRewiring::No, Circuit::VertexDeletion::Yes); | |||
972 | 8 | return c; | ||
973 | 4 | } | ||
974 | ||||
975 | 1 | Circuit XXPhase3_using_TK2(const Expr &alpha) { | ||
976 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(3); | |
977 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK2, {alpha, 0, 0}, {0, 1}); | |
978 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK2, {alpha, 0, 0}, {1, 2}); | |
979 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK2, {alpha, 0, 0}, {0, 2}); | |
980 | 1 | return c; | ||
981 | } | |||
982 | ||||
983 | 3 | Circuit XXPhase3_using_CX(const Expr &alpha) { | ||
984 |
1/2✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
|
3 | Circuit c(3); | |
985 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | Circuit rep1 = XXPhase_using_CX(alpha); | |
986 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.append_qubits(rep1, {0, 1}); | |
987 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.append_qubits(rep1, {1, 2}); | |
988 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.append_qubits(rep1, {0, 2}); | |
989 | 6 | return c; | ||
990 | 3 | } | ||
991 | ||||
992 | 1 | Circuit ESWAP_using_TK2(const Expr &alpha) { | ||
993 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
994 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {0.5, 0.5, -0.5}, {0}); | |
995 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {-0.5, 0.5, -0.5}, {1}); | |
996 |
11/22✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 32 taken 3 times.
✓ Branch 33 taken 1 times.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
|
4 | c.add_op<unsigned>( | |
997 | OpType::TK2, {-0.5 * alpha, -0.5 * alpha, 0.5 * alpha}, {0, 1}); | |||
998 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {-0.5, 0.5, 0.5}, {0}); | |
999 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {-0.5, 0.5, -0.5}, {1}); | |
1000 |
5/10✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
|
1 | c.add_phase(1 - 0.25 * alpha); | |
1001 | 1 | return c; | ||
1002 | } | |||
1003 | ||||
1004 | 1 | Circuit ESWAP_using_CX(const Expr &alpha) { | ||
1005 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
1006 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {0}); | |
1007 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::X, {1}); | |
1008 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 0}); | |
1009 |
6/12✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
|
1 | c.add_op<unsigned>(OpType::U1, 0.5 - 0.5 * alpha, {0}); | |
1010 |
6/12✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
|
1 | c.add_op<unsigned>(OpType::Ry, -0.5 + 0.5 * alpha, {1}); | |
1011 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
1012 |
6/12✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
|
1 | c.add_op<unsigned>(OpType::Ry, 0.5 + 0.5 * alpha, {1}); | |
1013 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::CX, {1, 0}); | |
1014 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::X, {1}); | |
1015 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::S, {1}); | |
1016 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | c.add_phase(-0.5); | |
1017 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | c.remove_noops(); | |
1018 | 1 | return c; | ||
1019 | } | |||
1020 | ||||
1021 | 1 | Circuit FSim_using_TK2(const Expr &alpha, const Expr &beta) { | ||
1022 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
1023 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {-0.5, 0.5, -1}, {0}); | |
1024 |
8/16✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✓ Branch 24 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {0.5, 0.5, 1}, {1}); | |
1025 |
9/18✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 3 times.
✓ Branch 27 taken 1 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
4 | c.add_op<unsigned>(OpType::TK2, {-0.5 * beta, -alpha, alpha}, {0, 1}); | |
1026 |
9/18✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 3 times.
✓ Branch 27 taken 1 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {-0.5 * beta, 0.5, -0.5}, {0}); | |
1027 |
9/18✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 3 times.
✓ Branch 27 taken 1 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
4 | c.add_op<unsigned>(OpType::TK1, {-0.5 * beta, 0.5, 0.5}, {1}); | |
1028 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
1 | c.add_phase(-0.25 * beta); | |
1029 | 1 | return c; | ||
1030 | } | |||
1031 | ||||
1032 | 4 | Circuit FSim_using_CX(const Expr &alpha, const Expr &beta) { | ||
1033 |
1/2✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
|
4 | Circuit c(2); | |
1034 |
8/16✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 4 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 12 times.
✓ Branch 24 taken 4 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
16 | c.add_op<unsigned>(OpType::U3, {0.5, 0.5, 0.5}, {0}); | |
1035 |
8/16✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 4 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 12 times.
✓ Branch 24 taken 4 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
16 | c.add_op<unsigned>(OpType::U3, {0.5, 0., 1.5}, {1}); | |
1036 |
2/4✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
|
4 | c.add_op<unsigned>(OpType::CX, {1, 0}); | |
1037 |
4/8✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4 times.
✗ Branch 13 not taken.
|
4 | c.add_op<unsigned>(OpType::U1, 0.5 - alpha, {0}); | |
1038 |
9/18✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 4 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 4 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 4 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 12 times.
✓ Branch 27 taken 4 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
16 | c.add_op<unsigned>(OpType::U3, {-0.5 + alpha, 0, 0}, {1}); | |
1039 |
2/4✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
|
4 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
1040 |
11/22✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 4 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 4 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 4 times.
✗ Branch 22 not taken.
✓ Branch 25 taken 4 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 4 times.
✗ Branch 29 not taken.
✓ Branch 32 taken 12 times.
✓ Branch 33 taken 4 times.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
|
16 | c.add_op<unsigned>(OpType::U3, {0.5 + 0.5 * beta, 0, 0}, {1}); | |
1041 |
2/4✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
|
4 | c.add_op<unsigned>(OpType::CX, {1, 0}); | |
1042 |
11/22✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 4 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 4 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 4 times.
✗ Branch 22 not taken.
✓ Branch 25 taken 4 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 4 times.
✗ Branch 29 not taken.
✓ Branch 32 taken 12 times.
✓ Branch 33 taken 4 times.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
|
16 | c.add_op<unsigned>(OpType::U3, {0.5, 0.5 - 0.5 * beta, 1}, {0}); | |
1043 |
11/22✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 4 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 4 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 4 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 4 times.
✗ Branch 22 not taken.
✓ Branch 25 taken 4 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 4 times.
✗ Branch 29 not taken.
✓ Branch 32 taken 12 times.
✓ Branch 33 taken 4 times.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
|
16 | c.add_op<unsigned>(OpType::U3, {0.5, -0.5 - 0.5 * beta, 0.5}, {1}); | |
1044 |
6/12✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 4 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
|
4 | c.add_phase(0.5 * alpha + 0.25 * beta); | |
1045 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | c.remove_noops(); | |
1046 | 4 | return c; | ||
1047 | } | |||
1048 | ||||
1049 | 1 | Circuit PhasedISWAP_using_TK2(const Expr &p, const Expr &t) { | ||
1050 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | Circuit c(2); | |
1051 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::Rz, p, {0}); | |
1052 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rz, -p, {1}); | |
1053 |
10/20✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 29 taken 3 times.
✓ Branch 30 taken 1 times.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
|
4 | c.add_op<unsigned>(OpType::TK2, {-0.5 * t, -0.5 * t, 0}, {0, 1}); | |
1054 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
|
1 | c.add_op<unsigned>(OpType::Rz, -p, {0}); | |
1055 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | c.add_op<unsigned>(OpType::Rz, p, {1}); | |
1056 | 1 | return c; | ||
1057 | } | |||
1058 | ||||
1059 | 3 | Circuit PhasedISWAP_using_CX(const Expr &p, const Expr &t) { | ||
1060 |
1/2✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
|
3 | Circuit c(2); | |
1061 |
9/18✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 9 times.
✓ Branch 27 taken 3 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
12 | c.add_op<unsigned>(OpType::U3, {0.5, -0.5, 0.5 + p}, {0}); | |
1062 |
9/18✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 9 times.
✓ Branch 27 taken 3 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
12 | c.add_op<unsigned>(OpType::U3, {0.5, -0.5, 0.5 - p}, {1}); | |
1063 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
1064 |
9/18✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 9 times.
✓ Branch 27 taken 3 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
12 | c.add_op<unsigned>(OpType::U3, {-0.5 * t, -0.5, 0.5}, {0}); | |
1065 |
4/8✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
|
3 | c.add_op<unsigned>(OpType::Rz, -0.5 * t, {1}); | |
1066 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.add_op<unsigned>(OpType::CX, {0, 1}); | |
1067 |
9/18✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 9 times.
✓ Branch 27 taken 3 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
12 | c.add_op<unsigned>(OpType::U3, {-0.5, -0.5 - p, 0.5}, {0}); | |
1068 |
9/18✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 9 times.
✓ Branch 27 taken 3 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
12 | c.add_op<unsigned>(OpType::U3, {-0.5, -0.5 + p, 0.5}, {1}); | |
1069 | 3 | return c; | ||
1070 | } | |||
1071 | ||||
1072 | 2 | Circuit NPhasedX_using_PhasedX( | ||
1073 | unsigned int number_of_qubits, const Expr &alpha, const Expr &beta) { | |||
1074 |
1/2✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | Circuit c(number_of_qubits); | |
1075 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 2 times.
|
2/2✓ Decision 'true' taken 6 times.
✓ Decision 'false' taken 2 times.
|
8 | for (unsigned int i = 0; i < number_of_qubits; ++i) { |
1076 |
7/14✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 6 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 6 times.
✗ Branch 10 not taken.
✓ Branch 13 taken 6 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 6 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 12 times.
✓ Branch 21 taken 6 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
18 | c.add_op<unsigned>(OpType::PhasedX, {alpha, beta}, {i}); | |
1077 | } | |||
1078 | 2 | return c; | ||
1079 | } | |||
1080 | ||||
1081 | 3481 | Circuit TK2_using_normalised_TK2( | ||
1082 | const Expr &alpha, const Expr &beta, const Expr &gamma) { | |||
1083 |
4/8✓ Branch 1 taken 3481 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3481 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3481 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 3481 times.
✗ Branch 11 not taken.
|
6962 | auto [pre, normalised_exprs, post] = normalise_TK2_angles(alpha, beta, gamma); | |
1084 |
1/2✓ Branch 1 taken 3481 times.
✗ Branch 2 not taken.
|
3481 | auto [alpha_norm, beta_norm, gamma_norm] = normalised_exprs; | |
1085 | ||||
1086 |
1/2✓ Branch 2 taken 3481 times.
✗ Branch 3 not taken.
|
3481 | Circuit res(2); | |
1087 |
1/2✓ Branch 1 taken 3481 times.
✗ Branch 2 not taken.
|
3481 | res.append(pre); | |
1088 |
8/16✓ Branch 3 taken 3481 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3481 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3481 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3481 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 3481 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3481 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 10443 times.
✓ Branch 24 taken 3481 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
13924 | res.add_op<unsigned>( | |
1089 | OpType::TK2, {alpha_norm, beta_norm, gamma_norm}, {0, 1}); | |||
1090 |
1/2✓ Branch 1 taken 3481 times.
✗ Branch 2 not taken.
|
3481 | res.append(post); | |
1091 | ||||
1092 | 6962 | return res; | ||
1093 | 3481 | } | ||
1094 | ||||
1095 | 257 | static unsigned int_half(const Expr &angle) { | ||
1096 | // Assume angle is an even integer | |||
1097 |
1/2✓ Branch 2 taken 257 times.
✗ Branch 3 not taken.
|
257 | double eval = eval_expr(angle).value(); | |
1098 | 257 | return lround(eval / 2); | ||
1099 | } | |||
1100 | ||||
1101 | 153 | Circuit tk1_to_rzsx(const Expr &alpha, const Expr &beta, const Expr &gamma) { | ||
1102 |
1/2✓ Branch 2 taken 153 times.
✗ Branch 3 not taken.
|
153 | Circuit c(1); | |
1103 |
1/2✓ Branch 1 taken 153 times.
✗ Branch 2 not taken.
|
153 | Expr correction_phase = 0; | |
1104 |
3/4✓ Branch 1 taken 153 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 143 times.
|
2/2✓ Decision 'true' taken 10 times.
✓ Decision 'false' taken 143 times.
|
153 | if (equiv_0(beta)) { |
1105 | // b = 2k, if k is odd, then Rx(b) = -I | |||
1106 |
3/6✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 10 times.
✗ Branch 10 not taken.
|
10 | c.add_op<unsigned>(OpType::Rz, alpha + gamma, {0}); | |
1107 |
2/4✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
10 | correction_phase = int_half(beta); | |
1108 |
5/8✓ Branch 1 taken 143 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 143 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 143 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 60 times.
✓ Branch 12 taken 83 times.
|
2/2✓ Decision 'true' taken 60 times.
✓ Decision 'false' taken 83 times.
|
143 | } else if (equiv_0(beta + 1)) { |
1109 | // Use Rx(2k-1) = i(-1)^{k}SxSx | |||
1110 |
4/8✓ Branch 1 taken 60 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 60 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 60 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 60 times.
✗ Branch 11 not taken.
|
60 | correction_phase = -0.5 + int_half(beta - 1); | |
1111 |
4/6✓ Branch 1 taken 60 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 60 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 43 times.
✓ Branch 8 taken 17 times.
|
2/2✓ Decision 'true' taken 43 times.
✓ Decision 'false' taken 17 times.
|
60 | if (equiv_0(alpha - gamma)) { |
1112 | // a - c = 2m | |||
1113 | // overall operation is (-1)^{m}Rx(2k -1) | |||
1114 |
2/4✓ Branch 3 taken 43 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 43 times.
✗ Branch 7 not taken.
|
43 | c.add_op<unsigned>(OpType::SX, {0}); | |
1115 |
2/4✓ Branch 3 taken 43 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 43 times.
✗ Branch 7 not taken.
|
43 | c.add_op<unsigned>(OpType::SX, {0}); | |
1116 |
4/8✓ Branch 1 taken 43 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 43 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 43 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 43 times.
✗ Branch 11 not taken.
|
43 | correction_phase += int_half(alpha - gamma); | |
1117 | } else { | |||
1118 |
2/4✓ Branch 3 taken 17 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 17 times.
✗ Branch 7 not taken.
|
17 | c.add_op<unsigned>(OpType::Rz, gamma, {0}); | |
1119 |
2/4✓ Branch 3 taken 17 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 17 times.
✗ Branch 7 not taken.
|
17 | c.add_op<unsigned>(OpType::SX, {0}); | |
1120 |
2/4✓ Branch 3 taken 17 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 17 times.
✗ Branch 7 not taken.
|
17 | c.add_op<unsigned>(OpType::SX, {0}); | |
1121 |
2/4✓ Branch 3 taken 17 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 17 times.
✗ Branch 7 not taken.
|
17 | c.add_op<unsigned>(OpType::Rz, alpha, {0}); | |
1122 | } | |||
1123 |
14/26✓ Branch 1 taken 83 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 83 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 83 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 38 times.
✓ Branch 10 taken 45 times.
✓ Branch 12 taken 38 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 36 times.
✓ Branch 15 taken 2 times.
✓ Branch 17 taken 36 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 36 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 83 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 83 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 36 times.
✓ Branch 28 taken 47 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
|
2/2✓ Decision 'true' taken 36 times.
✓ Decision 'false' taken 47 times.
|
83 | } else if (equiv_0(beta - 0.5) && equiv_0(alpha) && equiv_0(gamma)) { |
1124 | // a = 2k, b = 2m+0.5, c = 2n | |||
1125 | // Rz(2k)Rx(2m + 0.5)Rz(2n) = (-1)^{k+m+n}e^{-i \pi /4} SX | |||
1126 |
2/4✓ Branch 3 taken 36 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 36 times.
✗ Branch 7 not taken.
|
36 | c.add_op<unsigned>(OpType::SX, {0}); | |
1127 | correction_phase = | |||
1128 |
6/12✓ Branch 1 taken 36 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 36 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 36 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 36 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 36 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 36 times.
✗ Branch 17 not taken.
|
36 | int_half(beta - 0.5) + int_half(alpha) + int_half(gamma) - 0.25; | |
1129 |
5/8✓ Branch 1 taken 47 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 47 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 47 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 45 times.
|
2/2✓ Decision 'true' taken 2 times.
✓ Decision 'false' taken 45 times.
|
47 | } else if (equiv_0(beta - 0.5)) { |
1130 | // SX.Rz(2m-0.5).SX = (-1)^{m}e^{i \pi /4} Rz(-0.5).SX.Rz(-0.5) | |||
1131 |
2/4✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
|
2 | c.add_op<unsigned>(OpType::Rz, gamma, {0}); | |
1132 |
2/4✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
|
2 | c.add_op<unsigned>(OpType::SX, {0}); | |
1133 |
2/4✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
|
2 | c.add_op<unsigned>(OpType::Rz, alpha, {0}); | |
1134 |
4/8✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
|
2 | correction_phase = int_half(beta - 0.5) - 0.25; | |
1135 |
5/8✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 45 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 22 times.
✓ Branch 12 taken 23 times.
|
2/2✓ Decision 'true' taken 22 times.
✓ Decision 'false' taken 23 times.
|
45 | } else if (equiv_0(beta + 0.5)) { |
1136 | // SX.Rz(2m+0.5).SX = (-1)^{m}e^{i \pi /4} Rz(0.5).SX.Rz(0.5) | |||
1137 |
4/8✓ Branch 3 taken 22 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 22 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 22 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 22 times.
✗ Branch 13 not taken.
|
22 | c.add_op<unsigned>(OpType::Rz, gamma + 1, {0}); | |
1138 |
2/4✓ Branch 3 taken 22 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 22 times.
✗ Branch 7 not taken.
|
22 | c.add_op<unsigned>(OpType::SX, {0}); | |
1139 |
4/8✓ Branch 3 taken 22 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 22 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 22 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 22 times.
✗ Branch 13 not taken.
|
22 | c.add_op<unsigned>(OpType::Rz, alpha + 1, {0}); | |
1140 |
4/8✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 22 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 22 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 22 times.
✗ Branch 11 not taken.
|
22 | correction_phase = int_half(beta - 1.5) - 0.25; | |
1141 |
18/34✓ Branch 1 taken 23 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 23 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 23 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 13 times.
✓ Branch 10 taken 10 times.
✓ Branch 12 taken 13 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 13 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 13 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 6 times.
✓ Branch 21 taken 7 times.
✓ Branch 22 taken 13 times.
✓ Branch 23 taken 10 times.
✓ Branch 25 taken 13 times.
✓ Branch 26 taken 10 times.
✓ Branch 28 taken 23 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 23 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 6 times.
✓ Branch 35 taken 17 times.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
|
2/2✓ Decision 'true' taken 6 times.
✓ Decision 'false' taken 17 times.
|
23 | } else if (equiv_0(alpha - 0.5) && equiv_0(gamma - 0.5)) { |
1142 | // Rz(2k + 0.5)Rx(b)Rz(2m + 0.5) = -i(-1)^{k+m}SX.Rz(1-b).SX | |||
1143 |
2/4✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 6 times.
✗ Branch 7 not taken.
|
6 | c.add_op<unsigned>(OpType::SX, {0}); | |
1144 |
4/8✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 6 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 6 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 6 times.
✗ Branch 13 not taken.
|
6 | c.add_op<unsigned>(OpType::Rz, 1 - beta, {0}); | |
1145 |
2/4✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 6 times.
✗ Branch 7 not taken.
|
6 | c.add_op<unsigned>(OpType::SX, {0}); | |
1146 |
7/14✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 6 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 6 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 6 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 6 times.
✗ Branch 20 not taken.
|
6 | correction_phase = int_half(alpha - 0.5) + int_half(gamma - 0.5) - 0.5; | |
1147 | } else { | |||
1148 |
4/8✓ Branch 3 taken 17 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 17 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 17 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 17 times.
✗ Branch 13 not taken.
|
17 | c.add_op<unsigned>(OpType::Rz, gamma + 0.5, {0}); | |
1149 |
2/4✓ Branch 3 taken 17 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 17 times.
✗ Branch 7 not taken.
|
17 | c.add_op<unsigned>(OpType::SX, {0}); | |
1150 |
4/8✓ Branch 3 taken 17 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 17 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 17 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 17 times.
✗ Branch 13 not taken.
|
17 | c.add_op<unsigned>(OpType::Rz, beta - 1, {0}); | |
1151 |
2/4✓ Branch 3 taken 17 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 17 times.
✗ Branch 7 not taken.
|
17 | c.add_op<unsigned>(OpType::SX, {0}); | |
1152 |
4/8✓ Branch 3 taken 17 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 17 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 17 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 17 times.
✗ Branch 13 not taken.
|
17 | c.add_op<unsigned>(OpType::Rz, alpha + 0.5, {0}); | |
1153 |
1/2✓ Branch 1 taken 17 times.
✗ Branch 2 not taken.
|
17 | correction_phase = -0.5; | |
1154 | } | |||
1155 |
2/4✓ Branch 1 taken 153 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 153 times.
✗ Branch 5 not taken.
|
153 | c.add_phase(correction_phase); | |
1156 |
1/2✓ Branch 1 taken 153 times.
✗ Branch 2 not taken.
|
153 | c.remove_noops(); | |
1157 | 306 | return c; | ||
1158 | 153 | } | ||
1159 | ||||
1160 | 205 | Circuit tk1_to_rzh(const Expr &alpha, const Expr &beta, const Expr &gamma) { | ||
1161 |
1/2✓ Branch 2 taken 205 times.
✗ Branch 3 not taken.
|
205 | Circuit c(1); | |
1162 |
1/2✓ Branch 1 taken 205 times.
✗ Branch 2 not taken.
|
205 | std::optional<unsigned> cliff = equiv_Clifford(beta, 4); | |
1163 |
2/2✓ Branch 1 taken 202 times.
✓ Branch 2 taken 3 times.
|
2/2✓ Decision 'true' taken 202 times.
✓ Decision 'false' taken 3 times.
|
205 | if (cliff) { |
1164 |
4/5✓ Branch 1 taken 15 times.
✓ Branch 2 taken 27 times.
✓ Branch 3 taken 133 times.
✓ Branch 4 taken 27 times.
✗ Branch 5 not taken.
|
202 | switch (*cliff % 4) { | |
1165 |
1/1✓ Decision 'true' taken 15 times.
|
15 | case 0: { | |
1166 |
3/6✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 15 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 15 times.
✗ Branch 10 not taken.
|
15 | c.add_op<unsigned>(OpType::Rz, gamma + alpha, {0}); | |
1167 | 15 | break; | ||
1168 | } | |||
1169 |
1/1✓ Decision 'true' taken 27 times.
|
27 | case 1: { | |
1170 |
4/8✓ Branch 3 taken 27 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 27 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 27 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 27 times.
✗ Branch 13 not taken.
|
27 | c.add_op<unsigned>(OpType::Rz, gamma - 0.5, {0}); | |
1171 |
2/4✓ Branch 3 taken 27 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 27 times.
✗ Branch 7 not taken.
|
27 | c.add_op<unsigned>(OpType::H, {0}); | |
1172 |
4/8✓ Branch 3 taken 27 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 27 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 27 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 27 times.
✗ Branch 13 not taken.
|
27 | c.add_op<unsigned>(OpType::Rz, alpha - 0.5, {0}); | |
1173 |
2/4✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 27 times.
✗ Branch 5 not taken.
|
27 | c.add_phase(-0.5); | |
1174 | 27 | break; | ||
1175 | } | |||
1176 |
1/1✓ Decision 'true' taken 133 times.
|
133 | case 2: { | |
1177 |
3/6✓ Branch 3 taken 133 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 133 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 133 times.
✗ Branch 10 not taken.
|
133 | c.add_op<unsigned>(OpType::Rz, gamma - alpha, {0}); | |
1178 |
2/4✓ Branch 3 taken 133 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 133 times.
✗ Branch 7 not taken.
|
133 | c.add_op<unsigned>(OpType::H, {0}); | |
1179 |
3/6✓ Branch 3 taken 133 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 133 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 133 times.
✗ Branch 10 not taken.
|
133 | c.add_op<unsigned>(OpType::Rz, 1., {0}); | |
1180 |
2/4✓ Branch 3 taken 133 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 133 times.
✗ Branch 7 not taken.
|
133 | c.add_op<unsigned>(OpType::H, {0}); | |
1181 | 133 | break; | ||
1182 | } | |||
1183 |
1/1✓ Decision 'true' taken 27 times.
|
27 | case 3: { | |
1184 |
4/8✓ Branch 3 taken 27 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 27 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 27 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 27 times.
✗ Branch 13 not taken.
|
27 | c.add_op<unsigned>(OpType::Rz, gamma + 0.5, {0}); | |
1185 |
2/4✓ Branch 3 taken 27 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 27 times.
✗ Branch 7 not taken.
|
27 | c.add_op<unsigned>(OpType::H, {0}); | |
1186 |
4/8✓ Branch 3 taken 27 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 27 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 27 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 27 times.
✗ Branch 13 not taken.
|
27 | c.add_op<unsigned>(OpType::Rz, alpha + 0.5, {0}); | |
1187 |
2/4✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 27 times.
✗ Branch 5 not taken.
|
27 | c.add_phase(-0.5); | |
1188 | 27 | break; | ||
1189 | } | |||
1190 | } | |||
1191 |
4/6✓ Branch 3 taken 4 times.
✓ Branch 4 taken 198 times.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
|
2/2✓ Decision 'true' taken 3 times.
✓ Decision 'false' taken 199 times.
|
202 | if (cliff >= 4u) c.add_phase(1.); |
1192 | } else { | |||
1193 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.add_op<unsigned>(OpType::Rz, gamma, {0}); | |
1194 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.add_op<unsigned>(OpType::H, {0}); | |
1195 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.add_op<unsigned>(OpType::Rz, beta, {0}); | |
1196 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.add_op<unsigned>(OpType::H, {0}); | |
1197 |
2/4✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
|
3 | c.add_op<unsigned>(OpType::Rz, alpha, {0}); | |
1198 | } | |||
1199 |
1/2✓ Branch 1 taken 205 times.
✗ Branch 2 not taken.
|
205 | c.remove_noops(); | |
1200 | 410 | return c; | ||
1201 | } | |||
1202 | ||||
1203 | 56 | Circuit tk1_to_tk1(const Expr &alpha, const Expr &beta, const Expr &gamma) { | ||
1204 |
1/2✓ Branch 2 taken 56 times.
✗ Branch 3 not taken.
|
56 | Circuit c(1); | |
1205 |
8/16✓ Branch 3 taken 56 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 56 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 56 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 56 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 56 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 56 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 168 times.
✓ Branch 24 taken 56 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
224 | c.add_op<unsigned>(OpType::TK1, {alpha, beta, gamma}, {0}); | |
1206 | 56 | return c; | ||
1207 | } | |||
1208 | ||||
1209 | 37055 | Circuit tk1_to_rzrx(const Expr &alpha, const Expr &beta, const Expr &gamma) { | ||
1210 |
1/2✓ Branch 2 taken 37055 times.
✗ Branch 3 not taken.
|
37055 | Circuit c(1); | |
1211 |
2/4✓ Branch 3 taken 37055 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 37055 times.
✗ Branch 7 not taken.
|
37055 | c.add_op<unsigned>(OpType::Rz, gamma, {0}); | |
1212 |
2/4✓ Branch 3 taken 37055 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 37055 times.
✗ Branch 7 not taken.
|
37055 | c.add_op<unsigned>(OpType::Rx, beta, {0}); | |
1213 |
2/4✓ Branch 3 taken 37055 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 37055 times.
✗ Branch 7 not taken.
|
37055 | c.add_op<unsigned>(OpType::Rz, alpha, {0}); | |
1214 | 37055 | return c; | ||
1215 | } | |||
1216 | ||||
1217 | 497 | Circuit tk1_to_PhasedXRz( | ||
1218 | const Expr &alpha, const Expr &beta, const Expr &gamma) { | |||
1219 |
1/2✓ Branch 2 taken 497 times.
✗ Branch 3 not taken.
|
497 | Circuit c(1); | |
1220 |
4/6✓ Branch 1 taken 497 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 497 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13 times.
✓ Branch 8 taken 484 times.
|
2/2✓ Decision 'true' taken 39 times.
✓ Decision 'false' taken 458 times.
|
497 | if (equiv_expr(beta, 1)) { |
1221 | // Angles β ∈ {π, 3π} | |||
1222 |
9/18✓ Branch 3 taken 13 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 13 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 13 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 13 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 13 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 13 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 13 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 26 times.
✓ Branch 27 taken 13 times.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
|
39 | c.add_op<unsigned>(OpType::PhasedX, {beta, (alpha - gamma) / 2.}, {0}); | |
1223 |
4/6✓ Branch 1 taken 484 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 484 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 117 times.
✓ Branch 8 taken 367 times.
|
2/2✓ Decision 'true' taken 117 times.
✓ Decision 'false' taken 367 times.
|
484 | } else if (equiv_expr(beta, 0)) { |
1224 | // Angle β ∈ {0, 2π} | |||
1225 |
4/8✓ Branch 3 taken 117 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 117 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 117 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 117 times.
✗ Branch 13 not taken.
|
117 | c.add_op<unsigned>(OpType::Rz, alpha + beta + gamma, {0}); | |
1226 | } else { | |||
1227 |
3/6✓ Branch 3 taken 367 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 367 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 367 times.
✗ Branch 10 not taken.
|
367 | c.add_op<unsigned>(OpType::Rz, alpha + gamma, {0}); | |
1228 |
7/14✓ Branch 3 taken 367 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 367 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 367 times.
✗ Branch 10 not taken.
✓ Branch 13 taken 367 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 367 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 734 times.
✓ Branch 21 taken 367 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
1101 | c.add_op<unsigned>(OpType::PhasedX, {beta, alpha}, {0}); | |
1229 | } | |||
1230 | 497 | return c; | ||
1231 | } | |||
1232 | ||||
1233 | } // namespace CircPool | |||
1234 | ||||
1235 | } // namespace tket | |||
1236 |