GCC Code Coverage Report


Directory: ./
File: Circuit/CircPool.cpp
Date: 2022-10-15 05:10:18
Exec Total Coverage
Lines: 944 970 97.3%
Functions: 126 130 96.9%
Branches: 2197 4421 49.7%
Decisions: 48 48 100.0%

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