@@ -3,7 +3,6 @@ function RX_on_q3()
3
3
println (" >>>>> RX Gate on third qubit using U3Gate <<<<<" )
4
4
5
5
return Dict {String, Any} (
6
-
7
6
" num_qubits" => 3 ,
8
7
" maximum_depth" => 3 ,
9
8
" elementary_gates" => [" U3_3" , " Identity" ],
@@ -42,7 +41,6 @@ function toffoli()
42
41
println (" >>>>> Toffoli gate <<<<<" )
43
42
44
43
return Dict {String, Any} (
45
-
46
44
" num_qubits" => 3 ,
47
45
" maximum_depth" => 15 ,
48
46
" elementary_gates" => [" T_1" , " T_2" , " T_3" , " H_3" , " CNot_1_2" , " CNot_1_3" , " CNot_2_3" , " Tdagger_1" , " Tdagger_2" , " Tdagger_3" , " Identity" ],
@@ -61,7 +59,6 @@ function toffoli_using_kronecker()
61
59
println (" >>>>> Toffoli gate using Kronecker <<<<<" )
62
60
63
61
return Dict {String, Any} (
64
-
65
62
" num_qubits" => 3 ,
66
63
" maximum_depth" => 12 ,
67
64
" elementary_gates" => [" T_3" , " H_3" , " CNot_1_2" , " CNot_1_3" , " CNot_2_3" , " Tdagger_3" , " I_1xT_2xT_3" , " CNot_1_2xH_3" , " T_1xTdagger_2xI_3" , " Identity" ],
@@ -79,7 +76,6 @@ function toffoli_using_2qubit_gates()
79
76
println (" >>>>> Toffoli gate with controlled gates <<<<<" )
80
77
81
78
return Dict {String, Any} (
82
-
83
79
" num_qubits" => 3 ,
84
80
" maximum_depth" => 5 ,
85
81
" elementary_gates" => [" CV_1_3" , " CV_2_3" , " CV_1_2" , " CVdagger_1_3" , " CVdagger_2_3" , " CVdagger_1_2" , " CNot_2_1" , " CNot_1_2" , " Identity" ],
92
88
function CNot_1_3 ()
93
89
94
90
return Dict {String, Any} (
95
-
96
91
" num_qubits" => 3 ,
97
92
" maximum_depth" => 8 ,
98
93
# "elementary_gates" => ["CNot_1_2", "CNot_2_3", "Identity"],
99
94
" elementary_gates" => [" H_1" , " H_3" , " H_2" , " CNot_2_1" , " CNot_3_2" , " Identity" ],
100
- " target_gate" => QCOpt. get_full_sized_gate (" CNot_1_3" , 3 ),
95
+ " target_gate" => QCOpt. get_unitary (" CNot_1_3" , 3 ),
101
96
" objective" => " minimize_depth" ,
102
97
)
103
98
end
@@ -132,17 +127,16 @@ function toffoli_left()
132
127
# Reference: https://arxiv.org/pdf/0803.2316.pdf
133
128
134
129
function target_gate ()
135
- H_3 = QCOpt. get_full_sized_gate (" H_3" , 3 )
136
- Tdagger_3 = QCOpt. get_full_sized_gate (" Tdagger_3" , 3 )
137
- T_3 = QCOpt. get_full_sized_gate (" T_3" , 3 )
138
- cnot_23 = QCOpt. get_full_sized_gate (" CNot_2_3" , 3 )
139
- CNot_1_3 = QCOpt. get_full_sized_gate (" CNot_1_3" , 3 )
130
+ H_3 = QCOpt. get_unitary (" H_3" , 3 )
131
+ Tdagger_3 = QCOpt. get_unitary (" Tdagger_3" , 3 )
132
+ T_3 = QCOpt. get_unitary (" T_3" , 3 )
133
+ cnot_23 = QCOpt. get_unitary (" CNot_2_3" , 3 )
134
+ CNot_1_3 = QCOpt. get_unitary (" CNot_1_3" , 3 )
140
135
141
136
return H_3 * cnot_23 * Tdagger_3 * CNot_1_3 * T_3 * cnot_23 * Tdagger_3
142
137
end
143
138
144
139
return Dict {String, Any} (
145
-
146
140
" num_qubits" => 3 ,
147
141
" maximum_depth" => 7 ,
148
142
" elementary_gates" => [" H_3" , " T_1" , " T_2" , " T_3" , " Tdagger_1" , " Tdagger_2" , " Tdagger_3" , " CNot_1_2" , " CNot_2_3" , " CNot_1_3" , " Identity" ],
@@ -157,19 +151,18 @@ function toffoli_right()
157
151
# Reference: https://arxiv.org/pdf/0803.2316.pdf
158
152
159
153
function target_gate ()
160
- H_3 = QCOpt. get_full_sized_gate (" H_3" , 3 )
161
- Tdagger_2 = QCOpt. get_full_sized_gate (" Tdagger_2" , 3 )
162
- T_1 = QCOpt. get_full_sized_gate (" T_1" , 3 )
163
- T_2 = QCOpt. get_full_sized_gate (" T_2" , 3 )
164
- T_3 = QCOpt. get_full_sized_gate (" T_3" , 3 )
165
- CNot_1_2 = QCOpt. get_full_sized_gate (" CNot_1_2" , 3 )
166
- CNot_1_3 = QCOpt. get_full_sized_gate (" CNot_1_3" , 3 )
154
+ H_3 = QCOpt. get_unitary (" H_3" , 3 )
155
+ Tdagger_2 = QCOpt. get_unitary (" Tdagger_2" , 3 )
156
+ T_1 = QCOpt. get_unitary (" T_1" , 3 )
157
+ T_2 = QCOpt. get_unitary (" T_2" , 3 )
158
+ T_3 = QCOpt. get_unitary (" T_3" , 3 )
159
+ CNot_1_2 = QCOpt. get_unitary (" CNot_1_2" , 3 )
160
+ CNot_1_3 = QCOpt. get_unitary (" CNot_1_3" , 3 )
167
161
168
162
return CNot_1_3 * T_2 * T_3 * CNot_1_2 * H_3 * T_1 * Tdagger_2 * CNot_1_2
169
163
end
170
164
171
165
return Dict {String, Any} (
172
-
173
166
" num_qubits" => 3 ,
174
167
" maximum_depth" => 8 ,
175
168
" elementary_gates" => [" H_3" , " T_1" , " T_2" , " T_3" , " Tdagger_1" , " Tdagger_2" , " Tdagger_3" , " CNot_1_2" , " CNot_2_3" , " CNot_1_3" , " Identity" ],
@@ -182,18 +175,17 @@ function miller()
182
175
# Reference: https://doi.org/10.1109/TCAD.2005.858352
183
176
184
177
function target_gate ()
185
- CV_1_3 = QCOpt. get_full_sized_gate (" CV_1_3" , 3 )
186
- CV_2_3 = QCOpt. get_full_sized_gate (" CV_2_3" , 3 )
187
- CVdagger_2_3 = QCOpt. get_full_sized_gate (" CVdagger_2_3" , 3 )
188
- CNot_1_2 = QCOpt. get_full_sized_gate (" CNot_1_2" , 3 )
189
- CNot_3_1 = QCOpt. get_full_sized_gate (" CNot_3_1" , 3 )
190
- CNot_3_2 = QCOpt. get_full_sized_gate (" CNot_3_2" , 3 )
178
+ CV_1_3 = QCOpt. get_unitary (" CV_1_3" , 3 )
179
+ CV_2_3 = QCOpt. get_unitary (" CV_2_3" , 3 )
180
+ CVdagger_2_3 = QCOpt. get_unitary (" CVdagger_2_3" , 3 )
181
+ CNot_1_2 = QCOpt. get_unitary (" CNot_1_2" , 3 )
182
+ CNot_3_1 = QCOpt. get_unitary (" CNot_3_1" , 3 )
183
+ CNot_3_2 = QCOpt. get_unitary (" CNot_3_2" , 3 )
191
184
192
185
return CNot_3_1 * CNot_3_2 * CV_2_3 * CNot_1_2 * CVdagger_2_3 * CV_1_3 * CNot_3_1 * CNot_1_2
193
186
end
194
187
195
188
return Dict {String, Any} (
196
-
197
189
" num_qubits" => 3 ,
198
190
" maximum_depth" => 8 ,
199
191
" elementary_gates" => [" CV_1_3" , " CV_2_3" , " CVdagger_2_3" , " CNot_1_2" , " CNot_3_1" , " CNot_3_2" , " Identity" ],
@@ -206,7 +198,6 @@ function relative_toffoli()
206
198
# Reference: https://arxiv.org/pdf/1508.03273.pdf
207
199
208
200
return Dict {String, Any} (
209
-
210
201
" num_qubits" => 3 ,
211
202
" maximum_depth" => 9 ,
212
203
" elementary_gates" => [" H_3" , " T_3" , " Tdagger_3" , " CNot_1_2" , " CNot_2_3" , " CNot_1_3" , " Identity" ],
@@ -221,7 +212,6 @@ function margolus()
221
212
# Reference: https://arxiv.org/pdf/quant-ph/0312225.pdf
222
213
223
214
return Dict {String, Any} (
224
-
225
215
" num_qubits" => 3 ,
226
216
" maximum_depth" => 7 ,
227
217
" elementary_gates" => [" RY_3" , " CNot_1_2" , " CNot_2_3" , " CNot_1_3" , " Identity" ],
@@ -238,12 +228,28 @@ function CiSwap()
238
228
# Reference: https://doi.org/10.1103/PhysRevResearch.2.033097
239
229
240
230
return Dict {String, Any} (
241
-
242
231
" num_qubits" => 3 ,
243
232
" maximum_depth" => 12 ,
244
233
" elementary_gates" => [" H_3" , " T_3" , " Tdagger_3" , " CNot_3_2" , " CNot_2_3" , " CNot_1_3" , " Identity" ],
245
234
" target_gate" => QCOpt. CiSwapGate (),
246
235
" objective" => " minimize_depth" ,
247
236
" decomposition_type" => " exact_optimal" ,
248
237
)
238
+ end
239
+
240
+ function QFT3 ()
241
+
242
+ # QFT3 circuit using Controlled-Phase gates
243
+ return Dict {String, Any} (
244
+ " num_qubits" => 3 ,
245
+ " maximum_depth" => 7 ,
246
+ # "elementary_gates" => ["H_1", "H_2", "H_3", "CS_2_1", "CS_3_2", "CT_3_1", "Swap_1_3", "Identity"],
247
+ " elementary_gates" => [" H_1" , " H_2" , " H_3" , " CU3_2_1" , " CU3_3_2" , " CU3_3_1" , " Swap_1_3" , " Identity" ],
248
+ " CU3_θ_discretization" => [0 ],
249
+ " CU3_ϕ_discretization" => [0 ],
250
+ " CU3_λ_discretization" => [π/ 2 , π/ 4 ],
251
+ " target_gate" => QCOpt. QFT3Gate (),
252
+ " objective" => " minimize_depth" ,
253
+ " decomposition_type" => " exact_optimal" ,
254
+ )
249
255
end
0 commit comments