qiskit 1.0.0b1__cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1095) hide show
  1. qiskit/VERSION.txt +1 -0
  2. qiskit/__init__.py +195 -0
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/_qasm2.abi3.so +0 -0
  5. qiskit/assembler/__init__.py +47 -0
  6. qiskit/assembler/assemble_circuits.py +408 -0
  7. qiskit/assembler/assemble_schedules.py +372 -0
  8. qiskit/assembler/disassemble.py +318 -0
  9. qiskit/assembler/run_config.py +77 -0
  10. qiskit/circuit/__init__.py +425 -0
  11. qiskit/circuit/_classical_resource_map.py +144 -0
  12. qiskit/circuit/_utils.py +170 -0
  13. qiskit/circuit/add_control.py +274 -0
  14. qiskit/circuit/annotated_operation.py +188 -0
  15. qiskit/circuit/barrier.py +51 -0
  16. qiskit/circuit/bit.py +142 -0
  17. qiskit/circuit/classical/__init__.py +41 -0
  18. qiskit/circuit/classical/expr/__init__.py +218 -0
  19. qiskit/circuit/classical/expr/constructors.py +473 -0
  20. qiskit/circuit/classical/expr/expr.py +356 -0
  21. qiskit/circuit/classical/expr/visitors.py +280 -0
  22. qiskit/circuit/classical/types/__init__.py +108 -0
  23. qiskit/circuit/classical/types/ordering.py +222 -0
  24. qiskit/circuit/classical/types/types.py +117 -0
  25. qiskit/circuit/classicalfunction/__init__.py +131 -0
  26. qiskit/circuit/classicalfunction/boolean_expression.py +129 -0
  27. qiskit/circuit/classicalfunction/classical_element.py +54 -0
  28. qiskit/circuit/classicalfunction/classical_function_visitor.py +155 -0
  29. qiskit/circuit/classicalfunction/classicalfunction.py +173 -0
  30. qiskit/circuit/classicalfunction/exceptions.py +35 -0
  31. qiskit/circuit/classicalfunction/types.py +18 -0
  32. qiskit/circuit/classicalfunction/utils.py +91 -0
  33. qiskit/circuit/classicalregister.py +71 -0
  34. qiskit/circuit/commutation_checker.py +176 -0
  35. qiskit/circuit/controlflow/__init__.py +27 -0
  36. qiskit/circuit/controlflow/_builder_utils.py +199 -0
  37. qiskit/circuit/controlflow/break_loop.py +70 -0
  38. qiskit/circuit/controlflow/builder.py +651 -0
  39. qiskit/circuit/controlflow/continue_loop.py +72 -0
  40. qiskit/circuit/controlflow/control_flow.py +52 -0
  41. qiskit/circuit/controlflow/for_loop.py +232 -0
  42. qiskit/circuit/controlflow/if_else.py +517 -0
  43. qiskit/circuit/controlflow/switch_case.py +424 -0
  44. qiskit/circuit/controlflow/while_loop.py +177 -0
  45. qiskit/circuit/controlledgate.py +271 -0
  46. qiskit/circuit/delay.py +104 -0
  47. qiskit/circuit/duration.py +88 -0
  48. qiskit/circuit/equivalence.py +291 -0
  49. qiskit/circuit/equivalence_library.py +18 -0
  50. qiskit/circuit/exceptions.py +19 -0
  51. qiskit/circuit/gate.py +245 -0
  52. qiskit/circuit/instruction.py +655 -0
  53. qiskit/circuit/instructionset.py +191 -0
  54. qiskit/circuit/library/__init__.py +581 -0
  55. qiskit/circuit/library/arithmetic/__init__.py +27 -0
  56. qiskit/circuit/library/arithmetic/adders/__init__.py +17 -0
  57. qiskit/circuit/library/arithmetic/adders/adder.py +58 -0
  58. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +159 -0
  59. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +116 -0
  60. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +165 -0
  61. qiskit/circuit/library/arithmetic/exact_reciprocal.py +88 -0
  62. qiskit/circuit/library/arithmetic/functional_pauli_rotations.py +114 -0
  63. qiskit/circuit/library/arithmetic/integer_comparator.py +243 -0
  64. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +196 -0
  65. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +189 -0
  66. qiskit/circuit/library/arithmetic/multipliers/__init__.py +16 -0
  67. qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +138 -0
  68. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +101 -0
  69. qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +101 -0
  70. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +353 -0
  71. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +277 -0
  72. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +317 -0
  73. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +335 -0
  74. qiskit/circuit/library/arithmetic/quadratic_form.py +197 -0
  75. qiskit/circuit/library/arithmetic/weighted_adder.py +337 -0
  76. qiskit/circuit/library/basis_change/__init__.py +15 -0
  77. qiskit/circuit/library/basis_change/qft.py +289 -0
  78. qiskit/circuit/library/blueprintcircuit.py +186 -0
  79. qiskit/circuit/library/boolean_logic/__init__.py +18 -0
  80. qiskit/circuit/library/boolean_logic/inner_product.py +78 -0
  81. qiskit/circuit/library/boolean_logic/quantum_and.py +97 -0
  82. qiskit/circuit/library/boolean_logic/quantum_or.py +98 -0
  83. qiskit/circuit/library/boolean_logic/quantum_xor.py +71 -0
  84. qiskit/circuit/library/data_preparation/__init__.py +47 -0
  85. qiskit/circuit/library/data_preparation/initializer.py +96 -0
  86. qiskit/circuit/library/data_preparation/pauli_feature_map.py +296 -0
  87. qiskit/circuit/library/data_preparation/state_preparation.py +526 -0
  88. qiskit/circuit/library/data_preparation/z_feature_map.py +104 -0
  89. qiskit/circuit/library/data_preparation/zz_feature_map.py +114 -0
  90. qiskit/circuit/library/evolved_operator_ansatz.py +245 -0
  91. qiskit/circuit/library/fourier_checking.py +97 -0
  92. qiskit/circuit/library/generalized_gates/__init__.py +30 -0
  93. qiskit/circuit/library/generalized_gates/diagonal.py +164 -0
  94. qiskit/circuit/library/generalized_gates/gms.py +121 -0
  95. qiskit/circuit/library/generalized_gates/gr.py +215 -0
  96. qiskit/circuit/library/generalized_gates/isometry.py +573 -0
  97. qiskit/circuit/library/generalized_gates/linear_function.py +302 -0
  98. qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +138 -0
  99. qiskit/circuit/library/generalized_gates/mcmt.py +254 -0
  100. qiskit/circuit/library/generalized_gates/pauli.py +85 -0
  101. qiskit/circuit/library/generalized_gates/permutation.py +190 -0
  102. qiskit/circuit/library/generalized_gates/rv.py +93 -0
  103. qiskit/circuit/library/generalized_gates/uc.py +304 -0
  104. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +164 -0
  105. qiskit/circuit/library/generalized_gates/ucrx.py +32 -0
  106. qiskit/circuit/library/generalized_gates/ucry.py +32 -0
  107. qiskit/circuit/library/generalized_gates/ucrz.py +32 -0
  108. qiskit/circuit/library/generalized_gates/unitary.py +198 -0
  109. qiskit/circuit/library/graph_state.py +86 -0
  110. qiskit/circuit/library/grover_operator.py +311 -0
  111. qiskit/circuit/library/hamiltonian_gate.py +146 -0
  112. qiskit/circuit/library/hidden_linear_function.py +98 -0
  113. qiskit/circuit/library/iqp.py +96 -0
  114. qiskit/circuit/library/n_local/__init__.py +31 -0
  115. qiskit/circuit/library/n_local/efficient_su2.py +162 -0
  116. qiskit/circuit/library/n_local/excitation_preserving.py +176 -0
  117. qiskit/circuit/library/n_local/n_local.py +1044 -0
  118. qiskit/circuit/library/n_local/pauli_two_design.py +131 -0
  119. qiskit/circuit/library/n_local/qaoa_ansatz.py +288 -0
  120. qiskit/circuit/library/n_local/real_amplitudes.py +189 -0
  121. qiskit/circuit/library/n_local/two_local.py +334 -0
  122. qiskit/circuit/library/overlap.py +111 -0
  123. qiskit/circuit/library/pauli_evolution.py +180 -0
  124. qiskit/circuit/library/phase_estimation.py +99 -0
  125. qiskit/circuit/library/phase_oracle.py +153 -0
  126. qiskit/circuit/library/quantum_volume.py +114 -0
  127. qiskit/circuit/library/standard_gates/__init__.py +116 -0
  128. qiskit/circuit/library/standard_gates/dcx.py +71 -0
  129. qiskit/circuit/library/standard_gates/ecr.py +114 -0
  130. qiskit/circuit/library/standard_gates/equivalence_library.py +1677 -0
  131. qiskit/circuit/library/standard_gates/global_phase.py +63 -0
  132. qiskit/circuit/library/standard_gates/h.py +224 -0
  133. qiskit/circuit/library/standard_gates/i.py +60 -0
  134. qiskit/circuit/library/standard_gates/iswap.py +129 -0
  135. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +390 -0
  136. qiskit/circuit/library/standard_gates/p.py +364 -0
  137. qiskit/circuit/library/standard_gates/r.py +101 -0
  138. qiskit/circuit/library/standard_gates/rx.py +246 -0
  139. qiskit/circuit/library/standard_gates/rxx.py +128 -0
  140. qiskit/circuit/library/standard_gates/ry.py +241 -0
  141. qiskit/circuit/library/standard_gates/ryy.py +128 -0
  142. qiskit/circuit/library/standard_gates/rz.py +261 -0
  143. qiskit/circuit/library/standard_gates/rzx.py +174 -0
  144. qiskit/circuit/library/standard_gates/rzz.py +141 -0
  145. qiskit/circuit/library/standard_gates/s.py +303 -0
  146. qiskit/circuit/library/standard_gates/swap.py +246 -0
  147. qiskit/circuit/library/standard_gates/sx.py +268 -0
  148. qiskit/circuit/library/standard_gates/t.py +150 -0
  149. qiskit/circuit/library/standard_gates/u.py +338 -0
  150. qiskit/circuit/library/standard_gates/u1.py +383 -0
  151. qiskit/circuit/library/standard_gates/u2.py +132 -0
  152. qiskit/circuit/library/standard_gates/u3.py +358 -0
  153. qiskit/circuit/library/standard_gates/x.py +1370 -0
  154. qiskit/circuit/library/standard_gates/xx_minus_yy.py +179 -0
  155. qiskit/circuit/library/standard_gates/xx_plus_yy.py +180 -0
  156. qiskit/circuit/library/standard_gates/y.py +221 -0
  157. qiskit/circuit/library/standard_gates/z.py +294 -0
  158. qiskit/circuit/library/templates/__init__.py +92 -0
  159. qiskit/circuit/library/templates/clifford/__init__.py +33 -0
  160. qiskit/circuit/library/templates/clifford/clifford_2_1.py +33 -0
  161. qiskit/circuit/library/templates/clifford/clifford_2_2.py +34 -0
  162. qiskit/circuit/library/templates/clifford/clifford_2_3.py +32 -0
  163. qiskit/circuit/library/templates/clifford/clifford_2_4.py +33 -0
  164. qiskit/circuit/library/templates/clifford/clifford_3_1.py +34 -0
  165. qiskit/circuit/library/templates/clifford/clifford_4_1.py +37 -0
  166. qiskit/circuit/library/templates/clifford/clifford_4_2.py +36 -0
  167. qiskit/circuit/library/templates/clifford/clifford_4_3.py +37 -0
  168. qiskit/circuit/library/templates/clifford/clifford_4_4.py +36 -0
  169. qiskit/circuit/library/templates/clifford/clifford_5_1.py +39 -0
  170. qiskit/circuit/library/templates/clifford/clifford_6_1.py +39 -0
  171. qiskit/circuit/library/templates/clifford/clifford_6_2.py +39 -0
  172. qiskit/circuit/library/templates/clifford/clifford_6_3.py +39 -0
  173. qiskit/circuit/library/templates/clifford/clifford_6_4.py +37 -0
  174. qiskit/circuit/library/templates/clifford/clifford_6_5.py +39 -0
  175. qiskit/circuit/library/templates/clifford/clifford_8_1.py +41 -0
  176. qiskit/circuit/library/templates/clifford/clifford_8_2.py +41 -0
  177. qiskit/circuit/library/templates/clifford/clifford_8_3.py +40 -0
  178. qiskit/circuit/library/templates/nct/__init__.py +67 -0
  179. qiskit/circuit/library/templates/nct/template_nct_2a_1.py +32 -0
  180. qiskit/circuit/library/templates/nct/template_nct_2a_2.py +33 -0
  181. qiskit/circuit/library/templates/nct/template_nct_2a_3.py +35 -0
  182. qiskit/circuit/library/templates/nct/template_nct_4a_1.py +41 -0
  183. qiskit/circuit/library/templates/nct/template_nct_4a_2.py +39 -0
  184. qiskit/circuit/library/templates/nct/template_nct_4a_3.py +37 -0
  185. qiskit/circuit/library/templates/nct/template_nct_4b_1.py +39 -0
  186. qiskit/circuit/library/templates/nct/template_nct_4b_2.py +37 -0
  187. qiskit/circuit/library/templates/nct/template_nct_5a_1.py +38 -0
  188. qiskit/circuit/library/templates/nct/template_nct_5a_2.py +38 -0
  189. qiskit/circuit/library/templates/nct/template_nct_5a_3.py +38 -0
  190. qiskit/circuit/library/templates/nct/template_nct_5a_4.py +37 -0
  191. qiskit/circuit/library/templates/nct/template_nct_6a_1.py +38 -0
  192. qiskit/circuit/library/templates/nct/template_nct_6a_2.py +39 -0
  193. qiskit/circuit/library/templates/nct/template_nct_6a_3.py +39 -0
  194. qiskit/circuit/library/templates/nct/template_nct_6a_4.py +39 -0
  195. qiskit/circuit/library/templates/nct/template_nct_6b_1.py +39 -0
  196. qiskit/circuit/library/templates/nct/template_nct_6b_2.py +39 -0
  197. qiskit/circuit/library/templates/nct/template_nct_6c_1.py +39 -0
  198. qiskit/circuit/library/templates/nct/template_nct_7a_1.py +41 -0
  199. qiskit/circuit/library/templates/nct/template_nct_7b_1.py +41 -0
  200. qiskit/circuit/library/templates/nct/template_nct_7c_1.py +41 -0
  201. qiskit/circuit/library/templates/nct/template_nct_7d_1.py +41 -0
  202. qiskit/circuit/library/templates/nct/template_nct_7e_1.py +41 -0
  203. qiskit/circuit/library/templates/nct/template_nct_9a_1.py +43 -0
  204. qiskit/circuit/library/templates/nct/template_nct_9c_1.py +41 -0
  205. qiskit/circuit/library/templates/nct/template_nct_9c_10.py +42 -0
  206. qiskit/circuit/library/templates/nct/template_nct_9c_11.py +42 -0
  207. qiskit/circuit/library/templates/nct/template_nct_9c_12.py +42 -0
  208. qiskit/circuit/library/templates/nct/template_nct_9c_2.py +42 -0
  209. qiskit/circuit/library/templates/nct/template_nct_9c_3.py +42 -0
  210. qiskit/circuit/library/templates/nct/template_nct_9c_4.py +42 -0
  211. qiskit/circuit/library/templates/nct/template_nct_9c_5.py +42 -0
  212. qiskit/circuit/library/templates/nct/template_nct_9c_6.py +42 -0
  213. qiskit/circuit/library/templates/nct/template_nct_9c_7.py +42 -0
  214. qiskit/circuit/library/templates/nct/template_nct_9c_8.py +42 -0
  215. qiskit/circuit/library/templates/nct/template_nct_9c_9.py +42 -0
  216. qiskit/circuit/library/templates/nct/template_nct_9d_1.py +41 -0
  217. qiskit/circuit/library/templates/nct/template_nct_9d_10.py +42 -0
  218. qiskit/circuit/library/templates/nct/template_nct_9d_2.py +42 -0
  219. qiskit/circuit/library/templates/nct/template_nct_9d_3.py +42 -0
  220. qiskit/circuit/library/templates/nct/template_nct_9d_4.py +42 -0
  221. qiskit/circuit/library/templates/nct/template_nct_9d_5.py +42 -0
  222. qiskit/circuit/library/templates/nct/template_nct_9d_6.py +42 -0
  223. qiskit/circuit/library/templates/nct/template_nct_9d_7.py +42 -0
  224. qiskit/circuit/library/templates/nct/template_nct_9d_8.py +42 -0
  225. qiskit/circuit/library/templates/nct/template_nct_9d_9.py +42 -0
  226. qiskit/circuit/library/templates/rzx/__init__.py +25 -0
  227. qiskit/circuit/library/templates/rzx/rzx_cy.py +46 -0
  228. qiskit/circuit/library/templates/rzx/rzx_xz.py +53 -0
  229. qiskit/circuit/library/templates/rzx/rzx_yz.py +43 -0
  230. qiskit/circuit/library/templates/rzx/rzx_zz1.py +67 -0
  231. qiskit/circuit/library/templates/rzx/rzx_zz2.py +58 -0
  232. qiskit/circuit/library/templates/rzx/rzx_zz3.py +57 -0
  233. qiskit/circuit/measure.py +41 -0
  234. qiskit/circuit/operation.py +62 -0
  235. qiskit/circuit/parameter.py +160 -0
  236. qiskit/circuit/parameterexpression.py +515 -0
  237. qiskit/circuit/parametertable.py +263 -0
  238. qiskit/circuit/parametervector.py +114 -0
  239. qiskit/circuit/qpy_serialization.py +28 -0
  240. qiskit/circuit/quantumcircuit.py +6074 -0
  241. qiskit/circuit/quantumcircuitdata.py +138 -0
  242. qiskit/circuit/quantumregister.py +90 -0
  243. qiskit/circuit/random/__init__.py +15 -0
  244. qiskit/circuit/random/utils.py +209 -0
  245. qiskit/circuit/register.py +256 -0
  246. qiskit/circuit/reset.py +31 -0
  247. qiskit/circuit/singleton.py +604 -0
  248. qiskit/circuit/store.py +87 -0
  249. qiskit/circuit/tools/__init__.py +16 -0
  250. qiskit/circuit/tools/pi_check.py +190 -0
  251. qiskit/compiler/__init__.py +33 -0
  252. qiskit/compiler/assembler.py +597 -0
  253. qiskit/compiler/scheduler.py +107 -0
  254. qiskit/compiler/sequencer.py +69 -0
  255. qiskit/compiler/transpiler.py +613 -0
  256. qiskit/converters/__init__.py +59 -0
  257. qiskit/converters/circuit_to_dag.py +96 -0
  258. qiskit/converters/circuit_to_dagdependency.py +51 -0
  259. qiskit/converters/circuit_to_gate.py +109 -0
  260. qiskit/converters/circuit_to_instruction.py +131 -0
  261. qiskit/converters/dag_to_circuit.py +77 -0
  262. qiskit/converters/dag_to_dagdependency.py +55 -0
  263. qiskit/converters/dagdependency_to_circuit.py +42 -0
  264. qiskit/converters/dagdependency_to_dag.py +49 -0
  265. qiskit/dagcircuit/__init__.py +44 -0
  266. qiskit/dagcircuit/collect_blocks.py +386 -0
  267. qiskit/dagcircuit/dagcircuit.py +2105 -0
  268. qiskit/dagcircuit/dagdependency.py +626 -0
  269. qiskit/dagcircuit/dagdepnode.py +157 -0
  270. qiskit/dagcircuit/dagnode.py +322 -0
  271. qiskit/dagcircuit/exceptions.py +42 -0
  272. qiskit/exceptions.py +97 -0
  273. qiskit/execute_function.py +354 -0
  274. qiskit/extensions/__init__.py +70 -0
  275. qiskit/extensions/exceptions.py +31 -0
  276. qiskit/extensions/quantum_initializer/__init__.py +26 -0
  277. qiskit/extensions/quantum_initializer/squ.py +163 -0
  278. qiskit/extensions/simulator/__init__.py +15 -0
  279. qiskit/extensions/simulator/snapshot.py +70 -0
  280. qiskit/namespace.py +76 -0
  281. qiskit/passmanager/__init__.py +242 -0
  282. qiskit/passmanager/base_tasks.py +230 -0
  283. qiskit/passmanager/compilation_status.py +74 -0
  284. qiskit/passmanager/exceptions.py +19 -0
  285. qiskit/passmanager/flow_controllers.py +336 -0
  286. qiskit/passmanager/passmanager.py +317 -0
  287. qiskit/primitives/__init__.py +62 -0
  288. qiskit/primitives/backend_estimator.py +473 -0
  289. qiskit/primitives/backend_sampler.py +209 -0
  290. qiskit/primitives/base/__init__.py +20 -0
  291. qiskit/primitives/base/base_estimator.py +256 -0
  292. qiskit/primitives/base/base_primitive.py +74 -0
  293. qiskit/primitives/base/base_result.py +87 -0
  294. qiskit/primitives/base/base_sampler.py +202 -0
  295. qiskit/primitives/base/estimator_result.py +46 -0
  296. qiskit/primitives/base/sampler_result.py +45 -0
  297. qiskit/primitives/base/validation.py +231 -0
  298. qiskit/primitives/estimator.py +158 -0
  299. qiskit/primitives/primitive_job.py +73 -0
  300. qiskit/primitives/sampler.py +155 -0
  301. qiskit/primitives/utils.py +216 -0
  302. qiskit/providers/__init__.py +773 -0
  303. qiskit/providers/backend.py +653 -0
  304. qiskit/providers/backend_compat.py +347 -0
  305. qiskit/providers/basicaer/__init__.py +73 -0
  306. qiskit/providers/basicaer/basicaerjob.py +65 -0
  307. qiskit/providers/basicaer/basicaerprovider.py +127 -0
  308. qiskit/providers/basicaer/basicaertools.py +186 -0
  309. qiskit/providers/basicaer/exceptions.py +30 -0
  310. qiskit/providers/basicaer/qasm_simulator.py +678 -0
  311. qiskit/providers/basicaer/statevector_simulator.py +121 -0
  312. qiskit/providers/basicaer/unitary_simulator.py +395 -0
  313. qiskit/providers/exceptions.py +45 -0
  314. qiskit/providers/fake_provider/__init__.py +267 -0
  315. qiskit/providers/fake_provider/backends/__init__.py +110 -0
  316. qiskit/providers/fake_provider/backends/almaden/__init__.py +16 -0
  317. qiskit/providers/fake_provider/backends/almaden/conf_almaden.json +1 -0
  318. qiskit/providers/fake_provider/backends/almaden/fake_almaden.py +58 -0
  319. qiskit/providers/fake_provider/backends/almaden/props_almaden.json +1 -0
  320. qiskit/providers/fake_provider/backends/armonk/__init__.py +16 -0
  321. qiskit/providers/fake_provider/backends/armonk/conf_armonk.json +1 -0
  322. qiskit/providers/fake_provider/backends/armonk/defs_armonk.json +1 -0
  323. qiskit/providers/fake_provider/backends/armonk/fake_armonk.py +48 -0
  324. qiskit/providers/fake_provider/backends/armonk/props_armonk.json +1 -0
  325. qiskit/providers/fake_provider/backends/athens/__init__.py +16 -0
  326. qiskit/providers/fake_provider/backends/athens/conf_athens.json +1 -0
  327. qiskit/providers/fake_provider/backends/athens/defs_athens.json +1 -0
  328. qiskit/providers/fake_provider/backends/athens/fake_athens.py +38 -0
  329. qiskit/providers/fake_provider/backends/athens/props_athens.json +1 -0
  330. qiskit/providers/fake_provider/backends/auckland/__init__.py +15 -0
  331. qiskit/providers/fake_provider/backends/auckland/conf_auckland.json +1 -0
  332. qiskit/providers/fake_provider/backends/auckland/defs_auckland.json +1 -0
  333. qiskit/providers/fake_provider/backends/auckland/fake_auckland.py +29 -0
  334. qiskit/providers/fake_provider/backends/auckland/props_auckland.json +1 -0
  335. qiskit/providers/fake_provider/backends/belem/__init__.py +16 -0
  336. qiskit/providers/fake_provider/backends/belem/conf_belem.json +1 -0
  337. qiskit/providers/fake_provider/backends/belem/defs_belem.json +1 -0
  338. qiskit/providers/fake_provider/backends/belem/fake_belem.py +38 -0
  339. qiskit/providers/fake_provider/backends/belem/props_belem.json +1 -0
  340. qiskit/providers/fake_provider/backends/boeblingen/__init__.py +16 -0
  341. qiskit/providers/fake_provider/backends/boeblingen/conf_boeblingen.json +1 -0
  342. qiskit/providers/fake_provider/backends/boeblingen/defs_boeblingen.json +1 -0
  343. qiskit/providers/fake_provider/backends/boeblingen/fake_boeblingen.py +60 -0
  344. qiskit/providers/fake_provider/backends/boeblingen/props_boeblingen.json +1 -0
  345. qiskit/providers/fake_provider/backends/bogota/__init__.py +16 -0
  346. qiskit/providers/fake_provider/backends/bogota/conf_bogota.json +1 -0
  347. qiskit/providers/fake_provider/backends/bogota/defs_bogota.json +1 -0
  348. qiskit/providers/fake_provider/backends/bogota/fake_bogota.py +38 -0
  349. qiskit/providers/fake_provider/backends/bogota/props_bogota.json +1 -0
  350. qiskit/providers/fake_provider/backends/brooklyn/__init__.py +16 -0
  351. qiskit/providers/fake_provider/backends/brooklyn/conf_brooklyn.json +1 -0
  352. qiskit/providers/fake_provider/backends/brooklyn/defs_brooklyn.json +1 -0
  353. qiskit/providers/fake_provider/backends/brooklyn/fake_brooklyn.py +38 -0
  354. qiskit/providers/fake_provider/backends/brooklyn/props_brooklyn.json +1 -0
  355. qiskit/providers/fake_provider/backends/burlington/__init__.py +16 -0
  356. qiskit/providers/fake_provider/backends/burlington/conf_burlington.json +1 -0
  357. qiskit/providers/fake_provider/backends/burlington/fake_burlington.py +50 -0
  358. qiskit/providers/fake_provider/backends/burlington/props_burlington.json +1 -0
  359. qiskit/providers/fake_provider/backends/cairo/__init__.py +16 -0
  360. qiskit/providers/fake_provider/backends/cairo/conf_cairo.json +1 -0
  361. qiskit/providers/fake_provider/backends/cairo/defs_cairo.json +1 -0
  362. qiskit/providers/fake_provider/backends/cairo/fake_cairo.py +38 -0
  363. qiskit/providers/fake_provider/backends/cairo/props_cairo.json +1 -0
  364. qiskit/providers/fake_provider/backends/cambridge/__init__.py +17 -0
  365. qiskit/providers/fake_provider/backends/cambridge/conf_cambridge.json +1 -0
  366. qiskit/providers/fake_provider/backends/cambridge/fake_cambridge.py +72 -0
  367. qiskit/providers/fake_provider/backends/cambridge/props_cambridge.json +1 -0
  368. qiskit/providers/fake_provider/backends/cambridge/props_cambridge_alt.json +1 -0
  369. qiskit/providers/fake_provider/backends/casablanca/__init__.py +16 -0
  370. qiskit/providers/fake_provider/backends/casablanca/conf_casablanca.json +1 -0
  371. qiskit/providers/fake_provider/backends/casablanca/defs_casablanca.json +1 -0
  372. qiskit/providers/fake_provider/backends/casablanca/fake_casablanca.py +38 -0
  373. qiskit/providers/fake_provider/backends/casablanca/props_casablanca.json +1 -0
  374. qiskit/providers/fake_provider/backends/essex/__init__.py +16 -0
  375. qiskit/providers/fake_provider/backends/essex/conf_essex.json +1 -0
  376. qiskit/providers/fake_provider/backends/essex/fake_essex.py +54 -0
  377. qiskit/providers/fake_provider/backends/essex/props_essex.json +1 -0
  378. qiskit/providers/fake_provider/backends/geneva/__init__.py +15 -0
  379. qiskit/providers/fake_provider/backends/geneva/conf_geneva.json +1 -0
  380. qiskit/providers/fake_provider/backends/geneva/defs_geneva.json +1 -0
  381. qiskit/providers/fake_provider/backends/geneva/fake_geneva.py +29 -0
  382. qiskit/providers/fake_provider/backends/geneva/props_geneva.json +1 -0
  383. qiskit/providers/fake_provider/backends/guadalupe/__init__.py +16 -0
  384. qiskit/providers/fake_provider/backends/guadalupe/conf_guadalupe.json +1 -0
  385. qiskit/providers/fake_provider/backends/guadalupe/defs_guadalupe.json +1 -0
  386. qiskit/providers/fake_provider/backends/guadalupe/fake_guadalupe.py +39 -0
  387. qiskit/providers/fake_provider/backends/guadalupe/props_guadalupe.json +1 -0
  388. qiskit/providers/fake_provider/backends/hanoi/__init__.py +16 -0
  389. qiskit/providers/fake_provider/backends/hanoi/conf_hanoi.json +1 -0
  390. qiskit/providers/fake_provider/backends/hanoi/defs_hanoi.json +1 -0
  391. qiskit/providers/fake_provider/backends/hanoi/fake_hanoi.py +38 -0
  392. qiskit/providers/fake_provider/backends/hanoi/props_hanoi.json +1 -0
  393. qiskit/providers/fake_provider/backends/jakarta/__init__.py +16 -0
  394. qiskit/providers/fake_provider/backends/jakarta/conf_jakarta.json +1 -0
  395. qiskit/providers/fake_provider/backends/jakarta/defs_jakarta.json +1 -0
  396. qiskit/providers/fake_provider/backends/jakarta/fake_jakarta.py +38 -0
  397. qiskit/providers/fake_provider/backends/jakarta/props_jakarta.json +1 -0
  398. qiskit/providers/fake_provider/backends/johannesburg/__init__.py +16 -0
  399. qiskit/providers/fake_provider/backends/johannesburg/conf_johannesburg.json +1 -0
  400. qiskit/providers/fake_provider/backends/johannesburg/fake_johannesburg.py +58 -0
  401. qiskit/providers/fake_provider/backends/johannesburg/props_johannesburg.json +1 -0
  402. qiskit/providers/fake_provider/backends/kolkata/__init__.py +16 -0
  403. qiskit/providers/fake_provider/backends/kolkata/conf_kolkata.json +1 -0
  404. qiskit/providers/fake_provider/backends/kolkata/defs_kolkata.json +1 -0
  405. qiskit/providers/fake_provider/backends/kolkata/fake_kolkata.py +38 -0
  406. qiskit/providers/fake_provider/backends/kolkata/props_kolkata.json +1 -0
  407. qiskit/providers/fake_provider/backends/lagos/__init__.py +16 -0
  408. qiskit/providers/fake_provider/backends/lagos/conf_lagos.json +1 -0
  409. qiskit/providers/fake_provider/backends/lagos/defs_lagos.json +1 -0
  410. qiskit/providers/fake_provider/backends/lagos/fake_lagos.py +38 -0
  411. qiskit/providers/fake_provider/backends/lagos/props_lagos.json +1 -0
  412. qiskit/providers/fake_provider/backends/lima/__init__.py +16 -0
  413. qiskit/providers/fake_provider/backends/lima/conf_lima.json +1 -0
  414. qiskit/providers/fake_provider/backends/lima/defs_lima.json +1 -0
  415. qiskit/providers/fake_provider/backends/lima/fake_lima.py +38 -0
  416. qiskit/providers/fake_provider/backends/lima/props_lima.json +1 -0
  417. qiskit/providers/fake_provider/backends/london/__init__.py +16 -0
  418. qiskit/providers/fake_provider/backends/london/conf_london.json +1 -0
  419. qiskit/providers/fake_provider/backends/london/fake_london.py +54 -0
  420. qiskit/providers/fake_provider/backends/london/props_london.json +1 -0
  421. qiskit/providers/fake_provider/backends/manhattan/__init__.py +16 -0
  422. qiskit/providers/fake_provider/backends/manhattan/conf_manhattan.json +1 -0
  423. qiskit/providers/fake_provider/backends/manhattan/defs_manhattan.json +1 -0
  424. qiskit/providers/fake_provider/backends/manhattan/fake_manhattan.py +38 -0
  425. qiskit/providers/fake_provider/backends/manhattan/props_manhattan.json +1 -0
  426. qiskit/providers/fake_provider/backends/manila/__init__.py +16 -0
  427. qiskit/providers/fake_provider/backends/manila/conf_manila.json +1 -0
  428. qiskit/providers/fake_provider/backends/manila/defs_manila.json +1 -0
  429. qiskit/providers/fake_provider/backends/manila/fake_manila.py +38 -0
  430. qiskit/providers/fake_provider/backends/manila/props_manila.json +1 -0
  431. qiskit/providers/fake_provider/backends/melbourne/__init__.py +16 -0
  432. qiskit/providers/fake_provider/backends/melbourne/conf_melbourne.json +1 -0
  433. qiskit/providers/fake_provider/backends/melbourne/fake_melbourne.py +91 -0
  434. qiskit/providers/fake_provider/backends/melbourne/props_melbourne.json +1 -0
  435. qiskit/providers/fake_provider/backends/montreal/__init__.py +16 -0
  436. qiskit/providers/fake_provider/backends/montreal/conf_montreal.json +1 -0
  437. qiskit/providers/fake_provider/backends/montreal/defs_montreal.json +1 -0
  438. qiskit/providers/fake_provider/backends/montreal/fake_montreal.py +38 -0
  439. qiskit/providers/fake_provider/backends/montreal/props_montreal.json +1 -0
  440. qiskit/providers/fake_provider/backends/mumbai/__init__.py +16 -0
  441. qiskit/providers/fake_provider/backends/mumbai/conf_mumbai.json +1 -0
  442. qiskit/providers/fake_provider/backends/mumbai/defs_mumbai.json +1 -0
  443. qiskit/providers/fake_provider/backends/mumbai/fake_mumbai.py +38 -0
  444. qiskit/providers/fake_provider/backends/mumbai/props_mumbai.json +1 -0
  445. qiskit/providers/fake_provider/backends/nairobi/__init__.py +16 -0
  446. qiskit/providers/fake_provider/backends/nairobi/conf_nairobi.json +1 -0
  447. qiskit/providers/fake_provider/backends/nairobi/defs_nairobi.json +1 -0
  448. qiskit/providers/fake_provider/backends/nairobi/fake_nairobi.py +38 -0
  449. qiskit/providers/fake_provider/backends/nairobi/props_nairobi.json +1 -0
  450. qiskit/providers/fake_provider/backends/oslo/__init__.py +15 -0
  451. qiskit/providers/fake_provider/backends/oslo/conf_oslo.json +1 -0
  452. qiskit/providers/fake_provider/backends/oslo/defs_oslo.json +1 -0
  453. qiskit/providers/fake_provider/backends/oslo/fake_oslo.py +29 -0
  454. qiskit/providers/fake_provider/backends/oslo/props_oslo.json +1 -0
  455. qiskit/providers/fake_provider/backends/ourense/__init__.py +16 -0
  456. qiskit/providers/fake_provider/backends/ourense/conf_ourense.json +1 -0
  457. qiskit/providers/fake_provider/backends/ourense/fake_ourense.py +50 -0
  458. qiskit/providers/fake_provider/backends/ourense/props_ourense.json +1 -0
  459. qiskit/providers/fake_provider/backends/paris/__init__.py +16 -0
  460. qiskit/providers/fake_provider/backends/paris/conf_paris.json +1 -0
  461. qiskit/providers/fake_provider/backends/paris/defs_paris.json +1 -0
  462. qiskit/providers/fake_provider/backends/paris/fake_paris.py +64 -0
  463. qiskit/providers/fake_provider/backends/paris/props_paris.json +1 -0
  464. qiskit/providers/fake_provider/backends/perth/__init__.py +15 -0
  465. qiskit/providers/fake_provider/backends/perth/conf_perth.json +1 -0
  466. qiskit/providers/fake_provider/backends/perth/defs_perth.json +1 -0
  467. qiskit/providers/fake_provider/backends/perth/fake_perth.py +29 -0
  468. qiskit/providers/fake_provider/backends/perth/props_perth.json +1 -0
  469. qiskit/providers/fake_provider/backends/poughkeepsie/__init__.py +16 -0
  470. qiskit/providers/fake_provider/backends/poughkeepsie/conf_poughkeepsie.json +1 -0
  471. qiskit/providers/fake_provider/backends/poughkeepsie/defs_poughkeepsie.json +1 -0
  472. qiskit/providers/fake_provider/backends/poughkeepsie/fake_poughkeepsie.py +124 -0
  473. qiskit/providers/fake_provider/backends/poughkeepsie/props_poughkeepsie.json +1 -0
  474. qiskit/providers/fake_provider/backends/prague/__init__.py +15 -0
  475. qiskit/providers/fake_provider/backends/prague/conf_prague.json +1 -0
  476. qiskit/providers/fake_provider/backends/prague/fake_prague.py +28 -0
  477. qiskit/providers/fake_provider/backends/prague/props_prague.json +1 -0
  478. qiskit/providers/fake_provider/backends/quito/__init__.py +16 -0
  479. qiskit/providers/fake_provider/backends/quito/conf_quito.json +1 -0
  480. qiskit/providers/fake_provider/backends/quito/defs_quito.json +1 -0
  481. qiskit/providers/fake_provider/backends/quito/fake_quito.py +38 -0
  482. qiskit/providers/fake_provider/backends/quito/props_quito.json +1 -0
  483. qiskit/providers/fake_provider/backends/rochester/__init__.py +16 -0
  484. qiskit/providers/fake_provider/backends/rochester/conf_rochester.json +1 -0
  485. qiskit/providers/fake_provider/backends/rochester/fake_rochester.py +36 -0
  486. qiskit/providers/fake_provider/backends/rochester/props_rochester.json +1 -0
  487. qiskit/providers/fake_provider/backends/rome/__init__.py +16 -0
  488. qiskit/providers/fake_provider/backends/rome/conf_rome.json +1 -0
  489. qiskit/providers/fake_provider/backends/rome/defs_rome.json +1 -0
  490. qiskit/providers/fake_provider/backends/rome/fake_rome.py +38 -0
  491. qiskit/providers/fake_provider/backends/rome/props_rome.json +1 -0
  492. qiskit/providers/fake_provider/backends/rueschlikon/__init__.py +15 -0
  493. qiskit/providers/fake_provider/backends/rueschlikon/fake_rueschlikon.py +74 -0
  494. qiskit/providers/fake_provider/backends/santiago/__init__.py +16 -0
  495. qiskit/providers/fake_provider/backends/santiago/conf_santiago.json +1 -0
  496. qiskit/providers/fake_provider/backends/santiago/defs_santiago.json +1 -0
  497. qiskit/providers/fake_provider/backends/santiago/fake_santiago.py +38 -0
  498. qiskit/providers/fake_provider/backends/santiago/props_santiago.json +1 -0
  499. qiskit/providers/fake_provider/backends/sherbrooke/__init__.py +17 -0
  500. qiskit/providers/fake_provider/backends/sherbrooke/conf_sherbrooke.json +1 -0
  501. qiskit/providers/fake_provider/backends/sherbrooke/defs_sherbrooke.json +1 -0
  502. qiskit/providers/fake_provider/backends/sherbrooke/fake_sherbrooke.py +28 -0
  503. qiskit/providers/fake_provider/backends/sherbrooke/props_sherbrooke.json +1 -0
  504. qiskit/providers/fake_provider/backends/singapore/__init__.py +16 -0
  505. qiskit/providers/fake_provider/backends/singapore/conf_singapore.json +1 -0
  506. qiskit/providers/fake_provider/backends/singapore/fake_singapore.py +58 -0
  507. qiskit/providers/fake_provider/backends/singapore/props_singapore.json +1 -0
  508. qiskit/providers/fake_provider/backends/sydney/__init__.py +16 -0
  509. qiskit/providers/fake_provider/backends/sydney/conf_sydney.json +1 -0
  510. qiskit/providers/fake_provider/backends/sydney/defs_sydney.json +1 -0
  511. qiskit/providers/fake_provider/backends/sydney/fake_sydney.py +38 -0
  512. qiskit/providers/fake_provider/backends/sydney/props_sydney.json +1 -0
  513. qiskit/providers/fake_provider/backends/tenerife/__init__.py +15 -0
  514. qiskit/providers/fake_provider/backends/tenerife/fake_tenerife.py +64 -0
  515. qiskit/providers/fake_provider/backends/tenerife/props_tenerife.json +1 -0
  516. qiskit/providers/fake_provider/backends/tokyo/__init__.py +15 -0
  517. qiskit/providers/fake_provider/backends/tokyo/fake_tokyo.py +137 -0
  518. qiskit/providers/fake_provider/backends/tokyo/props_tokyo.json +1 -0
  519. qiskit/providers/fake_provider/backends/toronto/__init__.py +16 -0
  520. qiskit/providers/fake_provider/backends/toronto/conf_toronto.json +1 -0
  521. qiskit/providers/fake_provider/backends/toronto/defs_toronto.json +1 -0
  522. qiskit/providers/fake_provider/backends/toronto/fake_toronto.py +38 -0
  523. qiskit/providers/fake_provider/backends/toronto/props_toronto.json +1 -0
  524. qiskit/providers/fake_provider/backends/valencia/__init__.py +16 -0
  525. qiskit/providers/fake_provider/backends/valencia/conf_valencia.json +1 -0
  526. qiskit/providers/fake_provider/backends/valencia/defs_valencia.json +1 -0
  527. qiskit/providers/fake_provider/backends/valencia/fake_valencia.py +38 -0
  528. qiskit/providers/fake_provider/backends/valencia/props_valencia.json +1 -0
  529. qiskit/providers/fake_provider/backends/vigo/__init__.py +16 -0
  530. qiskit/providers/fake_provider/backends/vigo/conf_vigo.json +1 -0
  531. qiskit/providers/fake_provider/backends/vigo/fake_vigo.py +50 -0
  532. qiskit/providers/fake_provider/backends/vigo/props_vigo.json +1 -0
  533. qiskit/providers/fake_provider/backends/washington/__init__.py +18 -0
  534. qiskit/providers/fake_provider/backends/washington/conf_washington.json +1 -0
  535. qiskit/providers/fake_provider/backends/washington/defs_washington.json +1 -0
  536. qiskit/providers/fake_provider/backends/washington/fake_washington.py +38 -0
  537. qiskit/providers/fake_provider/backends/washington/props_washington.json +1 -0
  538. qiskit/providers/fake_provider/backends/yorktown/__init__.py +16 -0
  539. qiskit/providers/fake_provider/backends/yorktown/conf_yorktown.json +1 -0
  540. qiskit/providers/fake_provider/backends/yorktown/fake_yorktown.py +54 -0
  541. qiskit/providers/fake_provider/backends/yorktown/props_yorktown.json +1 -0
  542. qiskit/providers/fake_provider/fake_1q.py +91 -0
  543. qiskit/providers/fake_provider/fake_backend.py +572 -0
  544. qiskit/providers/fake_provider/fake_backend_v2.py +217 -0
  545. qiskit/providers/fake_provider/fake_job.py +81 -0
  546. qiskit/providers/fake_provider/fake_mumbai_v2.py +637 -0
  547. qiskit/providers/fake_provider/fake_openpulse_2q.py +342 -0
  548. qiskit/providers/fake_provider/fake_openpulse_3q.py +332 -0
  549. qiskit/providers/fake_provider/fake_provider.py +214 -0
  550. qiskit/providers/fake_provider/fake_pulse_backend.py +43 -0
  551. qiskit/providers/fake_provider/fake_qasm_backend.py +72 -0
  552. qiskit/providers/fake_provider/fake_qasm_simulator.py +48 -0
  553. qiskit/providers/fake_provider/fake_qobj.py +44 -0
  554. qiskit/providers/fake_provider/utils/__init__.py +15 -0
  555. qiskit/providers/fake_provider/utils/backend_converter.py +150 -0
  556. qiskit/providers/fake_provider/utils/configurable_backend.py +360 -0
  557. qiskit/providers/fake_provider/utils/json_decoder.py +109 -0
  558. qiskit/providers/job.py +142 -0
  559. qiskit/providers/jobstatus.py +30 -0
  560. qiskit/providers/models/__init__.py +52 -0
  561. qiskit/providers/models/backendconfiguration.py +994 -0
  562. qiskit/providers/models/backendproperties.py +490 -0
  563. qiskit/providers/models/backendstatus.py +94 -0
  564. qiskit/providers/models/jobstatus.py +66 -0
  565. qiskit/providers/models/pulsedefaults.py +304 -0
  566. qiskit/providers/options.py +273 -0
  567. qiskit/providers/provider.py +79 -0
  568. qiskit/providers/providerutils.py +99 -0
  569. qiskit/pulse/__init__.py +170 -0
  570. qiskit/pulse/builder.py +2733 -0
  571. qiskit/pulse/calibration_entries.py +357 -0
  572. qiskit/pulse/channels.py +221 -0
  573. qiskit/pulse/configuration.py +244 -0
  574. qiskit/pulse/exceptions.py +43 -0
  575. qiskit/pulse/filters.py +302 -0
  576. qiskit/pulse/instruction_schedule_map.py +406 -0
  577. qiskit/pulse/instructions/__init__.py +69 -0
  578. qiskit/pulse/instructions/acquire.py +150 -0
  579. qiskit/pulse/instructions/call.py +176 -0
  580. qiskit/pulse/instructions/delay.py +69 -0
  581. qiskit/pulse/instructions/directives.py +145 -0
  582. qiskit/pulse/instructions/frequency.py +132 -0
  583. qiskit/pulse/instructions/instruction.py +266 -0
  584. qiskit/pulse/instructions/phase.py +149 -0
  585. qiskit/pulse/instructions/play.py +96 -0
  586. qiskit/pulse/instructions/reference.py +99 -0
  587. qiskit/pulse/instructions/snapshot.py +80 -0
  588. qiskit/pulse/library/__init__.py +99 -0
  589. qiskit/pulse/library/continuous.py +430 -0
  590. qiskit/pulse/library/parametric_pulses.py +629 -0
  591. qiskit/pulse/library/pulse.py +137 -0
  592. qiskit/pulse/library/samplers/__init__.py +15 -0
  593. qiskit/pulse/library/samplers/decorators.py +299 -0
  594. qiskit/pulse/library/samplers/strategies.py +71 -0
  595. qiskit/pulse/library/symbolic_pulses.py +1962 -0
  596. qiskit/pulse/library/waveform.py +134 -0
  597. qiskit/pulse/macros.py +256 -0
  598. qiskit/pulse/parameter_manager.py +432 -0
  599. qiskit/pulse/parser.py +314 -0
  600. qiskit/pulse/reference_manager.py +58 -0
  601. qiskit/pulse/schedule.py +2002 -0
  602. qiskit/pulse/transforms/__init__.py +106 -0
  603. qiskit/pulse/transforms/alignments.py +406 -0
  604. qiskit/pulse/transforms/base_transforms.py +71 -0
  605. qiskit/pulse/transforms/canonicalization.py +514 -0
  606. qiskit/pulse/transforms/dag.py +107 -0
  607. qiskit/pulse/utils.py +109 -0
  608. qiskit/qasm/libs/qelib1.inc +266 -0
  609. qiskit/qasm/libs/stdgates.inc +75 -0
  610. qiskit/qasm2/__init__.py +658 -0
  611. qiskit/qasm2/exceptions.py +27 -0
  612. qiskit/qasm2/export.py +374 -0
  613. qiskit/qasm2/parse.py +403 -0
  614. qiskit/qasm3/__init__.py +255 -0
  615. qiskit/qasm3/ast.py +606 -0
  616. qiskit/qasm3/exceptions.py +27 -0
  617. qiskit/qasm3/experimental.py +30 -0
  618. qiskit/qasm3/exporter.py +1079 -0
  619. qiskit/qasm3/printer.py +545 -0
  620. qiskit/qobj/__init__.py +75 -0
  621. qiskit/qobj/common.py +71 -0
  622. qiskit/qobj/converters/__init__.py +18 -0
  623. qiskit/qobj/converters/lo_config.py +168 -0
  624. qiskit/qobj/converters/pulse_instruction.py +1070 -0
  625. qiskit/qobj/pulse_qobj.py +655 -0
  626. qiskit/qobj/qasm_qobj.py +656 -0
  627. qiskit/qobj/utils.py +37 -0
  628. qiskit/qpy/__init__.py +1348 -0
  629. qiskit/qpy/binary_io/__init__.py +36 -0
  630. qiskit/qpy/binary_io/circuits.py +1212 -0
  631. qiskit/qpy/binary_io/schedules.py +619 -0
  632. qiskit/qpy/binary_io/value.py +549 -0
  633. qiskit/qpy/common.py +305 -0
  634. qiskit/qpy/exceptions.py +28 -0
  635. qiskit/qpy/formats.py +360 -0
  636. qiskit/qpy/interface.py +308 -0
  637. qiskit/qpy/type_keys.py +544 -0
  638. qiskit/quantum_info/__init__.py +173 -0
  639. qiskit/quantum_info/analysis/__init__.py +17 -0
  640. qiskit/quantum_info/analysis/average.py +47 -0
  641. qiskit/quantum_info/analysis/distance.py +101 -0
  642. qiskit/quantum_info/analysis/make_observable.py +43 -0
  643. qiskit/quantum_info/analysis/z2_symmetries.py +483 -0
  644. qiskit/quantum_info/operators/__init__.py +28 -0
  645. qiskit/quantum_info/operators/base_operator.py +145 -0
  646. qiskit/quantum_info/operators/channel/__init__.py +29 -0
  647. qiskit/quantum_info/operators/channel/chi.py +190 -0
  648. qiskit/quantum_info/operators/channel/choi.py +217 -0
  649. qiskit/quantum_info/operators/channel/kraus.py +336 -0
  650. qiskit/quantum_info/operators/channel/ptm.py +203 -0
  651. qiskit/quantum_info/operators/channel/quantum_channel.py +350 -0
  652. qiskit/quantum_info/operators/channel/stinespring.py +295 -0
  653. qiskit/quantum_info/operators/channel/superop.py +376 -0
  654. qiskit/quantum_info/operators/channel/transformations.py +467 -0
  655. qiskit/quantum_info/operators/custom_iterator.py +48 -0
  656. qiskit/quantum_info/operators/dihedral/__init__.py +18 -0
  657. qiskit/quantum_info/operators/dihedral/dihedral.py +508 -0
  658. qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +218 -0
  659. qiskit/quantum_info/operators/dihedral/polynomial.py +313 -0
  660. qiskit/quantum_info/operators/dihedral/random.py +61 -0
  661. qiskit/quantum_info/operators/linear_op.py +25 -0
  662. qiskit/quantum_info/operators/measures.py +423 -0
  663. qiskit/quantum_info/operators/mixins/__init__.py +52 -0
  664. qiskit/quantum_info/operators/mixins/adjoint.py +52 -0
  665. qiskit/quantum_info/operators/mixins/group.py +171 -0
  666. qiskit/quantum_info/operators/mixins/linear.py +84 -0
  667. qiskit/quantum_info/operators/mixins/multiply.py +62 -0
  668. qiskit/quantum_info/operators/mixins/tolerances.py +72 -0
  669. qiskit/quantum_info/operators/op_shape.py +533 -0
  670. qiskit/quantum_info/operators/operator.py +778 -0
  671. qiskit/quantum_info/operators/predicates.py +170 -0
  672. qiskit/quantum_info/operators/random.py +154 -0
  673. qiskit/quantum_info/operators/scalar_op.py +253 -0
  674. qiskit/quantum_info/operators/symplectic/__init__.py +23 -0
  675. qiskit/quantum_info/operators/symplectic/base_pauli.py +720 -0
  676. qiskit/quantum_info/operators/symplectic/clifford.py +1022 -0
  677. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +558 -0
  678. qiskit/quantum_info/operators/symplectic/pauli.py +699 -0
  679. qiskit/quantum_info/operators/symplectic/pauli_list.py +1209 -0
  680. qiskit/quantum_info/operators/symplectic/pauli_utils.py +40 -0
  681. qiskit/quantum_info/operators/symplectic/random.py +264 -0
  682. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1156 -0
  683. qiskit/quantum_info/operators/utils/__init__.py +20 -0
  684. qiskit/quantum_info/operators/utils/anti_commutator.py +36 -0
  685. qiskit/quantum_info/operators/utils/commutator.py +36 -0
  686. qiskit/quantum_info/operators/utils/double_commutator.py +76 -0
  687. qiskit/quantum_info/random.py +26 -0
  688. qiskit/quantum_info/states/__init__.py +28 -0
  689. qiskit/quantum_info/states/densitymatrix.py +848 -0
  690. qiskit/quantum_info/states/measures.py +288 -0
  691. qiskit/quantum_info/states/quantum_state.py +503 -0
  692. qiskit/quantum_info/states/random.py +157 -0
  693. qiskit/quantum_info/states/stabilizerstate.py +638 -0
  694. qiskit/quantum_info/states/statevector.py +961 -0
  695. qiskit/quantum_info/states/utils.py +245 -0
  696. qiskit/quantum_info/synthesis/__init__.py +20 -0
  697. qiskit/quantum_info/synthesis/clifford_decompose.py +69 -0
  698. qiskit/quantum_info/synthesis/cnotdihedral_decompose.py +50 -0
  699. qiskit/quantum_info/synthesis/ion_decompose.py +55 -0
  700. qiskit/quantum_info/synthesis/local_invariance.py +93 -0
  701. qiskit/quantum_info/synthesis/one_qubit_decompose.py +284 -0
  702. qiskit/quantum_info/synthesis/qsd.py +269 -0
  703. qiskit/quantum_info/synthesis/quaternion.py +156 -0
  704. qiskit/quantum_info/synthesis/two_qubit_decompose.py +1567 -0
  705. qiskit/quantum_info/synthesis/weyl.py +98 -0
  706. qiskit/quantum_info/synthesis/xx_decompose/__init__.py +19 -0
  707. qiskit/quantum_info/synthesis/xx_decompose/circuits.py +299 -0
  708. qiskit/quantum_info/synthesis/xx_decompose/decomposer.py +314 -0
  709. qiskit/quantum_info/synthesis/xx_decompose/embodiments.py +163 -0
  710. qiskit/quantum_info/synthesis/xx_decompose/paths.py +412 -0
  711. qiskit/quantum_info/synthesis/xx_decompose/polytopes.py +264 -0
  712. qiskit/quantum_info/synthesis/xx_decompose/utilities.py +40 -0
  713. qiskit/quantum_info/synthesis/xx_decompose/weyl.py +133 -0
  714. qiskit/result/__init__.py +67 -0
  715. qiskit/result/counts.py +189 -0
  716. qiskit/result/distributions/__init__.py +17 -0
  717. qiskit/result/distributions/probability.py +100 -0
  718. qiskit/result/distributions/quasi.py +154 -0
  719. qiskit/result/exceptions.py +40 -0
  720. qiskit/result/mitigation/__init__.py +13 -0
  721. qiskit/result/mitigation/base_readout_mitigator.py +79 -0
  722. qiskit/result/mitigation/correlated_readout_mitigator.py +268 -0
  723. qiskit/result/mitigation/local_readout_mitigator.py +319 -0
  724. qiskit/result/mitigation/utils.py +161 -0
  725. qiskit/result/models.py +233 -0
  726. qiskit/result/postprocess.py +239 -0
  727. qiskit/result/result.py +397 -0
  728. qiskit/result/sampled_expval.py +75 -0
  729. qiskit/result/utils.py +295 -0
  730. qiskit/scheduler/__init__.py +31 -0
  731. qiskit/scheduler/config.py +35 -0
  732. qiskit/scheduler/lowering.py +187 -0
  733. qiskit/scheduler/methods/__init__.py +22 -0
  734. qiskit/scheduler/methods/basic.py +137 -0
  735. qiskit/scheduler/schedule_circuit.py +67 -0
  736. qiskit/scheduler/sequence.py +102 -0
  737. qiskit/synthesis/__init__.py +122 -0
  738. qiskit/synthesis/clifford/__init__.py +19 -0
  739. qiskit/synthesis/clifford/clifford_decompose_ag.py +176 -0
  740. qiskit/synthesis/clifford/clifford_decompose_bm.py +276 -0
  741. qiskit/synthesis/clifford/clifford_decompose_full.py +61 -0
  742. qiskit/synthesis/clifford/clifford_decompose_greedy.py +347 -0
  743. qiskit/synthesis/clifford/clifford_decompose_layers.py +443 -0
  744. qiskit/synthesis/cnotdihedral/__init__.py +17 -0
  745. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +46 -0
  746. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +140 -0
  747. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_two_qubits.py +264 -0
  748. qiskit/synthesis/discrete_basis/__init__.py +16 -0
  749. qiskit/synthesis/discrete_basis/commutator_decompose.py +241 -0
  750. qiskit/synthesis/discrete_basis/gate_sequence.py +415 -0
  751. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +163 -0
  752. qiskit/synthesis/discrete_basis/solovay_kitaev.py +207 -0
  753. qiskit/synthesis/evolution/__init__.py +20 -0
  754. qiskit/synthesis/evolution/evolution_synthesis.py +46 -0
  755. qiskit/synthesis/evolution/lie_trotter.py +123 -0
  756. qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
  757. qiskit/synthesis/evolution/product_formula.py +328 -0
  758. qiskit/synthesis/evolution/qdrift.py +102 -0
  759. qiskit/synthesis/evolution/suzuki_trotter.py +145 -0
  760. qiskit/synthesis/linear/__init__.py +25 -0
  761. qiskit/synthesis/linear/cnot_synth.py +141 -0
  762. qiskit/synthesis/linear/linear_circuits_utils.py +127 -0
  763. qiskit/synthesis/linear/linear_depth_lnn.py +275 -0
  764. qiskit/synthesis/linear/linear_matrix_utils.py +175 -0
  765. qiskit/synthesis/linear_phase/__init__.py +17 -0
  766. qiskit/synthesis/linear_phase/cnot_phase_synth.py +203 -0
  767. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +262 -0
  768. qiskit/synthesis/linear_phase/cz_depth_lnn.py +206 -0
  769. qiskit/synthesis/permutation/__init__.py +17 -0
  770. qiskit/synthesis/permutation/permutation_full.py +90 -0
  771. qiskit/synthesis/permutation/permutation_lnn.py +68 -0
  772. qiskit/synthesis/permutation/permutation_utils.py +73 -0
  773. qiskit/synthesis/stabilizer/__init__.py +15 -0
  774. qiskit/synthesis/stabilizer/stabilizer_decompose.py +188 -0
  775. qiskit/test/__init__.py +18 -0
  776. qiskit/test/_canonical.py +125 -0
  777. qiskit/test/base.py +331 -0
  778. qiskit/test/decorators.py +308 -0
  779. qiskit/test/ibmq_mock.py +45 -0
  780. qiskit/test/mock/__init__.py +40 -0
  781. qiskit/test/mock/backends/__init__.py +32 -0
  782. qiskit/test/mock/backends/almaden/__init__.py +32 -0
  783. qiskit/test/mock/backends/armonk/__init__.py +32 -0
  784. qiskit/test/mock/backends/athens/__init__.py +32 -0
  785. qiskit/test/mock/backends/belem/__init__.py +32 -0
  786. qiskit/test/mock/backends/boeblingen/__init__.py +32 -0
  787. qiskit/test/mock/backends/bogota/__init__.py +32 -0
  788. qiskit/test/mock/backends/brooklyn/__init__.py +32 -0
  789. qiskit/test/mock/backends/burlington/__init__.py +32 -0
  790. qiskit/test/mock/backends/cairo/__init__.py +32 -0
  791. qiskit/test/mock/backends/cambridge/__init__.py +32 -0
  792. qiskit/test/mock/backends/casablanca/__init__.py +32 -0
  793. qiskit/test/mock/backends/essex/__init__.py +32 -0
  794. qiskit/test/mock/backends/guadalupe/__init__.py +32 -0
  795. qiskit/test/mock/backends/hanoi/__init__.py +32 -0
  796. qiskit/test/mock/backends/jakarta/__init__.py +32 -0
  797. qiskit/test/mock/backends/johannesburg/__init__.py +32 -0
  798. qiskit/test/mock/backends/kolkata/__init__.py +32 -0
  799. qiskit/test/mock/backends/lagos/__init__.py +32 -0
  800. qiskit/test/mock/backends/lima/__init__.py +32 -0
  801. qiskit/test/mock/backends/london/__init__.py +32 -0
  802. qiskit/test/mock/backends/manhattan/__init__.py +32 -0
  803. qiskit/test/mock/backends/manila/__init__.py +32 -0
  804. qiskit/test/mock/backends/melbourne/__init__.py +32 -0
  805. qiskit/test/mock/backends/montreal/__init__.py +32 -0
  806. qiskit/test/mock/backends/mumbai/__init__.py +32 -0
  807. qiskit/test/mock/backends/nairobi/__init__.py +32 -0
  808. qiskit/test/mock/backends/ourense/__init__.py +32 -0
  809. qiskit/test/mock/backends/paris/__init__.py +32 -0
  810. qiskit/test/mock/backends/poughkeepsie/__init__.py +32 -0
  811. qiskit/test/mock/backends/quito/__init__.py +32 -0
  812. qiskit/test/mock/backends/rochester/__init__.py +32 -0
  813. qiskit/test/mock/backends/rome/__init__.py +32 -0
  814. qiskit/test/mock/backends/rueschlikon/__init__.py +32 -0
  815. qiskit/test/mock/backends/santiago/__init__.py +32 -0
  816. qiskit/test/mock/backends/singapore/__init__.py +32 -0
  817. qiskit/test/mock/backends/sydney/__init__.py +32 -0
  818. qiskit/test/mock/backends/tenerife/__init__.py +32 -0
  819. qiskit/test/mock/backends/tokyo/__init__.py +32 -0
  820. qiskit/test/mock/backends/toronto/__init__.py +32 -0
  821. qiskit/test/mock/backends/valencia/__init__.py +32 -0
  822. qiskit/test/mock/backends/vigo/__init__.py +32 -0
  823. qiskit/test/mock/backends/washington/__init__.py +32 -0
  824. qiskit/test/mock/backends/yorktown/__init__.py +32 -0
  825. qiskit/test/providers/__init__.py +16 -0
  826. qiskit/test/providers/backend.py +75 -0
  827. qiskit/test/providers/provider.py +59 -0
  828. qiskit/test/reference_circuits.py +41 -0
  829. qiskit/test/testing_options.py +93 -0
  830. qiskit/test/utils.py +87 -0
  831. qiskit/tools/__init__.py +44 -0
  832. qiskit/tools/events/__init__.py +25 -0
  833. qiskit/tools/events/progressbar.py +195 -0
  834. qiskit/tools/events/pubsub.py +158 -0
  835. qiskit/tools/jupyter/__init__.py +138 -0
  836. qiskit/tools/jupyter/backend_monitor.py +588 -0
  837. qiskit/tools/jupyter/backend_overview.py +322 -0
  838. qiskit/tools/jupyter/copyright.py +42 -0
  839. qiskit/tools/jupyter/job_watcher.py +167 -0
  840. qiskit/tools/jupyter/job_widgets.py +160 -0
  841. qiskit/tools/jupyter/jupyter_magics.py +190 -0
  842. qiskit/tools/jupyter/library.py +189 -0
  843. qiskit/tools/jupyter/monospace.py +29 -0
  844. qiskit/tools/jupyter/progressbar.py +122 -0
  845. qiskit/tools/jupyter/version_table.py +67 -0
  846. qiskit/tools/jupyter/watcher_monitor.py +74 -0
  847. qiskit/tools/monitor/__init__.py +16 -0
  848. qiskit/tools/monitor/job_monitor.py +107 -0
  849. qiskit/tools/monitor/overview.py +247 -0
  850. qiskit/tools/parallel.py +198 -0
  851. qiskit/tools/visualization.py +16 -0
  852. qiskit/transpiler/__init__.py +1287 -0
  853. qiskit/transpiler/basepasses.py +221 -0
  854. qiskit/transpiler/coupling.py +500 -0
  855. qiskit/transpiler/exceptions.py +55 -0
  856. qiskit/transpiler/fencedobjs.py +78 -0
  857. qiskit/transpiler/instruction_durations.py +278 -0
  858. qiskit/transpiler/layout.py +658 -0
  859. qiskit/transpiler/passes/__init__.py +296 -0
  860. qiskit/transpiler/passes/analysis/__init__.py +23 -0
  861. qiskit/transpiler/passes/analysis/count_ops.py +30 -0
  862. qiskit/transpiler/passes/analysis/count_ops_longest_path.py +26 -0
  863. qiskit/transpiler/passes/analysis/dag_longest_path.py +24 -0
  864. qiskit/transpiler/passes/analysis/depth.py +33 -0
  865. qiskit/transpiler/passes/analysis/num_qubits.py +26 -0
  866. qiskit/transpiler/passes/analysis/num_tensor_factors.py +26 -0
  867. qiskit/transpiler/passes/analysis/resource_estimation.py +41 -0
  868. qiskit/transpiler/passes/analysis/size.py +36 -0
  869. qiskit/transpiler/passes/analysis/width.py +27 -0
  870. qiskit/transpiler/passes/basis/__init__.py +20 -0
  871. qiskit/transpiler/passes/basis/basis_translator.py +697 -0
  872. qiskit/transpiler/passes/basis/decompose.py +98 -0
  873. qiskit/transpiler/passes/basis/translate_parameterized.py +177 -0
  874. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +86 -0
  875. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +107 -0
  876. qiskit/transpiler/passes/basis/unroller.py +145 -0
  877. qiskit/transpiler/passes/calibration/__init__.py +17 -0
  878. qiskit/transpiler/passes/calibration/base_builder.py +79 -0
  879. qiskit/transpiler/passes/calibration/builders.py +20 -0
  880. qiskit/transpiler/passes/calibration/exceptions.py +22 -0
  881. qiskit/transpiler/passes/calibration/pulse_gate.py +98 -0
  882. qiskit/transpiler/passes/calibration/rx_builder.py +160 -0
  883. qiskit/transpiler/passes/calibration/rzx_builder.py +394 -0
  884. qiskit/transpiler/passes/calibration/rzx_templates.py +51 -0
  885. qiskit/transpiler/passes/layout/__init__.py +27 -0
  886. qiskit/transpiler/passes/layout/_csp_custom_solver.py +65 -0
  887. qiskit/transpiler/passes/layout/apply_layout.py +108 -0
  888. qiskit/transpiler/passes/layout/csp_layout.py +132 -0
  889. qiskit/transpiler/passes/layout/dense_layout.py +202 -0
  890. qiskit/transpiler/passes/layout/disjoint_utils.py +205 -0
  891. qiskit/transpiler/passes/layout/enlarge_with_ancilla.py +49 -0
  892. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +117 -0
  893. qiskit/transpiler/passes/layout/layout_2q_distance.py +77 -0
  894. qiskit/transpiler/passes/layout/noise_adaptive_layout.py +311 -0
  895. qiskit/transpiler/passes/layout/sabre_layout.py +468 -0
  896. qiskit/transpiler/passes/layout/sabre_pre_layout.py +217 -0
  897. qiskit/transpiler/passes/layout/set_layout.py +64 -0
  898. qiskit/transpiler/passes/layout/trivial_layout.py +66 -0
  899. qiskit/transpiler/passes/layout/vf2_layout.py +257 -0
  900. qiskit/transpiler/passes/layout/vf2_post_layout.py +419 -0
  901. qiskit/transpiler/passes/layout/vf2_utils.py +260 -0
  902. qiskit/transpiler/passes/optimization/__init__.py +38 -0
  903. qiskit/transpiler/passes/optimization/_gate_extension.py +80 -0
  904. qiskit/transpiler/passes/optimization/collect_1q_runs.py +31 -0
  905. qiskit/transpiler/passes/optimization/collect_2q_blocks.py +35 -0
  906. qiskit/transpiler/passes/optimization/collect_and_collapse.py +115 -0
  907. qiskit/transpiler/passes/optimization/collect_cliffords.py +97 -0
  908. qiskit/transpiler/passes/optimization/collect_linear_functions.py +80 -0
  909. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +227 -0
  910. qiskit/transpiler/passes/optimization/commutation_analysis.py +93 -0
  911. qiskit/transpiler/passes/optimization/commutative_cancellation.py +207 -0
  912. qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +97 -0
  913. qiskit/transpiler/passes/optimization/consolidate_blocks.py +219 -0
  914. qiskit/transpiler/passes/optimization/crosstalk_adaptive_schedule.py +732 -0
  915. qiskit/transpiler/passes/optimization/cx_cancellation.py +55 -0
  916. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +160 -0
  917. qiskit/transpiler/passes/optimization/hoare_opt.py +416 -0
  918. qiskit/transpiler/passes/optimization/inverse_cancellation.py +177 -0
  919. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +149 -0
  920. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +268 -0
  921. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +263 -0
  922. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +384 -0
  923. qiskit/transpiler/passes/optimization/optimize_cliffords.py +89 -0
  924. qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +71 -0
  925. qiskit/transpiler/passes/optimization/remove_diagonal_gates_before_measure.py +69 -0
  926. qiskit/transpiler/passes/optimization/remove_reset_in_zero_state.py +37 -0
  927. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +47 -0
  928. qiskit/transpiler/passes/optimization/template_matching/__init__.py +19 -0
  929. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +749 -0
  930. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +454 -0
  931. qiskit/transpiler/passes/optimization/template_matching/maximal_matches.py +77 -0
  932. qiskit/transpiler/passes/optimization/template_matching/template_matching.py +370 -0
  933. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +629 -0
  934. qiskit/transpiler/passes/optimization/template_optimization.py +158 -0
  935. qiskit/transpiler/passes/routing/__init__.py +21 -0
  936. qiskit/transpiler/passes/routing/algorithms/__init__.py +33 -0
  937. qiskit/transpiler/passes/routing/algorithms/token_swapper.py +105 -0
  938. qiskit/transpiler/passes/routing/algorithms/types.py +46 -0
  939. qiskit/transpiler/passes/routing/algorithms/util.py +103 -0
  940. qiskit/transpiler/passes/routing/basic_swap.py +155 -0
  941. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/__init__.py +25 -0
  942. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_block.py +60 -0
  943. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +387 -0
  944. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/pauli_2q_evolution_commutation.py +141 -0
  945. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +306 -0
  946. qiskit/transpiler/passes/routing/layout_transformation.py +118 -0
  947. qiskit/transpiler/passes/routing/lookahead_swap.py +384 -0
  948. qiskit/transpiler/passes/routing/sabre_swap.py +430 -0
  949. qiskit/transpiler/passes/routing/stochastic_swap.py +512 -0
  950. qiskit/transpiler/passes/routing/utils.py +35 -0
  951. qiskit/transpiler/passes/scheduling/__init__.py +27 -0
  952. qiskit/transpiler/passes/scheduling/alap.py +155 -0
  953. qiskit/transpiler/passes/scheduling/alignments/__init__.py +81 -0
  954. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +256 -0
  955. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +75 -0
  956. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +97 -0
  957. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +241 -0
  958. qiskit/transpiler/passes/scheduling/asap.py +177 -0
  959. qiskit/transpiler/passes/scheduling/base_scheduler.py +289 -0
  960. qiskit/transpiler/passes/scheduling/calibration_creators.py +27 -0
  961. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +285 -0
  962. qiskit/transpiler/passes/scheduling/padding/__init__.py +16 -0
  963. qiskit/transpiler/passes/scheduling/padding/base_padding.py +256 -0
  964. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +408 -0
  965. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +79 -0
  966. qiskit/transpiler/passes/scheduling/rzx_templates.py +28 -0
  967. qiskit/transpiler/passes/scheduling/scheduling/__init__.py +17 -0
  968. qiskit/transpiler/passes/scheduling/scheduling/alap.py +127 -0
  969. qiskit/transpiler/passes/scheduling/scheduling/asap.py +131 -0
  970. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +89 -0
  971. qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
  972. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +135 -0
  973. qiskit/transpiler/passes/synthesis/__init__.py +19 -0
  974. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +637 -0
  975. qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +63 -0
  976. qiskit/transpiler/passes/synthesis/plugin.py +597 -0
  977. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +289 -0
  978. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +895 -0
  979. qiskit/transpiler/passes/utils/__init__.py +34 -0
  980. qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +95 -0
  981. qiskit/transpiler/passes/utils/block_to_matrix.py +47 -0
  982. qiskit/transpiler/passes/utils/check_gate_direction.py +87 -0
  983. qiskit/transpiler/passes/utils/check_map.py +94 -0
  984. qiskit/transpiler/passes/utils/contains_instruction.py +45 -0
  985. qiskit/transpiler/passes/utils/control_flow.py +61 -0
  986. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +89 -0
  987. qiskit/transpiler/passes/utils/dag_fixed_point.py +36 -0
  988. qiskit/transpiler/passes/utils/error.py +69 -0
  989. qiskit/transpiler/passes/utils/filter_op_nodes.py +65 -0
  990. qiskit/transpiler/passes/utils/fixed_point.py +48 -0
  991. qiskit/transpiler/passes/utils/gate_direction.py +347 -0
  992. qiskit/transpiler/passes/utils/gates_basis.py +75 -0
  993. qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +162 -0
  994. qiskit/transpiler/passes/utils/minimum_point.py +118 -0
  995. qiskit/transpiler/passes/utils/remove_barriers.py +49 -0
  996. qiskit/transpiler/passes/utils/remove_final_measurements.py +114 -0
  997. qiskit/transpiler/passes/utils/unroll_forloops.py +81 -0
  998. qiskit/transpiler/passmanager.py +617 -0
  999. qiskit/transpiler/passmanager_config.py +193 -0
  1000. qiskit/transpiler/preset_passmanagers/__init__.py +280 -0
  1001. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +971 -0
  1002. qiskit/transpiler/preset_passmanagers/common.py +651 -0
  1003. qiskit/transpiler/preset_passmanagers/level0.py +113 -0
  1004. qiskit/transpiler/preset_passmanagers/level1.py +120 -0
  1005. qiskit/transpiler/preset_passmanagers/level2.py +119 -0
  1006. qiskit/transpiler/preset_passmanagers/level3.py +119 -0
  1007. qiskit/transpiler/preset_passmanagers/plugin.py +345 -0
  1008. qiskit/transpiler/propertyset.py +19 -0
  1009. qiskit/transpiler/runningpassmanager.py +174 -0
  1010. qiskit/transpiler/synthesis/__init__.py +16 -0
  1011. qiskit/transpiler/synthesis/aqc/__init__.py +178 -0
  1012. qiskit/transpiler/synthesis/aqc/approximate.py +116 -0
  1013. qiskit/transpiler/synthesis/aqc/aqc.py +170 -0
  1014. qiskit/transpiler/synthesis/aqc/aqc_plugin.py +146 -0
  1015. qiskit/transpiler/synthesis/aqc/cnot_structures.py +299 -0
  1016. qiskit/transpiler/synthesis/aqc/cnot_unit_circuit.py +103 -0
  1017. qiskit/transpiler/synthesis/aqc/cnot_unit_objective.py +299 -0
  1018. qiskit/transpiler/synthesis/aqc/elementary_operations.py +108 -0
  1019. qiskit/transpiler/synthesis/aqc/fast_gradient/__init__.py +164 -0
  1020. qiskit/transpiler/synthesis/aqc/fast_gradient/fast_grad_utils.py +237 -0
  1021. qiskit/transpiler/synthesis/aqc/fast_gradient/fast_gradient.py +225 -0
  1022. qiskit/transpiler/synthesis/aqc/fast_gradient/layer.py +370 -0
  1023. qiskit/transpiler/synthesis/aqc/fast_gradient/pmatrix.py +312 -0
  1024. qiskit/transpiler/synthesis/graysynth.py +114 -0
  1025. qiskit/transpiler/target.py +1540 -0
  1026. qiskit/transpiler/timing_constraints.py +59 -0
  1027. qiskit/user_config.py +239 -0
  1028. qiskit/utils/__init__.py +66 -0
  1029. qiskit/utils/classtools.py +146 -0
  1030. qiskit/utils/deprecation.py +489 -0
  1031. qiskit/utils/lazy_tester.py +334 -0
  1032. qiskit/utils/multiprocessing.py +48 -0
  1033. qiskit/utils/optionals.py +320 -0
  1034. qiskit/utils/units.py +143 -0
  1035. qiskit/version.py +84 -0
  1036. qiskit/visualization/__init__.py +289 -0
  1037. qiskit/visualization/array.py +204 -0
  1038. qiskit/visualization/bloch.py +741 -0
  1039. qiskit/visualization/circuit/__init__.py +15 -0
  1040. qiskit/visualization/circuit/_utils.py +633 -0
  1041. qiskit/visualization/circuit/circuit_visualization.py +717 -0
  1042. qiskit/visualization/circuit/latex.py +659 -0
  1043. qiskit/visualization/circuit/matplotlib.py +1975 -0
  1044. qiskit/visualization/circuit/qcstyle.py +420 -0
  1045. qiskit/visualization/circuit/styles/bw.json +202 -0
  1046. qiskit/visualization/circuit/styles/clifford.json +202 -0
  1047. qiskit/visualization/circuit/styles/iqp-dark.json +214 -0
  1048. qiskit/visualization/circuit/styles/iqp.json +214 -0
  1049. qiskit/visualization/circuit/styles/textbook.json +202 -0
  1050. qiskit/visualization/circuit/text.py +1802 -0
  1051. qiskit/visualization/circuit_visualization.py +19 -0
  1052. qiskit/visualization/counts_visualization.py +496 -0
  1053. qiskit/visualization/dag_visualization.py +224 -0
  1054. qiskit/visualization/exceptions.py +21 -0
  1055. qiskit/visualization/gate_map.py +1461 -0
  1056. qiskit/visualization/pass_manager_visualization.py +281 -0
  1057. qiskit/visualization/pulse_v2/__init__.py +21 -0
  1058. qiskit/visualization/pulse_v2/core.py +905 -0
  1059. qiskit/visualization/pulse_v2/device_info.py +146 -0
  1060. qiskit/visualization/pulse_v2/drawings.py +253 -0
  1061. qiskit/visualization/pulse_v2/events.py +254 -0
  1062. qiskit/visualization/pulse_v2/generators/__init__.py +40 -0
  1063. qiskit/visualization/pulse_v2/generators/barrier.py +76 -0
  1064. qiskit/visualization/pulse_v2/generators/chart.py +208 -0
  1065. qiskit/visualization/pulse_v2/generators/frame.py +437 -0
  1066. qiskit/visualization/pulse_v2/generators/snapshot.py +133 -0
  1067. qiskit/visualization/pulse_v2/generators/waveform.py +649 -0
  1068. qiskit/visualization/pulse_v2/interface.py +452 -0
  1069. qiskit/visualization/pulse_v2/layouts.py +395 -0
  1070. qiskit/visualization/pulse_v2/plotters/__init__.py +17 -0
  1071. qiskit/visualization/pulse_v2/plotters/base_plotter.py +53 -0
  1072. qiskit/visualization/pulse_v2/plotters/matplotlib.py +202 -0
  1073. qiskit/visualization/pulse_v2/stylesheet.py +322 -0
  1074. qiskit/visualization/pulse_v2/types.py +242 -0
  1075. qiskit/visualization/qcstyle.py +17 -0
  1076. qiskit/visualization/state_visualization.py +1518 -0
  1077. qiskit/visualization/timeline/__init__.py +21 -0
  1078. qiskit/visualization/timeline/core.py +457 -0
  1079. qiskit/visualization/timeline/drawings.py +260 -0
  1080. qiskit/visualization/timeline/generators.py +506 -0
  1081. qiskit/visualization/timeline/interface.py +414 -0
  1082. qiskit/visualization/timeline/layouts.py +115 -0
  1083. qiskit/visualization/timeline/plotters/__init__.py +16 -0
  1084. qiskit/visualization/timeline/plotters/base_plotter.py +58 -0
  1085. qiskit/visualization/timeline/plotters/matplotlib.py +193 -0
  1086. qiskit/visualization/timeline/stylesheet.py +311 -0
  1087. qiskit/visualization/timeline/types.py +148 -0
  1088. qiskit/visualization/transition_visualization.py +364 -0
  1089. qiskit/visualization/utils.py +49 -0
  1090. qiskit-1.0.0b1.dist-info/LICENSE.txt +203 -0
  1091. qiskit-1.0.0b1.dist-info/METADATA +430 -0
  1092. qiskit-1.0.0b1.dist-info/RECORD +1095 -0
  1093. qiskit-1.0.0b1.dist-info/WHEEL +6 -0
  1094. qiskit-1.0.0b1.dist-info/entry_points.txt +49 -0
  1095. qiskit-1.0.0b1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1677 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2017.
4
+ #
5
+ # This code is licensed under the Apache License, Version 2.0. You may
6
+ # obtain a copy of this license in the LICENSE.txt file in the root directory
7
+ # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
+ #
9
+ # Any modifications or derivative works of this code must retain this
10
+ # copyright notice, and modified files need to carry a notice indicating
11
+ # that they have been altered from the originals.
12
+
13
+ """Standard gates."""
14
+
15
+ from __future__ import annotations
16
+
17
+ from math import pi
18
+
19
+ from qiskit.circuit import (
20
+ EquivalenceLibrary,
21
+ Parameter,
22
+ QuantumCircuit,
23
+ QuantumRegister,
24
+ Gate,
25
+ Qubit,
26
+ Clbit,
27
+ )
28
+
29
+ from qiskit.quantum_info.synthesis.ion_decompose import cnot_rxx_decompose
30
+
31
+ from . import (
32
+ HGate,
33
+ CHGate,
34
+ PhaseGate,
35
+ CPhaseGate,
36
+ RGate,
37
+ RCCXGate,
38
+ RXGate,
39
+ CRXGate,
40
+ RXXGate,
41
+ RYGate,
42
+ CRYGate,
43
+ RZGate,
44
+ CRZGate,
45
+ RZZGate,
46
+ RZXGate,
47
+ SGate,
48
+ SdgGate,
49
+ CSGate,
50
+ CSdgGate,
51
+ SwapGate,
52
+ CSwapGate,
53
+ iSwapGate,
54
+ SXGate,
55
+ SXdgGate,
56
+ CSXGate,
57
+ DCXGate,
58
+ TGate,
59
+ TdgGate,
60
+ UGate,
61
+ CUGate,
62
+ U1Gate,
63
+ CU1Gate,
64
+ U2Gate,
65
+ U3Gate,
66
+ CU3Gate,
67
+ XGate,
68
+ CXGate,
69
+ CCXGate,
70
+ YGate,
71
+ CYGate,
72
+ RYYGate,
73
+ ECRGate,
74
+ ZGate,
75
+ CZGate,
76
+ IGate,
77
+ CCZGate,
78
+ XXPlusYYGate,
79
+ XXMinusYYGate,
80
+ )
81
+
82
+
83
+ _sel = StandardEquivalenceLibrary = EquivalenceLibrary()
84
+
85
+
86
+ # Import existing gate definitions
87
+
88
+ # HGate
89
+ #
90
+ # ┌───┐ ┌─────────┐
91
+ # q: ┤ H ├ ≡ q: ┤ U2(0,π) ├
92
+ # └───┘ └─────────┘
93
+ q = QuantumRegister(1, "q")
94
+ def_h = QuantumCircuit(q)
95
+ def_h.append(U2Gate(0, pi), [q[0]], [])
96
+ _sel.add_equivalence(HGate(), def_h)
97
+
98
+ # CHGate
99
+ #
100
+ # q_0: ──■── q_0: ─────────────────■─────────────────────
101
+ # ┌─┴─┐ ≡ ┌───┐┌───┐┌───┐┌─┴─┐┌─────┐┌───┐┌─────┐
102
+ # q_1: ┤ H ├ q_1: ┤ S ├┤ H ├┤ T ├┤ X ├┤ Tdg ├┤ H ├┤ Sdg ├
103
+ # └───┘ └───┘└───┘└───┘└───┘└─────┘└───┘└─────┘
104
+ q = QuantumRegister(2, "q")
105
+ def_ch = QuantumCircuit(q)
106
+ for inst, qargs, cargs in [
107
+ (SGate(), [q[1]], []),
108
+ (HGate(), [q[1]], []),
109
+ (TGate(), [q[1]], []),
110
+ (CXGate(), [q[0], q[1]], []),
111
+ (TdgGate(), [q[1]], []),
112
+ (HGate(), [q[1]], []),
113
+ (SdgGate(), [q[1]], []),
114
+ ]:
115
+ def_ch.append(inst, qargs, cargs)
116
+ _sel.add_equivalence(CHGate(), def_ch)
117
+
118
+ # PhaseGate
119
+ #
120
+ # ┌──────┐ ┌───────┐
121
+ # q: ┤ P(ϴ) ├ ≡ q: ┤ U1(ϴ) ├
122
+ # └──────┘ └───────┘
123
+ q = QuantumRegister(1, "q")
124
+ theta = Parameter("theta")
125
+ phase_to_u1 = QuantumCircuit(q)
126
+ phase_to_u1.append(U1Gate(theta), [0])
127
+ _sel.add_equivalence(PhaseGate(theta), phase_to_u1)
128
+
129
+ q = QuantumRegister(1, "q")
130
+ theta = Parameter("theta")
131
+ phase_to_u = QuantumCircuit(q)
132
+ phase_to_u.u(0, 0, theta, 0)
133
+ _sel.add_equivalence(PhaseGate(theta), phase_to_u)
134
+
135
+ # CPhaseGate
136
+ # ┌────────┐
137
+ # q_0: ─■──── q_0: ┤ P(ϴ/2) ├──■───────────────■────────────
138
+ # │P(ϴ) ≡ └────────┘┌─┴─┐┌─────────┐┌─┴─┐┌────────┐
139
+ # q_1: ─■──── q_1: ──────────┤ X ├┤ P(-ϴ/2) ├┤ X ├┤ P(ϴ/2) ├
140
+ # └───┘└─────────┘└───┘└────────┘
141
+ q = QuantumRegister(2, "q")
142
+ theta = Parameter("theta")
143
+ def_cphase = QuantumCircuit(q)
144
+ def_cphase.p(theta / 2, 0)
145
+ def_cphase.cx(0, 1)
146
+ def_cphase.p(-theta / 2, 1)
147
+ def_cphase.cx(0, 1)
148
+ def_cphase.p(theta / 2, 1)
149
+ _sel.add_equivalence(CPhaseGate(theta), def_cphase)
150
+
151
+ # CPhaseGate
152
+ #
153
+ # q_0: ─■──── q_0: ─■────
154
+ # │P(ϴ) ≡ │U1(ϴ)
155
+ # q_1: ─■──── q_1: ─■────
156
+ q = QuantumRegister(2, "q")
157
+ theta = Parameter("theta")
158
+ cphase_to_cu1 = QuantumCircuit(q)
159
+ cphase_to_cu1.append(CU1Gate(theta), [0, 1])
160
+ _sel.add_equivalence(CPhaseGate(theta), cphase_to_cu1)
161
+
162
+ # RGate
163
+ #
164
+ # ┌────────┐ ┌───────────────────────┐
165
+ # q: ┤ R(ϴ,φ) ├ ≡ q: ┤ U3(ϴ,φ - π/2,π/2 - φ) ├
166
+ # └────────┘ └───────────────────────┘
167
+ q = QuantumRegister(1, "q")
168
+ theta = Parameter("theta")
169
+ phi = Parameter("phi")
170
+ def_r = QuantumCircuit(q)
171
+ def_r.append(U3Gate(theta, phi - pi / 2, -phi + pi / 2), [q[0]])
172
+ _sel.add_equivalence(RGate(theta, phi), def_r)
173
+
174
+ # IGate
175
+ q = QuantumRegister(1, "q")
176
+ def_id = QuantumCircuit(q)
177
+ def_id.append(UGate(0, 0, 0), [q[0]])
178
+ _sel.add_equivalence(IGate(), def_id)
179
+
180
+ q = QuantumRegister(1, "q")
181
+ def_id_rx = QuantumCircuit(q)
182
+ def_id_rx.append(RXGate(0), [q[0]])
183
+ _sel.add_equivalence(IGate(), def_id_rx)
184
+
185
+ q = QuantumRegister(1, "q")
186
+ def_id_ry = QuantumCircuit(q)
187
+ def_id_ry.append(RYGate(0), [q[0]])
188
+ _sel.add_equivalence(IGate(), def_id_ry)
189
+
190
+ q = QuantumRegister(1, "q")
191
+ def_id_rz = QuantumCircuit(q)
192
+ def_id_rz.append(RZGate(0), [q[0]])
193
+ _sel.add_equivalence(IGate(), def_id_rz)
194
+
195
+ # RCCXGate
196
+ #
197
+ # ┌───────┐
198
+ # q_0: ┤0 ├ q_0: ────────────────────────■────────────────────────
199
+ # │ │ │
200
+ # q_1: ┤1 Rccx ├ ≡ q_1: ────────────■───────────┼─────────■──────────────
201
+ # │ │ ┌───┐┌───┐┌─┴─┐┌─────┐┌─┴─┐┌───┐┌─┴─┐┌─────┐┌───┐
202
+ # q_2: ┤2 ├ q_2: ┤ H ├┤ T ├┤ X ├┤ Tdg ├┤ X ├┤ T ├┤ X ├┤ Tdg ├┤ H ├
203
+ # └───────┘ └───┘└───┘└───┘└─────┘└───┘└───┘└───┘└─────┘└───┘
204
+ q = QuantumRegister(3, "q")
205
+ def_rccx = QuantumCircuit(q)
206
+ for inst, qargs, cargs in [
207
+ (HGate(), [q[2]], []),
208
+ (TGate(), [q[2]], []),
209
+ (CXGate(), [q[1], q[2]], []),
210
+ (TdgGate(), [q[2]], []),
211
+ (CXGate(), [q[0], q[2]], []),
212
+ (TGate(), [q[2]], []),
213
+ (CXGate(), [q[1], q[2]], []),
214
+ (TdgGate(), [q[2]], []),
215
+ (HGate(), [q[2]], []),
216
+ ]:
217
+ def_rccx.append(inst, qargs, cargs)
218
+ _sel.add_equivalence(RCCXGate(), def_rccx)
219
+
220
+ # RXGate
221
+ #
222
+ # ┌───────┐ ┌────────┐
223
+ # q: ┤ Rx(ϴ) ├ ≡ q: ┤ R(ϴ,0) ├
224
+ # └───────┘ └────────┘
225
+ q = QuantumRegister(1, "q")
226
+ theta = Parameter("theta")
227
+ def_rx = QuantumCircuit(q)
228
+ def_rx.append(RGate(theta, 0), [q[0]], [])
229
+ _sel.add_equivalence(RXGate(theta), def_rx)
230
+
231
+ # CRXGate
232
+ #
233
+ # q_0: ────■──── q_0: ─────────────■────────────────────■────────────────────
234
+ # ┌───┴───┐ ≡ ┌─────────┐┌─┴─┐┌──────────────┐┌─┴─┐┌────────────────┐
235
+ # q_1: ┤ Rx(ϴ) ├ q_1: ┤ U1(π/2) ├┤ X ├┤ U3(-ϴ/2,0,0) ├┤ X ├┤ U3(ϴ/2,-π/2,0) ├
236
+ # └───────┘ └─────────┘└───┘└──────────────┘└───┘└────────────────┘
237
+ q = QuantumRegister(2, "q")
238
+ theta = Parameter("theta")
239
+ def_crx = QuantumCircuit(q)
240
+ for inst, qargs, cargs in [
241
+ (U1Gate(pi / 2), [q[1]], []),
242
+ (CXGate(), [q[0], q[1]], []),
243
+ (U3Gate(-theta / 2, 0, 0), [q[1]], []),
244
+ (CXGate(), [q[0], q[1]], []),
245
+ (U3Gate(theta / 2, -pi / 2, 0), [q[1]], []),
246
+ ]:
247
+ def_crx.append(inst, qargs, cargs)
248
+ _sel.add_equivalence(CRXGate(theta), def_crx)
249
+
250
+ # CRXGate
251
+ #
252
+ # q_0: ────■──── q_0: ───────■────────────────■────────────────────
253
+ # ┌───┴───┐ ≡ ┌───┐┌─┴─┐┌──────────┐┌─┴─┐┌─────────┐┌─────┐
254
+ # q_1: ┤ Rx(ϴ) ├ q_1: ┤ S ├┤ X ├┤ Ry(-ϴ/2) ├┤ X ├┤ Ry(ϴ/2) ├┤ Sdg ├
255
+ # └───────┘ └───┘└───┘└──────────┘└───┘└─────────┘└─────┘
256
+ q = QuantumRegister(2, "q")
257
+ theta = Parameter("theta")
258
+ crx_to_srycx = QuantumCircuit(q)
259
+ for inst, qargs, cargs in [
260
+ (SGate(), [q[1]], []),
261
+ (CXGate(), [q[0], q[1]], []),
262
+ (RYGate(-theta / 2), [q[1]], []),
263
+ (CXGate(), [q[0], q[1]], []),
264
+ (RYGate(theta / 2), [q[1]], []),
265
+ (SdgGate(), [q[1]], []),
266
+ ]:
267
+ crx_to_srycx.append(inst, qargs, cargs)
268
+ _sel.add_equivalence(CRXGate(theta), crx_to_srycx)
269
+
270
+ # CRX in terms of one RXX
271
+ # ┌───┐ ┌────────────┐┌───┐
272
+ # q_0: ────■──── q_0: ───┤ H ├───┤0 ├┤ H ├
273
+ # ┌───┴───┐ ≡ ┌──┴───┴──┐│ Rxx(-ϴ/2) │└───┘
274
+ # q_1: ┤ Rx(ϴ) ├ q_1: ┤ Rx(ϴ/2) ├┤1 ├─────
275
+ # └───────┘ └─────────┘└────────────┘
276
+ theta = Parameter("theta")
277
+ crx_to_rxx = QuantumCircuit(2)
278
+ crx_to_rxx.h(0)
279
+ crx_to_rxx.rx(theta / 2, 1)
280
+ crx_to_rxx.rxx(-theta / 2, 0, 1)
281
+ crx_to_rxx.h(0)
282
+ _sel.add_equivalence(CRXGate(theta), crx_to_rxx)
283
+
284
+ # CRX to CRZ
285
+ #
286
+ # q_0: ────■──── q_0: ─────────■─────────
287
+ # ┌───┴───┐ ≡ ┌───┐┌───┴───┐┌───┐
288
+ # q_1: ┤ Rx(ϴ) ├ q_1: ┤ H ├┤ Rz(ϴ) ├┤ H ├
289
+ # └───────┘ └───┘└───────┘└───┘
290
+ theta = Parameter("theta")
291
+ crx_to_crz = QuantumCircuit(2)
292
+ crx_to_crz.h(1)
293
+ crx_to_crz.crz(theta, 0, 1)
294
+ crx_to_crz.h(1)
295
+ _sel.add_equivalence(CRXGate(theta), crx_to_crz)
296
+
297
+ # RXXGate
298
+ #
299
+ # ┌─────────┐ ┌───┐ ┌───┐
300
+ # q_0: ┤0 ├ q_0: ┤ H ├──■─────────────■──┤ H ├
301
+ # │ Rxx(ϴ) │ ≡ ├───┤┌─┴─┐┌───────┐┌─┴─┐├───┤
302
+ # q_1: ┤1 ├ q_1: ┤ H ├┤ X ├┤ Rz(ϴ) ├┤ X ├┤ H ├
303
+ # └─────────┘ └───┘└───┘└───────┘└───┘└───┘
304
+ q = QuantumRegister(2, "q")
305
+ theta = Parameter("theta")
306
+ def_rxx = QuantumCircuit(q)
307
+ for inst, qargs, cargs in [
308
+ (HGate(), [q[0]], []),
309
+ (HGate(), [q[1]], []),
310
+ (CXGate(), [q[0], q[1]], []),
311
+ (RZGate(theta), [q[1]], []),
312
+ (CXGate(), [q[0], q[1]], []),
313
+ (HGate(), [q[1]], []),
314
+ (HGate(), [q[0]], []),
315
+ ]:
316
+ def_rxx.append(inst, qargs, cargs)
317
+ _sel.add_equivalence(RXXGate(theta), def_rxx)
318
+
319
+ # RXX to RZX
320
+ # ┌─────────┐ ┌───┐┌─────────┐┌───┐
321
+ # q_0: ┤0 ├ q_0: ┤ H ├┤0 ├┤ H ├
322
+ # │ Rxx(ϴ) │ ≡ └───┘│ Rzx(ϴ) │└───┘
323
+ # q_1: ┤1 ├ q_1: ─────┤1 ├─────
324
+ # └─────────┘ └─────────┘
325
+ theta = Parameter("theta")
326
+ rxx_to_rzx = QuantumCircuit(2)
327
+ rxx_to_rzx.h(0)
328
+ rxx_to_rzx.rzx(theta, 0, 1)
329
+ rxx_to_rzx.h(0)
330
+ _sel.add_equivalence(RXXGate(theta), rxx_to_rzx)
331
+
332
+
333
+ # RXX to RZZ
334
+ q = QuantumRegister(2, "q")
335
+ theta = Parameter("theta")
336
+ rxx_to_rzz = QuantumCircuit(q)
337
+ for inst, qargs, cargs in [
338
+ (HGate(), [q[0]], []),
339
+ (HGate(), [q[1]], []),
340
+ (RZZGate(theta), [q[0], q[1]], []),
341
+ (HGate(), [q[0]], []),
342
+ (HGate(), [q[1]], []),
343
+ ]:
344
+ rxx_to_rzz.append(inst, qargs, cargs)
345
+ _sel.add_equivalence(RXXGate(theta), rxx_to_rzz)
346
+
347
+ # RZXGate
348
+ #
349
+ # ┌─────────┐
350
+ # q_0: ┤0 ├ q_0: ───────■─────────────■───────
351
+ # │ Rzx(ϴ) │ ≡ ┌───┐┌─┴─┐┌───────┐┌─┴─┐┌───┐
352
+ # q_1: ┤1 ├ q_1: ┤ H ├┤ X ├┤ Rz(ϴ) ├┤ X ├┤ H ├
353
+ # └─────────┘ └───┘└───┘└───────┘└───┘└───┘
354
+ q = QuantumRegister(2, "q")
355
+ theta = Parameter("theta")
356
+ def_rzx = QuantumCircuit(q)
357
+ for inst, qargs, cargs in [
358
+ (HGate(), [q[1]], []),
359
+ (CXGate(), [q[0], q[1]], []),
360
+ (RZGate(theta), [q[1]], []),
361
+ (CXGate(), [q[0], q[1]], []),
362
+ (HGate(), [q[1]], []),
363
+ ]:
364
+ def_rzx.append(inst, qargs, cargs)
365
+ _sel.add_equivalence(RZXGate(theta), def_rzx)
366
+
367
+
368
+ # RYGate
369
+ #
370
+ # ┌───────┐ ┌──────────┐
371
+ # q: ┤ Ry(ϴ) ├ ≡ q: ┤ R(ϴ,π/2) ├
372
+ # └───────┘ └──────────┘
373
+ q = QuantumRegister(1, "q")
374
+ theta = Parameter("theta")
375
+ def_ry = QuantumCircuit(q)
376
+ def_ry.append(RGate(theta, pi / 2), [q[0]], [])
377
+ _sel.add_equivalence(RYGate(theta), def_ry)
378
+
379
+ q = QuantumRegister(1, "q")
380
+ ry_to_rx = QuantumCircuit(q)
381
+ ry_to_rx.sdg(0)
382
+ ry_to_rx.rx(theta, 0)
383
+ ry_to_rx.s(0)
384
+ _sel.add_equivalence(RYGate(theta), ry_to_rx)
385
+
386
+ # CRYGate
387
+ #
388
+ # q_0: ────■──── q_0: ─────────────■────────────────■──
389
+ # ┌───┴───┐ ≡ ┌─────────┐┌─┴─┐┌──────────┐┌─┴─┐
390
+ # q_1: ┤ Ry(ϴ) ├ q_1: ┤ Ry(ϴ/2) ├┤ X ├┤ Ry(-ϴ/2) ├┤ X ├
391
+ # └───────┘ └─────────┘└───┘└──────────┘└───┘
392
+ q = QuantumRegister(2, "q")
393
+ theta = Parameter("theta")
394
+ def_cry = QuantumCircuit(q)
395
+ for inst, qargs, cargs in [
396
+ (RYGate(theta / 2), [q[1]], []),
397
+ (CXGate(), [q[0], q[1]], []),
398
+ (RYGate(-theta / 2), [q[1]], []),
399
+ (CXGate(), [q[0], q[1]], []),
400
+ ]:
401
+ def_cry.append(inst, qargs, cargs)
402
+ _sel.add_equivalence(CRYGate(theta), def_cry)
403
+
404
+ # CRY to CRZ
405
+ #
406
+ # q_0: ────■──── q_0: ───────────────■────────────────
407
+ # ┌───┴───┐ ≡ ┌─────────┐┌───┴───┐┌──────────┐
408
+ # q_1: ┤ Ry(ϴ) ├ q_1: ┤ Rx(π/2) ├┤ Rz(ϴ) ├┤ Rx(-π/2) ├
409
+ # └───────┘ └─────────┘└───────┘└──────────┘
410
+ theta = Parameter("theta")
411
+ cry_to_crz = QuantumCircuit(2)
412
+ cry_to_crz.rx(pi / 2, 1)
413
+ cry_to_crz.crz(theta, 0, 1)
414
+ cry_to_crz.rx(-pi / 2, 1)
415
+ _sel.add_equivalence(CRYGate(theta), cry_to_crz)
416
+
417
+ # CRY to CRZ
418
+ #
419
+ # q_0: ────■──── q_0: ────────────────────■─────────────────────
420
+ # ┌───┴───┐ ≡ ┌───┐┌─────────┐┌───┴───┐┌──────────┐┌───┐
421
+ # q_1: ┤ Ry(ϴ) ├ q_1: ┤ H ├┤ Rz(π/2) ├┤ Rx(ϴ) ├┤ Rz(-π/2) ├┤ H ├
422
+ # └───────┘ └───┘└─────────┘└───────┘└──────────┘└───┘
423
+ theta = Parameter("theta")
424
+ cry_to_crx = QuantumCircuit(2)
425
+ cry_to_crx.h(1)
426
+ cry_to_crx.rz(pi / 2, 1)
427
+ cry_to_crx.crx(theta, 0, 1)
428
+ cry_to_crx.rz(-pi / 2, 1)
429
+ cry_to_crx.h(1)
430
+ _sel.add_equivalence(CRYGate(theta), cry_to_crx)
431
+
432
+ # CRY to RZZ
433
+ #
434
+ # q_0: ────■──── q_0: ────────────────────────■───────────────────
435
+ # ┌───┴───┐ ≡ ┌─────┐┌─────────┐┌───┐ │ZZ(-ϴ/2) ┌───┐┌───┐
436
+ # q_1: ┤ Ry(ϴ) ├ q_1: ┤ Sdg ├┤ Rx(ϴ/2) ├┤ H ├─■─────────┤ H ├┤ S ├
437
+ # └───────┘ └─────┘└─────────┘└───┘ └───┘└───┘
438
+ cry_to_rzz = QuantumCircuit(2)
439
+ cry_to_rzz.sdg(1)
440
+ cry_to_rzz.rx(theta / 2, 1)
441
+ cry_to_rzz.h(1)
442
+ cry_to_rzz.rzz(-theta / 2, 0, 1)
443
+ cry_to_rzz.h(1)
444
+ cry_to_rzz.s(1)
445
+ _sel.add_equivalence(CRYGate(theta), cry_to_rzz)
446
+
447
+ # RYYGate
448
+ #
449
+ # ┌─────────┐ ┌─────────┐ ┌──────────┐
450
+ # q_0: ┤0 ├ q_0: ┤ Rx(π/2) ├──■─────────────■──┤ Rx(-π/2) ├
451
+ # │ Ryy(ϴ) │ ≡ ├─────────┤┌─┴─┐┌───────┐┌─┴─┐├──────────┤
452
+ # q_1: ┤1 ├ q_1: ┤ Rx(π/2) ├┤ X ├┤ Rz(ϴ) ├┤ X ├┤ Rx(-π/2) ├
453
+ # └─────────┘ └─────────┘└───┘└───────┘└───┘└──────────┘
454
+ q = QuantumRegister(2, "q")
455
+ theta = Parameter("theta")
456
+ def_ryy = QuantumCircuit(q)
457
+ for inst, qargs, cargs in [
458
+ (RXGate(pi / 2), [q[0]], []),
459
+ (RXGate(pi / 2), [q[1]], []),
460
+ (CXGate(), [q[0], q[1]], []),
461
+ (RZGate(theta), [q[1]], []),
462
+ (CXGate(), [q[0], q[1]], []),
463
+ (RXGate(-pi / 2), [q[0]], []),
464
+ (RXGate(-pi / 2), [q[1]], []),
465
+ ]:
466
+ def_ryy.append(inst, qargs, cargs)
467
+ _sel.add_equivalence(RYYGate(theta), def_ryy)
468
+
469
+ # RYY to RZZ
470
+ q = QuantumRegister(2, "q")
471
+ theta = Parameter("theta")
472
+ ryy_to_rzz = QuantumCircuit(q)
473
+ for inst, qargs, cargs in [
474
+ (RXGate(pi / 2), [q[0]], []),
475
+ (RXGate(pi / 2), [q[1]], []),
476
+ (RZZGate(theta), [q[0], q[1]], []),
477
+ (RXGate(-pi / 2), [q[0]], []),
478
+ (RXGate(-pi / 2), [q[1]], []),
479
+ ]:
480
+ ryy_to_rzz.append(inst, qargs, cargs)
481
+ _sel.add_equivalence(RYYGate(theta), ryy_to_rzz)
482
+
483
+ # RYY to RXX
484
+ q = QuantumRegister(2, "q")
485
+ theta = Parameter("theta")
486
+ ryy_to_rxx = QuantumCircuit(q)
487
+ for inst, qargs, cargs in [
488
+ (SdgGate(), [q[0]], []),
489
+ (SdgGate(), [q[1]], []),
490
+ (RXXGate(theta), [q[0], q[1]], []),
491
+ (SGate(), [q[0]], []),
492
+ (SGate(), [q[1]], []),
493
+ ]:
494
+ ryy_to_rxx.append(inst, qargs, cargs)
495
+ _sel.add_equivalence(RYYGate(theta), ryy_to_rxx)
496
+
497
+ # RZGate
498
+ # global phase: -ϴ/2
499
+ # ┌───────┐ ┌───────┐
500
+ # q: ┤ Rz(ϴ) ├ ≡ q: ┤ U1(ϴ) ├
501
+ # └───────┘ └───────┘
502
+ q = QuantumRegister(1, "q")
503
+ theta = Parameter("theta")
504
+ def_rz = QuantumCircuit(q, global_phase=-theta / 2)
505
+ def_rz.append(U1Gate(theta), [q[0]], [])
506
+ _sel.add_equivalence(RZGate(theta), def_rz)
507
+
508
+ # RZGate
509
+ #
510
+ # ┌───────┐ ┌────┐┌────────┐┌──────┐
511
+ # q: ┤ Rz(ϴ) ├ ≡ q: ┤ √X ├┤ Ry(-ϴ) ├┤ √Xdg ├
512
+ # └───────┘ └────┘└────────┘└──────┘
513
+ q = QuantumRegister(1, "q")
514
+ rz_to_sxry = QuantumCircuit(q)
515
+ rz_to_sxry.sx(0)
516
+ rz_to_sxry.ry(-theta, 0)
517
+ rz_to_sxry.sxdg(0)
518
+ _sel.add_equivalence(RZGate(theta), rz_to_sxry)
519
+
520
+ q = QuantumRegister(1, "q")
521
+ rz_to_rx = QuantumCircuit(q)
522
+ rz_to_rx.h(0)
523
+ rz_to_rx.rx(theta, 0)
524
+ rz_to_rx.h(0)
525
+ _sel.add_equivalence(RZGate(theta), rz_to_rx)
526
+
527
+ # CRZGate
528
+ #
529
+ # q_0: ────■──── q_0: ─────────────■────────────────■──
530
+ # ┌───┴───┐ ≡ ┌─────────┐┌─┴─┐┌──────────┐┌─┴─┐
531
+ # q_1: ┤ Rz(ϴ) ├ q_1: ┤ Rz(ϴ/2) ├┤ X ├┤ Rz(-ϴ/2) ├┤ X ├
532
+ # └───────┘ └─────────┘└───┘└──────────┘└───┘
533
+ q = QuantumRegister(2, "q")
534
+ theta = Parameter("theta")
535
+ def_crz = QuantumCircuit(q)
536
+ for inst, qargs, cargs in [
537
+ (RZGate(theta / 2), [q[1]], []),
538
+ (CXGate(), [q[0], q[1]], []),
539
+ (RZGate(-theta / 2), [q[1]], []),
540
+ (CXGate(), [q[0], q[1]], []),
541
+ ]:
542
+ def_crz.append(inst, qargs, cargs)
543
+ _sel.add_equivalence(CRZGate(theta), def_crz)
544
+
545
+ # CRZ to CRY
546
+ #
547
+ # q_0: ────■──── q_0: ────────────────■───────────────
548
+ # ┌───┴───┐ ≡ ┌──────────┐┌───┴───┐┌─────────┐
549
+ # q_1: ┤ Rz(ϴ) ├ q_1: ┤ Rx(-π/2) ├┤ Ry(ϴ) ├┤ Rx(π/2) ├
550
+ # └───────┘ └──────────┘└───────┘└─────────┘
551
+ theta = Parameter("theta")
552
+ crz_to_cry = QuantumCircuit(2)
553
+ crz_to_cry.rx(-pi / 2, 1)
554
+ crz_to_cry.cry(theta, 0, 1)
555
+ crz_to_cry.rx(pi / 2, 1)
556
+ _sel.add_equivalence(CRZGate(theta), crz_to_cry)
557
+
558
+ # CRZ to CRX
559
+ #
560
+ # q_0: ────■──── q_0: ─────────■─────────
561
+ # ┌───┴───┐ ≡ ┌───┐┌───┴───┐┌───┐
562
+ # q_1: ┤ Rz(ϴ) ├ q_1: ┤ H ├┤ Rx(ϴ) ├┤ H ├
563
+ # └───────┘ └───┘└───────┘└───┘
564
+ theta = Parameter("theta")
565
+ crz_to_crx = QuantumCircuit(2)
566
+ crz_to_crx.h(1)
567
+ crz_to_crx.crx(theta, 0, 1)
568
+ crz_to_crx.h(1)
569
+ _sel.add_equivalence(CRZGate(theta), crz_to_crx)
570
+
571
+ # CRZ to RZZ
572
+ #
573
+ # q_0: ────■──── q_0: ────────────■────────
574
+ # ┌───┴───┐ ≡ ┌─────────┐ │ZZ(-ϴ/2)
575
+ # q_1: ┤ Rz(ϴ) ├ q_1: ┤ Rz(ϴ/2) ├─■────────
576
+ # └───────┘ └─────────┘
577
+ theta = Parameter("theta")
578
+ crz_to_rzz = QuantumCircuit(2)
579
+ crz_to_rzz.rz(theta / 2, 1)
580
+ crz_to_rzz.rzz(-theta / 2, 0, 1)
581
+ _sel.add_equivalence(CRZGate(theta), crz_to_rzz)
582
+
583
+ # RZZGate
584
+ #
585
+ # q_0: ─■───── q_0: ──■─────────────■──
586
+ # │ZZ(ϴ) ≡ ┌─┴─┐┌───────┐┌─┴─┐
587
+ # q_1: ─■───── q_1: ┤ X ├┤ Rz(ϴ) ├┤ X ├
588
+ # └───┘└───────┘└───┘
589
+ q = QuantumRegister(2, "q")
590
+ theta = Parameter("theta")
591
+ def_rzz = QuantumCircuit(q)
592
+ for inst, qargs, cargs in [
593
+ (CXGate(), [q[0], q[1]], []),
594
+ (RZGate(theta), [q[1]], []),
595
+ (CXGate(), [q[0], q[1]], []),
596
+ ]:
597
+ def_rzz.append(inst, qargs, cargs)
598
+ _sel.add_equivalence(RZZGate(theta), def_rzz)
599
+
600
+ # RZZ to RXX
601
+ q = QuantumRegister(2, "q")
602
+ theta = Parameter("theta")
603
+ rzz_to_rxx = QuantumCircuit(q)
604
+ for inst, qargs, cargs in [
605
+ (HGate(), [q[0]], []),
606
+ (HGate(), [q[1]], []),
607
+ (RXXGate(theta), [q[0], q[1]], []),
608
+ (HGate(), [q[0]], []),
609
+ (HGate(), [q[1]], []),
610
+ ]:
611
+ rzz_to_rxx.append(inst, qargs, cargs)
612
+ _sel.add_equivalence(RZZGate(theta), rzz_to_rxx)
613
+
614
+ # RZZ to RZX
615
+ # ┌─────────┐
616
+ # q_0: ─■───── q_0: ─────┤0 ├─────
617
+ # │ZZ(ϴ) ≡ ┌───┐│ Rzx(ϴ) │┌───┐
618
+ # q_1: ─■───── q_1: ┤ H ├┤1 ├┤ H ├
619
+ # └───┘└─────────┘└───┘
620
+ theta = Parameter("theta")
621
+ rzz_to_rzx = QuantumCircuit(2)
622
+ rzz_to_rzx.h(1)
623
+ rzz_to_rzx.rzx(theta, 0, 1)
624
+ rzz_to_rzx.h(1)
625
+ _sel.add_equivalence(RZZGate(theta), rzz_to_rzx)
626
+
627
+ # RZZ to RYY
628
+ q = QuantumRegister(2, "q")
629
+ theta = Parameter("theta")
630
+ rzz_to_ryy = QuantumCircuit(q)
631
+ for inst, qargs, cargs in [
632
+ (RXGate(-pi / 2), [q[0]], []),
633
+ (RXGate(-pi / 2), [q[1]], []),
634
+ (RYYGate(theta), [q[0], q[1]], []),
635
+ (RXGate(pi / 2), [q[0]], []),
636
+ (RXGate(pi / 2), [q[1]], []),
637
+ ]:
638
+ rzz_to_ryy.append(inst, qargs, cargs)
639
+ _sel.add_equivalence(RZZGate(theta), rzz_to_ryy)
640
+
641
+ # RZXGate
642
+ #
643
+ # ┌─────────┐
644
+ # q_0: ┤0 ├ q_0: ───────■─────────────■───────
645
+ # │ Rzx(ϴ) │ ≡ ┌───┐┌─┴─┐┌───────┐┌─┴─┐┌───┐
646
+ # q_1: ┤1 ├ q_1: ┤ H ├┤ X ├┤ Rz(ϴ) ├┤ X ├┤ H ├
647
+ # └─────────┘ └───┘└───┘└───────┘└───┘└───┘
648
+ q = QuantumRegister(2, "q")
649
+ theta = Parameter("theta")
650
+ def_rzx = QuantumCircuit(q)
651
+ for inst, qargs, cargs in [
652
+ (HGate(), [q[1]], []),
653
+ (CXGate(), [q[0], q[1]], []),
654
+ (RZGate(theta), [q[1]], []),
655
+ (CXGate(), [q[0], q[1]], []),
656
+ (HGate(), [q[1]], []),
657
+ ]:
658
+ def_rzx.append(inst, qargs, cargs)
659
+ _sel.add_equivalence(RZXGate(theta), def_rzx)
660
+
661
+ # ECRGate
662
+ #
663
+ # ┌──────┐ ┌───────────┐┌───┐┌────────────┐
664
+ # q_0: ┤0 ├ q_0: ┤0 ├┤ X ├┤0 ├
665
+ # │ Ecr │ ≡ │ Rzx(π/4) │└───┘│ Rzx(-π/4) │
666
+ # q_1: ┤1 ├ q_1: ┤1 ├─────┤1 ├
667
+ # └──────┘ └───────────┘ └────────────┘
668
+ q = QuantumRegister(2, "q")
669
+ def_ecr = QuantumCircuit(q)
670
+ for inst, qargs, cargs in [
671
+ (RZXGate(pi / 4), [q[0], q[1]], []),
672
+ (XGate(), [q[0]], []),
673
+ (RZXGate(-pi / 4), [q[0], q[1]], []),
674
+ ]:
675
+ def_ecr.append(inst, qargs, cargs)
676
+ _sel.add_equivalence(ECRGate(), def_ecr)
677
+
678
+ # ECRGate decomposed to Clifford gates (up to a global phase)
679
+ #
680
+ # global phase: 7π/4
681
+ # ┌──────┐ ┌───┐ ┌───┐
682
+ # q_0: ┤0 ├ q_0: ┤ S ├───■──┤ X ├
683
+ # │ Ecr │ ≡ ├───┴┐┌─┴─┐└───┘
684
+ # q_1: ┤1 ├ q_1: ┤ √X ├┤ X ├─────
685
+ # └──────┘ └────┘└───┘
686
+
687
+ q = QuantumRegister(2, "q")
688
+ def_ecr_cliff = QuantumCircuit(q, global_phase=-pi / 4)
689
+ for inst, qargs, cargs in [
690
+ (SGate(), [q[0]], []),
691
+ (SXGate(), [q[1]], []),
692
+ (CXGate(), [q[0], q[1]], []),
693
+ (XGate(), [q[0]], []),
694
+ ]:
695
+ def_ecr_cliff.append(inst, qargs, cargs)
696
+ _sel.add_equivalence(ECRGate(), def_ecr_cliff)
697
+
698
+ # CXGate decomposed using an ECRGate and Clifford 1-qubit gates
699
+ # global phase: π/4
700
+ # q_0: ──■── ┌─────┐ ┌──────┐┌───┐
701
+ # ┌─┴─┐ ≡ q_0: ┤ Sdg ├─┤0 ├┤ X ├
702
+ # q_1: ┤ X ├ ├─────┴┐│ Ecr │└───┘
703
+ # └───┘ q_1: ┤ √Xdg ├┤1 ├─────
704
+ # └──────┘└──────┘
705
+
706
+ q = QuantumRegister(2, "q")
707
+ def_ecr_to_cx_cliff = QuantumCircuit(q, global_phase=pi / 4)
708
+ for inst, qargs, cargs in [
709
+ (SdgGate(), [q[0]], []),
710
+ (SXdgGate(), [q[1]], []),
711
+ (ECRGate(), [q[0], q[1]], []),
712
+ (XGate(), [q[0]], []),
713
+ ]:
714
+ def_ecr_to_cx_cliff.append(inst, qargs, cargs)
715
+ _sel.add_equivalence(CXGate(), def_ecr_to_cx_cliff)
716
+
717
+ # SGate
718
+ #
719
+ # ┌───┐ ┌─────────┐
720
+ # q: ┤ S ├ ≡ q: ┤ U1(π/2) ├
721
+ # └───┘ └─────────┘
722
+ q = QuantumRegister(1, "q")
723
+ def_s = QuantumCircuit(q)
724
+ def_s.append(U1Gate(pi / 2), [q[0]], [])
725
+ _sel.add_equivalence(SGate(), def_s)
726
+
727
+ # SdgGate
728
+ #
729
+ # ┌─────┐ ┌──────────┐
730
+ # q: ┤ Sdg ├ ≡ q: ┤ U1(-π/2) ├
731
+ # └─────┘ └──────────┘
732
+ q = QuantumRegister(1, "q")
733
+ def_sdg = QuantumCircuit(q)
734
+ def_sdg.append(U1Gate(-pi / 2), [q[0]], [])
735
+ _sel.add_equivalence(SdgGate(), def_sdg)
736
+
737
+ # CSGate
738
+ #
739
+ # q_0: ──■── q_0: ───────■────────
740
+ # ┌─┴─┐ ┌───┐┌─┴──┐┌───┐
741
+ # q_1: ┤ S ├ = q_1: ┤ H ├┤ Sx ├┤ H ├
742
+ # └───┘ └───┘└────┘└───┘
743
+ q = QuantumRegister(2, "q")
744
+ def_cs = QuantumCircuit(q)
745
+ def_cs.append(HGate(), [q[1]], [])
746
+ def_cs.append(CSXGate(), [q[0], q[1]], [])
747
+ def_cs.append(HGate(), [q[1]], [])
748
+ _sel.add_equivalence(CSGate(), def_cs)
749
+
750
+ # CSdgGate
751
+ #
752
+ # q_0: ───■─── q_0: ───────■────■────────
753
+ # ┌──┴──┐ ┌───┐┌─┴─┐┌─┴──┐┌───┐
754
+ # q_1: ┤ Sdg ├ = q_1: ┤ H ├┤ X ├┤ Sx ├┤ H ├
755
+ # └─────┘ └───┘└───┘└────┘└───┘
756
+ q = QuantumRegister(2, "q")
757
+ def_csdg = QuantumCircuit(q)
758
+ def_csdg.append(HGate(), [q[1]], [])
759
+ def_csdg.append(CXGate(), [q[0], q[1]], [])
760
+ def_csdg.append(CSXGate(), [q[0], q[1]], [])
761
+ def_csdg.append(HGate(), [q[1]], [])
762
+ _sel.add_equivalence(CSdgGate(), def_csdg)
763
+
764
+ # SdgGate
765
+ #
766
+ # ┌─────┐ ┌───┐┌───┐
767
+ # q: ┤ Sdg ├ ≡ q: ┤ S ├┤ Z ├
768
+ # └─────┘ └───┘└───┘
769
+ q = QuantumRegister(1, "q")
770
+ def_sdg = QuantumCircuit(q)
771
+ for inst, qargs, cargs in [
772
+ (SGate(), [q[0]], []),
773
+ (ZGate(), [q[0]], []),
774
+ ]:
775
+ def_sdg.append(inst, qargs, cargs)
776
+ _sel.add_equivalence(SdgGate(), def_sdg)
777
+
778
+ # SdgGate
779
+ #
780
+ # ┌─────┐ ┌───┐┌───┐
781
+ # q: ┤ Sdg ├ ≡ q: ┤ Z ├┤ S ├
782
+ # └─────┘ └───┘└───┘
783
+ q = QuantumRegister(1, "q")
784
+ def_sdg = QuantumCircuit(q)
785
+ for inst, qargs, cargs in [
786
+ (ZGate(), [q[0]], []),
787
+ (SGate(), [q[0]], []),
788
+ ]:
789
+ def_sdg.append(inst, qargs, cargs)
790
+ _sel.add_equivalence(SdgGate(), def_sdg)
791
+
792
+ # SdgGate
793
+ #
794
+ # ┌─────┐ ┌───┐┌───┐┌───┐
795
+ # q: ┤ Sdg ├ ≡ q: ┤ S ├┤ S ├┤ S ├
796
+ # └─────┘ └───┘└───┘└───┘
797
+ q = QuantumRegister(1, "q")
798
+ def_sdg = QuantumCircuit(q)
799
+ for inst, qargs, cargs in [
800
+ (SGate(), [q[0]], []),
801
+ (SGate(), [q[0]], []),
802
+ (SGate(), [q[0]], []),
803
+ ]:
804
+ def_sdg.append(inst, qargs, cargs)
805
+ _sel.add_equivalence(SdgGate(), def_sdg)
806
+
807
+ # SwapGate
808
+ # ┌───┐
809
+ # q_0: ─X─ q_0: ──■──┤ X ├──■──
810
+ # │ ≡ ┌─┴─┐└─┬─┘┌─┴─┐
811
+ # q_1: ─X─ q_1: ┤ X ├──■──┤ X ├
812
+ # └───┘ └───┘
813
+ q = QuantumRegister(2, "q")
814
+ def_swap = QuantumCircuit(q)
815
+ for inst, qargs, cargs in [
816
+ (CXGate(), [q[0], q[1]], []),
817
+ (CXGate(), [q[1], q[0]], []),
818
+ (CXGate(), [q[0], q[1]], []),
819
+ ]:
820
+ def_swap.append(inst, qargs, cargs)
821
+ _sel.add_equivalence(SwapGate(), def_swap)
822
+
823
+ # iSwapGate
824
+ #
825
+ # ┌────────┐ ┌───┐┌───┐ ┌───┐
826
+ # q_0: ┤0 ├ q_0: ┤ S ├┤ H ├──■──┤ X ├─────
827
+ # │ Iswap │ ≡ ├───┤└───┘┌─┴─┐└─┬─┘┌───┐
828
+ # q_1: ┤1 ├ q_1: ┤ S ├─────┤ X ├──■──┤ H ├
829
+ # └────────┘ └───┘ └───┘ └───┘
830
+ q = QuantumRegister(2, "q")
831
+ def_iswap = QuantumCircuit(q)
832
+ for inst, qargs, cargs in [
833
+ (SGate(), [q[0]], []),
834
+ (SGate(), [q[1]], []),
835
+ (HGate(), [q[0]], []),
836
+ (CXGate(), [q[0], q[1]], []),
837
+ (CXGate(), [q[1], q[0]], []),
838
+ (HGate(), [q[1]], []),
839
+ ]:
840
+ def_iswap.append(inst, qargs, cargs)
841
+ _sel.add_equivalence(iSwapGate(), def_iswap)
842
+
843
+ # SXGate
844
+ # global phase: π/4
845
+ # ┌────┐ ┌─────┐┌───┐┌─────┐
846
+ # q: ┤ √X ├ ≡ q: ┤ Sdg ├┤ H ├┤ Sdg ├
847
+ # └────┘ └─────┘└───┘└─────┘
848
+ q = QuantumRegister(1, "q")
849
+ def_sx = QuantumCircuit(q, global_phase=pi / 4)
850
+ for inst, qargs, cargs in [(SdgGate(), [q[0]], []), (HGate(), [q[0]], []), (SdgGate(), [q[0]], [])]:
851
+ def_sx.append(inst, qargs, cargs)
852
+ _sel.add_equivalence(SXGate(), def_sx)
853
+
854
+ # HGate decomposed into SXGate and SGate
855
+ # global phase: -π/4
856
+ # ┌───┐ ┌───┐┌────┐┌───┐
857
+ # q: ┤ H ├ ≡ q: ┤ S ├┤ √X ├┤ S ├
858
+ # └───┘ └───┘└────┘└───┘
859
+ q = QuantumRegister(1, "q")
860
+ def_h_to_sx = QuantumCircuit(q, global_phase=-pi / 4)
861
+ for inst, qargs, cargs in [(SGate(), [q[0]], []), (SXGate(), [q[0]], []), (SGate(), [q[0]], [])]:
862
+ def_h_to_sx.append(inst, qargs, cargs)
863
+ _sel.add_equivalence(HGate(), def_h_to_sx)
864
+
865
+ # SXGate
866
+ # global phase: π/4
867
+ # ┌────┐ ┌─────────┐
868
+ # q: ┤ √X ├ ≡ q: ┤ Rx(π/2) ├
869
+ # └────┘ └─────────┘
870
+ q = QuantumRegister(1, "q")
871
+ sx_to_rx = QuantumCircuit(q, global_phase=pi / 4)
872
+ sx_to_rx.rx(pi / 2, 0)
873
+ _sel.add_equivalence(SXGate(), sx_to_rx)
874
+
875
+ # SXdgGate
876
+ # global phase: 7π/4
877
+ # ┌──────┐ ┌───┐┌───┐┌───┐
878
+ # q: ┤ √Xdg ├ ≡ q: ┤ S ├┤ H ├┤ S ├
879
+ # └──────┘ └───┘└───┘└───┘
880
+ q = QuantumRegister(1, "q")
881
+ def_sxdg = QuantumCircuit(q, global_phase=-pi / 4)
882
+ for inst, qargs, cargs in [(SGate(), [q[0]], []), (HGate(), [q[0]], []), (SGate(), [q[0]], [])]:
883
+ def_sxdg.append(inst, qargs, cargs)
884
+ _sel.add_equivalence(SXdgGate(), def_sxdg)
885
+
886
+ # HGate decomposed into SXdgGate and SdgGate
887
+ # global phase: π/4
888
+ # ┌───┐ ┌─────┐┌──────┐┌─────┐
889
+ # q: ┤ H ├ ≡ q: ┤ Sdg ├┤ √Xdg ├┤ Sdg ├
890
+ # └───┘ └─────┘└──────┘└─────┘
891
+ q = QuantumRegister(1, "q")
892
+ def_h_to_sxdg = QuantumCircuit(q, global_phase=pi / 4)
893
+ for inst, qargs, cargs in [
894
+ (SdgGate(), [q[0]], []),
895
+ (SXdgGate(), [q[0]], []),
896
+ (SdgGate(), [q[0]], []),
897
+ ]:
898
+ def_h_to_sxdg.append(inst, qargs, cargs)
899
+ _sel.add_equivalence(HGate(), def_h_to_sxdg)
900
+
901
+ # SXdgGate
902
+ # global phase: 7π/4
903
+ # ┌──────┐ ┌──────────┐
904
+ # q: ┤ √Xdg ├ ≡ q: ┤ Rx(-π/2) ├
905
+ # └──────┘ └──────────┘
906
+ q = QuantumRegister(1, "q")
907
+ sxdg_to_rx = QuantumCircuit(q, global_phase=-pi / 4)
908
+ sxdg_to_rx.rx(-pi / 2, 0)
909
+ _sel.add_equivalence(SXdgGate(), sxdg_to_rx)
910
+
911
+ # CSXGate
912
+ #
913
+ # q_0: ──■─── q_0: ──────■─────────────
914
+ # ┌─┴──┐ ≡ ┌───┐ │U1(π/2) ┌───┐
915
+ # q_1: ┤ Sx ├ q_1: ┤ H ├─■────────┤ H ├
916
+ # └────┘ └───┘ └───┘
917
+ q = QuantumRegister(2, "q")
918
+ def_csx = QuantumCircuit(q)
919
+ for inst, qargs, cargs in [
920
+ (HGate(), [q[1]], []),
921
+ (CU1Gate(pi / 2), [q[0], q[1]], []),
922
+ (HGate(), [q[1]], []),
923
+ ]:
924
+ def_csx.append(inst, qargs, cargs)
925
+ _sel.add_equivalence(CSXGate(), def_csx)
926
+
927
+ # CSXGate
928
+ # global phase: π/8
929
+ # ┌───┐┌───────────┐ ┌─────┐ ┌───┐
930
+ # q_0: ──■─── q_0: ┤ X ├┤0 ├─┤ Tdg ├──┤ X ├
931
+ # ┌─┴──┐ ≡ └───┘│ Rzx(π/4) │┌┴─────┴─┐└───┘
932
+ # q_1: ┤ Sx ├ q_1: ─────┤1 ├┤ sx^0.5 ├─────
933
+ # └────┘ └───────────┘└────────┘
934
+ q = QuantumRegister(2, "q")
935
+ csx_to_zx45 = QuantumCircuit(q, global_phase=pi / 4)
936
+ for inst, qargs, cargs in [
937
+ (XGate(), [q[0]], []),
938
+ (RZXGate(pi / 4), [q[0], q[1]], []),
939
+ (TdgGate(), [q[0]], []),
940
+ (XGate(), [q[0]], []),
941
+ (RXGate(pi / 4), [q[1]], []),
942
+ ]:
943
+ csx_to_zx45.append(inst, qargs, cargs)
944
+ _sel.add_equivalence(CSXGate(), csx_to_zx45)
945
+
946
+
947
+ # DCXGate
948
+ #
949
+ # ┌──────┐ ┌───┐
950
+ # q_0: ┤0 ├ q_0: ──■──┤ X ├
951
+ # │ Dcx │ ≡ ┌─┴─┐└─┬─┘
952
+ # q_1: ┤1 ├ q_1: ┤ X ├──■──
953
+ # └──────┘ └───┘
954
+ q = QuantumRegister(2, "q")
955
+ def_dcx = QuantumCircuit(q)
956
+ for inst, qargs, cargs in [(CXGate(), [q[0], q[1]], []), (CXGate(), [q[1], q[0]], [])]:
957
+ def_dcx.append(inst, qargs, cargs)
958
+ _sel.add_equivalence(DCXGate(), def_dcx)
959
+
960
+ # DCXGate
961
+ #
962
+ # ┌──────┐ ┌───┐ ┌─────┐┌────────┐
963
+ # q_0: ┤0 ├ q_0: ─┤ H ├─┤ Sdg ├┤0 ├─────
964
+ # │ Dcx │ ≡ ┌┴───┴┐└─────┘│ Iswap │┌───┐
965
+ # q_1: ┤1 ├ q_1: ┤ Sdg ├───────┤1 ├┤ H ├
966
+ # └──────┘ └─────┘ └────────┘└───┘
967
+ q = QuantumRegister(2, "q")
968
+ dcx_to_iswap = QuantumCircuit(q)
969
+ for inst, qargs, cargs in [
970
+ (HGate(), [q[0]], []),
971
+ (SdgGate(), [q[0]], []),
972
+ (SdgGate(), [q[1]], []),
973
+ (iSwapGate(), [q[0], q[1]], []),
974
+ (HGate(), [q[1]], []),
975
+ ]:
976
+ dcx_to_iswap.append(inst, qargs, cargs)
977
+ _sel.add_equivalence(DCXGate(), dcx_to_iswap)
978
+
979
+ # CSwapGate
980
+ #
981
+ # q_0: ─■─ q_0: ───────■───────
982
+ # │ ┌───┐ │ ┌───┐
983
+ # q_1: ─X─ ≡ q_1: ┤ X ├──■──┤ X ├
984
+ # │ └─┬─┘┌─┴─┐└─┬─┘
985
+ # q_2: ─X─ q_2: ──■──┤ X ├──■──
986
+ # └───┘
987
+ q = QuantumRegister(3, "q")
988
+ def_cswap = QuantumCircuit(q)
989
+ for inst, qargs, cargs in [
990
+ (CXGate(), [q[2], q[1]], []),
991
+ (CCXGate(), [q[0], q[1], q[2]], []),
992
+ (CXGate(), [q[2], q[1]], []),
993
+ ]:
994
+ def_cswap.append(inst, qargs, cargs)
995
+ _sel.add_equivalence(CSwapGate(), def_cswap)
996
+
997
+ # TGate
998
+ #
999
+ # ┌───┐ ┌─────────┐
1000
+ # q: ┤ T ├ ≡ q: ┤ U1(π/4) ├
1001
+ # └───┘ └─────────┘
1002
+ q = QuantumRegister(1, "q")
1003
+ def_t = QuantumCircuit(q)
1004
+ def_t.append(U1Gate(pi / 4), [q[0]], [])
1005
+ _sel.add_equivalence(TGate(), def_t)
1006
+
1007
+ # TdgGate
1008
+ #
1009
+ # ┌─────┐ ┌──────────┐
1010
+ # q: ┤ Tdg ├ ≡ q: ┤ U1(-π/4) ├
1011
+ # └─────┘ └──────────┘
1012
+ q = QuantumRegister(1, "q")
1013
+ def_tdg = QuantumCircuit(q)
1014
+ def_tdg.append(U1Gate(-pi / 4), [q[0]], [])
1015
+ _sel.add_equivalence(TdgGate(), def_tdg)
1016
+
1017
+ # UGate
1018
+ #
1019
+ # ┌──────────┐ ┌───────────┐
1020
+ # q: ┤ U(θ,ϕ,λ) ├ ≡ q: ┤ U3(θ,ϕ,λ) ├
1021
+ # └──────────┘ └───────────┘
1022
+ q = QuantumRegister(1, "q")
1023
+ theta = Parameter("theta")
1024
+ phi = Parameter("phi")
1025
+ lam = Parameter("lam")
1026
+ u_to_u3 = QuantumCircuit(q)
1027
+ u_to_u3.append(U3Gate(theta, phi, lam), [0])
1028
+ _sel.add_equivalence(UGate(theta, phi, lam), u_to_u3)
1029
+
1030
+ # CUGate
1031
+ # ┌──────┐ ┌──────────────┐ »
1032
+ # q_0: ──────■─────── q_0: ────┤ P(γ) ├────┤ P(λ/2 + ϕ/2) ├──■──»
1033
+ # ┌─────┴──────┐ ≡ ┌───┴──────┴───┐└──────────────┘┌─┴─┐»
1034
+ # q_1: ┤ U(θ,ϕ,λ,γ) ├ q_1: ┤ P(λ/2 - ϕ/2) ├────────────────┤ X ├»
1035
+ # └────────────┘ └──────────────┘ └───┘»
1036
+ # «
1037
+ # «q_0: ──────────────────────────■────────────────
1038
+ # « ┌──────────────────────┐┌─┴─┐┌────────────┐
1039
+ # «q_1: ┤ U(-θ/2,ϕ,-λ/2 - ϕ/2) ├┤ X ├┤ U(θ/2,ϕ,0) ├
1040
+ # « └──────────────────────┘└───┘└────────────┘
1041
+ q = QuantumRegister(2, "q")
1042
+ theta = Parameter("theta")
1043
+ phi = Parameter("phi")
1044
+ lam = Parameter("lam")
1045
+ gamma = Parameter("gamma")
1046
+ def_cu = QuantumCircuit(q)
1047
+ def_cu.p(gamma, 0)
1048
+ def_cu.p((lam + phi) / 2, 0)
1049
+ def_cu.p((lam - phi) / 2, 1)
1050
+ def_cu.cx(0, 1)
1051
+ def_cu.u(-theta / 2, 0, -(phi + lam) / 2, 1)
1052
+ def_cu.cx(0, 1)
1053
+ def_cu.u(theta / 2, phi, 0, 1)
1054
+ _sel.add_equivalence(CUGate(theta, phi, lam, gamma), def_cu)
1055
+
1056
+ # CUGate
1057
+ # ┌──────┐
1058
+ # q_0: ──────■─────── q_0: ┤ P(γ) ├──────■──────
1059
+ # ┌─────┴──────┐ ≡ └──────┘┌─────┴─────┐
1060
+ # q_1: ┤ U(θ,ϕ,λ,γ) ├ q_1: ────────┤ U3(θ,ϕ,λ) ├
1061
+ # └────────────┘ └───────────┘
1062
+ q = QuantumRegister(2, "q")
1063
+ theta = Parameter("theta")
1064
+ phi = Parameter("phi")
1065
+ lam = Parameter("lam")
1066
+ gamma = Parameter("gamma")
1067
+ cu_to_cu3 = QuantumCircuit(q)
1068
+ cu_to_cu3.p(gamma, 0)
1069
+ cu_to_cu3.append(CU3Gate(theta, phi, lam), [0, 1])
1070
+ _sel.add_equivalence(CUGate(theta, phi, lam, gamma), cu_to_cu3)
1071
+
1072
+ # U1Gate
1073
+ #
1074
+ # ┌───────┐ ┌───────────┐
1075
+ # q: ┤ U1(θ) ├ ≡ q: ┤ U3(0,0,θ) ├
1076
+ # └───────┘ └───────────┘
1077
+ q = QuantumRegister(1, "q")
1078
+ theta = Parameter("theta")
1079
+ def_u1 = QuantumCircuit(q)
1080
+ def_u1.append(U3Gate(0, 0, theta), [q[0]], [])
1081
+ _sel.add_equivalence(U1Gate(theta), def_u1)
1082
+
1083
+ # U1Gate
1084
+ #
1085
+ # ┌───────┐ ┌──────┐
1086
+ # q: ┤ U1(θ) ├ ≡ q: ┤ P(0) ├
1087
+ # └───────┘ └──────┘
1088
+ q = QuantumRegister(1, "q")
1089
+ theta = Parameter("theta")
1090
+ u1_to_phase = QuantumCircuit(q)
1091
+ u1_to_phase.p(theta, 0)
1092
+ _sel.add_equivalence(U1Gate(theta), u1_to_phase)
1093
+
1094
+ # U1Gate
1095
+ # global phase: θ/2
1096
+ # ┌───────┐ ┌───────┐
1097
+ # q: ┤ U1(θ) ├ ≡ q: ┤ Rz(θ) ├
1098
+ # └───────┘ └───────┘
1099
+ q = QuantumRegister(1, "q")
1100
+ theta = Parameter("theta")
1101
+ u1_to_rz = QuantumCircuit(q, global_phase=theta / 2)
1102
+ u1_to_rz.append(RZGate(theta), [q[0]], [])
1103
+ _sel.add_equivalence(U1Gate(theta), u1_to_rz)
1104
+
1105
+ # CU1Gate
1106
+ # ┌─────────┐
1107
+ # q_0: ─■───── q_0: ┤ U1(θ/2) ├──■────────────────■─────────────
1108
+ # │U1(θ) ≡ └─────────┘┌─┴─┐┌──────────┐┌─┴─┐┌─────────┐
1109
+ # q_1: ─■───── q_1: ───────────┤ X ├┤ U1(-θ/2) ├┤ X ├┤ U1(θ/2) ├
1110
+ # └───┘└──────────┘└───┘└─────────┘
1111
+ q = QuantumRegister(2, "q")
1112
+ theta = Parameter("theta")
1113
+ def_cu1 = QuantumCircuit(q)
1114
+ for inst, qargs, cargs in [
1115
+ (U1Gate(theta / 2), [q[0]], []),
1116
+ (CXGate(), [q[0], q[1]], []),
1117
+ (U1Gate(-theta / 2), [q[1]], []),
1118
+ (CXGate(), [q[0], q[1]], []),
1119
+ (U1Gate(theta / 2), [q[1]], []),
1120
+ ]:
1121
+ def_cu1.append(inst, qargs, cargs)
1122
+ _sel.add_equivalence(CU1Gate(theta), def_cu1)
1123
+
1124
+ # U2Gate
1125
+ #
1126
+ # ┌─────────┐ ┌─────────────┐
1127
+ # q: ┤ U2(ϕ,λ) ├ ≡ q: ┤ U3(π/2,ϕ,λ) ├
1128
+ # └─────────┘ └─────────────┘
1129
+ q = QuantumRegister(1, "q")
1130
+ phi = Parameter("phi")
1131
+ lam = Parameter("lam")
1132
+ def_u2 = QuantumCircuit(q)
1133
+ def_u2.append(U3Gate(pi / 2, phi, lam), [q[0]], [])
1134
+ _sel.add_equivalence(U2Gate(phi, lam), def_u2)
1135
+
1136
+ # U2Gate
1137
+ # global phase: 7π/4
1138
+ # ┌─────────┐ ┌─────────────┐┌────┐┌─────────────┐
1139
+ # q: ┤ U2(ϕ,λ) ├ ≡ q: ┤ U1(λ - π/2) ├┤ √X ├┤ U1(ϕ + π/2) ├
1140
+ # └─────────┘ └─────────────┘└────┘└─────────────┘
1141
+ q = QuantumRegister(1, "q")
1142
+ phi = Parameter("phi")
1143
+ lam = Parameter("lam")
1144
+ u2_to_u1sx = QuantumCircuit(q, global_phase=-pi / 4)
1145
+ u2_to_u1sx.append(U1Gate(lam - pi / 2), [0])
1146
+ u2_to_u1sx.sx(0)
1147
+ u2_to_u1sx.append(U1Gate(phi + pi / 2), [0])
1148
+ _sel.add_equivalence(U2Gate(phi, lam), u2_to_u1sx)
1149
+
1150
+ # U3Gate
1151
+ # global phase: λ/2 + ϕ/2 - π/2
1152
+ # ┌───────────┐ ┌───────┐┌────┐┌───────────┐┌────┐┌────────────┐
1153
+ # q: ┤ U3(θ,ϕ,λ) ├ ≡ q: ┤ Rz(λ) ├┤ √X ├┤ Rz(θ + π) ├┤ √X ├┤ Rz(ϕ + 3π) ├
1154
+ # └───────────┘ └───────┘└────┘└───────────┘└────┘└────────────┘
1155
+ q = QuantumRegister(1, "q")
1156
+ theta = Parameter("theta")
1157
+ phi = Parameter("phi")
1158
+ lam = Parameter("lam")
1159
+ u3_qasm_def = QuantumCircuit(q, global_phase=(lam + phi - pi) / 2)
1160
+ u3_qasm_def.rz(lam, 0)
1161
+ u3_qasm_def.sx(0)
1162
+ u3_qasm_def.rz(theta + pi, 0)
1163
+ u3_qasm_def.sx(0)
1164
+ u3_qasm_def.rz(phi + 3 * pi, 0)
1165
+ _sel.add_equivalence(U3Gate(theta, phi, lam), u3_qasm_def)
1166
+
1167
+ # U3Gate
1168
+ #
1169
+ # ┌───────────┐ ┌──────────┐
1170
+ # q: ┤ U3(θ,ϕ,λ) ├ ≡ q: ┤ U(θ,ϕ,λ) ├
1171
+ # └───────────┘ └──────────┘
1172
+ q = QuantumRegister(1, "q")
1173
+ theta = Parameter("theta")
1174
+ phi = Parameter("phi")
1175
+ lam = Parameter("lam")
1176
+ u3_to_u = QuantumCircuit(q)
1177
+ u3_to_u.u(theta, phi, lam, 0)
1178
+ _sel.add_equivalence(U3Gate(theta, phi, lam), u3_to_u)
1179
+
1180
+ # CU3Gate
1181
+ # ┌───────────────┐ »
1182
+ # q_0: ──────■────── q_0: ┤ U1(λ/2 + ϕ/2) ├──■─────────────────────────────■──»
1183
+ # ┌─────┴─────┐ ≡ ├───────────────┤┌─┴─┐┌───────────────────────┐┌─┴─┐»
1184
+ # q_1: ┤ U3(θ,ϕ,λ) ├ q_1: ┤ U1(λ/2 - ϕ/2) ├┤ X ├┤ U3(-θ/2,0,-λ/2 - ϕ/2) ├┤ X ├»
1185
+ # └───────────┘ └───────────────┘└───┘└───────────────────────┘└───┘»
1186
+ # «
1187
+ # «q_0: ───────────────
1188
+ # « ┌─────────────┐
1189
+ # «q_1: ┤ U3(θ/2,ϕ,0) ├
1190
+ # « └─────────────┘
1191
+ q = QuantumRegister(2, "q")
1192
+ theta = Parameter("theta")
1193
+ phi = Parameter("phi")
1194
+ lam = Parameter("lam")
1195
+ def_cu3 = QuantumCircuit(q)
1196
+ for inst, qargs, cargs in [
1197
+ (U1Gate((lam + phi) / 2), [q[0]], []),
1198
+ (U1Gate((lam - phi) / 2), [q[1]], []),
1199
+ (CXGate(), [q[0], q[1]], []),
1200
+ (U3Gate(-theta / 2, 0, -(phi + lam) / 2), [q[1]], []),
1201
+ (CXGate(), [q[0], q[1]], []),
1202
+ (U3Gate(theta / 2, phi, 0), [q[1]], []),
1203
+ ]:
1204
+ def_cu3.append(inst, qargs, cargs)
1205
+ _sel.add_equivalence(CU3Gate(theta, phi, lam), def_cu3)
1206
+
1207
+ q = QuantumRegister(2, "q")
1208
+ theta = Parameter("theta")
1209
+ phi = Parameter("phi")
1210
+ lam = Parameter("lam")
1211
+ cu3_to_cu = QuantumCircuit(q)
1212
+ cu3_to_cu.cu(theta, phi, lam, 0, 0, 1)
1213
+ _sel.add_equivalence(CU3Gate(theta, phi, lam), cu3_to_cu)
1214
+
1215
+ # XGate
1216
+ #
1217
+ # ┌───┐ ┌───────────┐
1218
+ # q: ┤ X ├ ≡ q: ┤ U3(π,0,π) ├
1219
+ # └───┘ └───────────┘
1220
+ q = QuantumRegister(1, "q")
1221
+ def_x = QuantumCircuit(q)
1222
+ def_x.append(U3Gate(pi, 0, pi), [q[0]], [])
1223
+ _sel.add_equivalence(XGate(), def_x)
1224
+
1225
+ # XGate
1226
+ #
1227
+ # ┌───┐ ┌───┐┌───┐┌───┐┌───┐
1228
+ # q: ┤ X ├ ≡ q: ┤ H ├┤ S ├┤ S ├┤ H ├
1229
+ # └───┘ └───┘└───┘└───┘└───┘
1230
+ q = QuantumRegister(1, "q")
1231
+ def_x = QuantumCircuit(q)
1232
+ for inst, qargs, cargs in [
1233
+ (HGate(), [q[0]], []),
1234
+ (SGate(), [q[0]], []),
1235
+ (SGate(), [q[0]], []),
1236
+ (HGate(), [q[0]], []),
1237
+ ]:
1238
+ def_x.append(inst, qargs, cargs)
1239
+ _sel.add_equivalence(XGate(), def_x)
1240
+
1241
+ # XGate
1242
+ # global phase: π/2
1243
+ # ┌───┐ ┌───┐┌───┐
1244
+ # q: ┤ X ├ ≡ q: ┤ Y ├┤ Z ├
1245
+ # └───┘ └───┘└───┘
1246
+ def_x = QuantumCircuit(1, global_phase=pi / 2)
1247
+ def_x.y(0)
1248
+ def_x.z(0)
1249
+ _sel.add_equivalence(XGate(), def_x)
1250
+
1251
+ # CXGate
1252
+
1253
+ for plus_ry in [False, True]:
1254
+ for plus_rxx in [False, True]:
1255
+ cx_to_rxx = cnot_rxx_decompose(plus_ry, plus_rxx)
1256
+ _sel.add_equivalence(CXGate(), cx_to_rxx)
1257
+
1258
+ # CXGate
1259
+ #
1260
+ # q_0: ──■── q_0: ──────■──────
1261
+ # ┌─┴─┐ ≡ ┌───┐ │ ┌───┐
1262
+ # q_1: ┤ X ├ q_1: ┤ H ├─■─┤ H ├
1263
+ # └───┘ └───┘ └───┘
1264
+ q = QuantumRegister(2, "q")
1265
+ cx_to_cz = QuantumCircuit(q)
1266
+ for inst, qargs, cargs in [
1267
+ (HGate(), [q[1]], []),
1268
+ (CZGate(), [q[0], q[1]], []),
1269
+ (HGate(), [q[1]], []),
1270
+ ]:
1271
+ cx_to_cz.append(inst, qargs, cargs)
1272
+ _sel.add_equivalence(CXGate(), cx_to_cz)
1273
+
1274
+ # CXGate
1275
+ # global phase: 3π/4
1276
+ # ┌───┐ ┌────────┐┌───┐ ┌────────┐┌───┐┌───┐
1277
+ # q_0: ──■── q_0: ┤ H ├─────┤0 ├┤ X ├─────┤0 ├┤ H ├┤ S ├─────
1278
+ # ┌─┴─┐ ≡ ├───┤┌───┐│ Iswap │├───┤┌───┐│ Iswap │├───┤├───┤┌───┐
1279
+ # q_1: ┤ X ├ q_1: ┤ X ├┤ H ├┤1 ├┤ X ├┤ H ├┤1 ├┤ S ├┤ X ├┤ H ├
1280
+ # └───┘ └───┘└───┘└────────┘└───┘└───┘└────────┘└───┘└───┘└───┘
1281
+ q = QuantumRegister(2, "q")
1282
+ cx_to_iswap = QuantumCircuit(q, global_phase=3 * pi / 4)
1283
+ for inst, qargs, cargs in [
1284
+ (HGate(), [q[0]], []),
1285
+ (XGate(), [q[1]], []),
1286
+ (HGate(), [q[1]], []),
1287
+ (iSwapGate(), [q[0], q[1]], []),
1288
+ (XGate(), [q[0]], []),
1289
+ (XGate(), [q[1]], []),
1290
+ (HGate(), [q[1]], []),
1291
+ (iSwapGate(), [q[0], q[1]], []),
1292
+ (HGate(), [q[0]], []),
1293
+ (SGate(), [q[0]], []),
1294
+ (SGate(), [q[1]], []),
1295
+ (XGate(), [q[1]], []),
1296
+ (HGate(), [q[1]], []),
1297
+ ]:
1298
+ cx_to_iswap.append(inst, qargs, cargs)
1299
+ _sel.add_equivalence(CXGate(), cx_to_iswap)
1300
+
1301
+ # CXGate
1302
+ # global phase: 7π/4
1303
+ # ┌──────────┐┌───────┐┌──────┐
1304
+ # q_0: ──■── q_0: ┤ Rz(-π/2) ├┤ Ry(π) ├┤0 ├
1305
+ # ┌─┴─┐ ≡ ├─────────┬┘└───────┘│ Ecr │
1306
+ # q_1: ┤ X ├ q_1: ┤ Rx(π/2) ├──────────┤1 ├
1307
+ # └───┘ └─────────┘ └──────┘
1308
+ q = QuantumRegister(2, "q")
1309
+ cx_to_ecr = QuantumCircuit(q, global_phase=-pi / 4)
1310
+ for inst, qargs, cargs in [
1311
+ (RZGate(-pi / 2), [q[0]], []),
1312
+ (RYGate(pi), [q[0]], []),
1313
+ (RXGate(pi / 2), [q[1]], []),
1314
+ (ECRGate(), [q[0], q[1]], []),
1315
+ ]:
1316
+ cx_to_ecr.append(inst, qargs, cargs)
1317
+ _sel.add_equivalence(CXGate(), cx_to_ecr)
1318
+
1319
+ # CXGate
1320
+ # q_0: ──■── q_0: ───────────────■───────────────────
1321
+ # ┌─┴─┐ ≡ ┌────────────┐ │P(π) ┌────────────┐
1322
+ # q_1: ┤ X ├ q_1: ┤ U(π/2,0,π) ├─■─────┤ U(π/2,0,π) ├
1323
+ # └───┘ └────────────┘ └────────────┘
1324
+ q = QuantumRegister(2, "q")
1325
+ cx_to_cp = QuantumCircuit(q)
1326
+ for inst, qargs, cargs in [
1327
+ (UGate(pi / 2, 0, pi), [q[1]], []),
1328
+ (CPhaseGate(pi), [q[0], q[1]], []),
1329
+ (UGate(pi / 2, 0, pi), [q[1]], []),
1330
+ ]:
1331
+ cx_to_cp.append(inst, qargs, cargs)
1332
+ _sel.add_equivalence(CXGate(), cx_to_cp)
1333
+
1334
+ # CXGate
1335
+ # ┌────────────┐
1336
+ # q_0: ──■── q_0: ┤ U(0,0,π/2) ├────■──────────────────
1337
+ # ┌─┴─┐ ≡ ├────────────┤┌───┴───┐┌────────────┐
1338
+ # q_1: ┤ X ├ q_1: ┤ U(π/2,0,π) ├┤ Rz(π) ├┤ U(π/2,0,π) ├
1339
+ # └───┘ └────────────┘└───────┘└────────────┘
1340
+ q = QuantumRegister(2, "q")
1341
+ cx_to_crz = QuantumCircuit(q)
1342
+ for inst, qargs, cargs in [
1343
+ (UGate(pi / 2, 0, pi), [q[1]], []),
1344
+ (UGate(0, 0, pi / 2), [q[0]], []),
1345
+ (CRZGate(pi), [q[0], q[1]], []),
1346
+ (UGate(pi / 2, 0, pi), [q[1]], []),
1347
+ ]:
1348
+ cx_to_crz.append(inst, qargs, cargs)
1349
+ _sel.add_equivalence(CXGate(), cx_to_crz)
1350
+
1351
+ # CXGate
1352
+ # global phase: π/4
1353
+ # ┌───────────┐┌─────┐
1354
+ # q_0: ──■── q_0: ┤0 ├┤ Sdg ├─
1355
+ # ┌─┴─┐ ≡ │ Rzx(π/2) │├─────┴┐
1356
+ # q_1: ┤ X ├ q_1: ┤1 ├┤ √Xdg ├
1357
+ # └───┘ └───────────┘└──────┘
1358
+ q = QuantumRegister(2, "q")
1359
+ cx_to_zx90 = QuantumCircuit(q, global_phase=pi / 4)
1360
+ for inst, qargs, cargs in [
1361
+ (RZXGate(pi / 2), [q[0], q[1]], []),
1362
+ (SdgGate(), [q[0]], []),
1363
+ (SXdgGate(), [q[1]], []),
1364
+ ]:
1365
+ cx_to_zx90.append(inst, qargs, cargs)
1366
+ _sel.add_equivalence(CXGate(), cx_to_zx90)
1367
+
1368
+ # CCXGate
1369
+ # ┌───┐
1370
+ # q_0: ──■── q_0: ───────────────────■─────────────────────■────■───┤ T ├───■──
1371
+ # │ │ ┌───┐ │ ┌─┴─┐┌┴───┴┐┌─┴─┐
1372
+ # q_1: ──■── ≡ q_1: ───────■───────────┼─────────■───┤ T ├───┼──┤ X ├┤ Tdg ├┤ X ├
1373
+ # ┌─┴─┐ ┌───┐┌─┴─┐┌─────┐┌─┴─┐┌───┐┌─┴─┐┌┴───┴┐┌─┴─┐├───┤└┬───┬┘└───┘
1374
+ # q_2: ┤ X ├ q_2: ┤ H ├┤ X ├┤ Tdg ├┤ X ├┤ T ├┤ X ├┤ Tdg ├┤ X ├┤ T ├─┤ H ├──────
1375
+ # └───┘ └───┘└───┘└─────┘└───┘└───┘└───┘└─────┘└───┘└───┘ └───┘
1376
+ q = QuantumRegister(3, "q")
1377
+ def_ccx = QuantumCircuit(q)
1378
+ for inst, qargs, cargs in [
1379
+ (HGate(), [q[2]], []),
1380
+ (CXGate(), [q[1], q[2]], []),
1381
+ (TdgGate(), [q[2]], []),
1382
+ (CXGate(), [q[0], q[2]], []),
1383
+ (TGate(), [q[2]], []),
1384
+ (CXGate(), [q[1], q[2]], []),
1385
+ (TdgGate(), [q[2]], []),
1386
+ (CXGate(), [q[0], q[2]], []),
1387
+ (TGate(), [q[1]], []),
1388
+ (TGate(), [q[2]], []),
1389
+ (HGate(), [q[2]], []),
1390
+ (CXGate(), [q[0], q[1]], []),
1391
+ (TGate(), [q[0]], []),
1392
+ (TdgGate(), [q[1]], []),
1393
+ (CXGate(), [q[0], q[1]], []),
1394
+ ]:
1395
+ def_ccx.append(inst, qargs, cargs)
1396
+ _sel.add_equivalence(CCXGate(), def_ccx)
1397
+
1398
+ # CCXGate
1399
+ #
1400
+ # q_0: ──■── q_0: ────────■─────────────────■────■───
1401
+ # │ ┌─┴─┐┌─────┐ ┌─┴─┐ │
1402
+ # q_1: ──■── ≡ q_1: ──■───┤ X ├┤ Sdg ├──■───┤ X ├──┼───
1403
+ # ┌─┴─┐ ┌─┴──┐├───┤└─────┘┌─┴──┐├───┤┌─┴──┐
1404
+ # q_2: ┤ X ├ q_2: ┤ Sx ├┤ Z ├───────┤ Sx ├┤ Z ├┤ Sx ├
1405
+ # └───┘ └────┘└───┘ └────┘└───┘└────┘
1406
+ q = QuantumRegister(3, "q")
1407
+ ccx_to_cx_csx = QuantumCircuit(q)
1408
+ for inst, qargs, cargs in [
1409
+ (CSXGate(), [q[1], q[2]], []),
1410
+ (CXGate(), [q[0], q[1]], []),
1411
+ (ZGate(), [q[2]], []),
1412
+ (SdgGate(), [q[1]], []),
1413
+ (CSXGate(), [q[1], q[2]], []),
1414
+ (ZGate(), [q[2]], []),
1415
+ (CXGate(), [q[0], q[1]], []),
1416
+ (CSXGate(), [q[0], q[2]], []),
1417
+ ]:
1418
+ ccx_to_cx_csx.append(inst, qargs, cargs)
1419
+ _sel.add_equivalence(CCXGate(), ccx_to_cx_csx)
1420
+
1421
+ # YGate
1422
+ #
1423
+ # ┌───┐ ┌───────────────┐
1424
+ # q: ┤ Y ├ ≡ q: ┤ U3(π,π/2,π/2) ├
1425
+ # └───┘ └───────────────┘
1426
+ q = QuantumRegister(1, "q")
1427
+ def_y = QuantumCircuit(q)
1428
+ def_y.append(U3Gate(pi, pi / 2, pi / 2), [q[0]], [])
1429
+ _sel.add_equivalence(YGate(), def_y)
1430
+
1431
+ # YGate
1432
+ # global phase: 3π/2
1433
+ # ┌───┐ ┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐
1434
+ # q: ┤ Y ├ ≡ q: ┤ H ├┤ S ├┤ S ├┤ H ├┤ S ├┤ S ├
1435
+ # └───┘ └───┘└───┘└───┘└───┘└───┘└───┘
1436
+ q = QuantumRegister(1, "q")
1437
+ def_y = QuantumCircuit(q)
1438
+ def_y.global_phase = 3 * pi / 2
1439
+ for inst, qargs, cargs in [
1440
+ (HGate(), [q[0]], []),
1441
+ (SGate(), [q[0]], []),
1442
+ (SGate(), [q[0]], []),
1443
+ (HGate(), [q[0]], []),
1444
+ (SGate(), [q[0]], []),
1445
+ (SGate(), [q[0]], []),
1446
+ ]:
1447
+ def_y.append(inst, qargs, cargs)
1448
+ _sel.add_equivalence(YGate(), def_y)
1449
+
1450
+ # YGate
1451
+ # global phase: π/2
1452
+ # ┌───┐ ┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐
1453
+ # q: ┤ Y ├ ≡ q: ┤ S ├┤ S ├┤ H ├┤ S ├┤ S ├┤ H ├
1454
+ # └───┘ └───┘└───┘└───┘└───┘└───┘└───┘
1455
+ q = QuantumRegister(1, "q")
1456
+ def_y = QuantumCircuit(q)
1457
+ def_y.global_phase = pi / 2
1458
+ for inst, qargs, cargs in [
1459
+ (SGate(), [q[0]], []),
1460
+ (SGate(), [q[0]], []),
1461
+ (HGate(), [q[0]], []),
1462
+ (SGate(), [q[0]], []),
1463
+ (SGate(), [q[0]], []),
1464
+ (HGate(), [q[0]], []),
1465
+ ]:
1466
+ def_y.append(inst, qargs, cargs)
1467
+ _sel.add_equivalence(YGate(), def_y)
1468
+
1469
+ # YGate
1470
+ # global phase: π/2
1471
+ # ┌───┐ ┌───┐┌───┐
1472
+ # q: ┤ Y ├ ≡ q: ┤ Z ├┤ X ├
1473
+ # └───┘ └───┘└───┘
1474
+ def_y = QuantumCircuit(1, global_phase=pi / 2)
1475
+ def_y.z(0)
1476
+ def_y.x(0)
1477
+ _sel.add_equivalence(YGate(), def_y)
1478
+
1479
+ # CYGate
1480
+ #
1481
+ # q_0: ──■── q_0: ─────────■───────
1482
+ # ┌─┴─┐ ≡ ┌─────┐┌─┴─┐┌───┐
1483
+ # q_1: ┤ Y ├ q_1: ┤ Sdg ├┤ X ├┤ S ├
1484
+ # └───┘ └─────┘└───┘└───┘
1485
+ q = QuantumRegister(2, "q")
1486
+ def_cy = QuantumCircuit(q)
1487
+ for inst, qargs, cargs in [
1488
+ (SdgGate(), [q[1]], []),
1489
+ (CXGate(), [q[0], q[1]], []),
1490
+ (SGate(), [q[1]], []),
1491
+ ]:
1492
+ def_cy.append(inst, qargs, cargs)
1493
+ _sel.add_equivalence(CYGate(), def_cy)
1494
+
1495
+ # ZGate
1496
+ #
1497
+ # ┌───┐ ┌───────┐
1498
+ # q: ┤ Z ├ ≡ q: ┤ U1(π) ├
1499
+ # └───┘ └───────┘
1500
+ q = QuantumRegister(1, "q")
1501
+ def_z = QuantumCircuit(q)
1502
+ def_z.append(U1Gate(pi), [q[0]], [])
1503
+ _sel.add_equivalence(ZGate(), def_z)
1504
+
1505
+ # ZGate
1506
+ #
1507
+ # ┌───┐ ┌───┐┌───┐
1508
+ # q: ┤ Z ├ ≡ q: ┤ S ├┤ S ├
1509
+ # └───┘ └───┘└───┘
1510
+ q = QuantumRegister(1, "q")
1511
+ def_z = QuantumCircuit(q)
1512
+ for inst, qargs, cargs in [
1513
+ (SGate(), [q[0]], []),
1514
+ (SGate(), [q[0]], []),
1515
+ ]:
1516
+ def_z.append(inst, qargs, cargs)
1517
+ _sel.add_equivalence(ZGate(), def_z)
1518
+
1519
+ # ZGate
1520
+ # global phase: π/2
1521
+ # ┌───┐ ┌───┐┌───┐
1522
+ # q: ┤ Z ├ ≡ q: ┤ X ├┤ Y ├
1523
+ # └───┘ └───┘└───┘
1524
+ def_z = QuantumCircuit(1, global_phase=pi / 2)
1525
+ def_z.x(0)
1526
+ def_z.y(0)
1527
+ _sel.add_equivalence(ZGate(), def_z)
1528
+
1529
+ # CZGate
1530
+ #
1531
+ # q_0: ─■─ q_0: ───────■───────
1532
+ # │ ≡ ┌───┐┌─┴─┐┌───┐
1533
+ # q_1: ─■─ q_1: ┤ H ├┤ X ├┤ H ├
1534
+ # └───┘└───┘└───┘
1535
+ q = QuantumRegister(2, "q")
1536
+ def_cz = QuantumCircuit(q)
1537
+ for inst, qargs, cargs in [
1538
+ (HGate(), [q[1]], []),
1539
+ (CXGate(), [q[0], q[1]], []),
1540
+ (HGate(), [q[1]], []),
1541
+ ]:
1542
+ def_cz.append(inst, qargs, cargs)
1543
+ _sel.add_equivalence(CZGate(), def_cz)
1544
+
1545
+ # CCZGate
1546
+ #
1547
+ # q_0: ─■─ q_0: ───────■───────
1548
+ # │ │
1549
+ # q_1: ─■─ = q_1: ───────■───────
1550
+ # │ ┌───┐┌─┴─┐┌───┐
1551
+ # q_2: ─■─ q_2: ┤ H ├┤ X ├┤ H ├
1552
+ # └───┘└───┘└───┘
1553
+ q = QuantumRegister(3, "q")
1554
+ def_ccz = QuantumCircuit(q)
1555
+ for inst, qargs, cargs in [
1556
+ (HGate(), [q[2]], []),
1557
+ (CCXGate(), [q[0], q[1], q[2]], []),
1558
+ (HGate(), [q[2]], []),
1559
+ ]:
1560
+ def_ccz.append(inst, qargs, cargs)
1561
+ _sel.add_equivalence(CCZGate(), def_ccz)
1562
+
1563
+ # XGate
1564
+ # global phase: π/2
1565
+ # ┌───┐ ┌───────┐
1566
+ # q: ┤ X ├ ≡ q: ┤ Rx(π) ├
1567
+ # └───┘ └───────┘
1568
+ q = QuantumRegister(1, "q")
1569
+ x_to_rx = QuantumCircuit(q)
1570
+ x_to_rx.append(RXGate(theta=pi), [q[0]])
1571
+ x_to_rx.global_phase = pi / 2
1572
+ _sel.add_equivalence(XGate(), x_to_rx)
1573
+
1574
+ # YGate
1575
+ # global phase: π/2
1576
+ # ┌───┐ ┌───────┐
1577
+ # q: ┤ Y ├ ≡ q: ┤ Ry(π) ├
1578
+ # └───┘ └───────┘
1579
+ q = QuantumRegister(1, "q")
1580
+ y_to_ry = QuantumCircuit(q)
1581
+ y_to_ry.append(RYGate(theta=pi), [q[0]])
1582
+ y_to_ry.global_phase = pi / 2
1583
+ _sel.add_equivalence(YGate(), y_to_ry)
1584
+
1585
+ # HGate
1586
+ # global phase: π/2
1587
+ # ┌───┐ ┌─────────┐┌───────┐
1588
+ # q: ┤ H ├ ≡ q: ┤ Ry(π/2) ├┤ Rx(π) ├
1589
+ # └───┘ └─────────┘└───────┘
1590
+ q = QuantumRegister(1, "q")
1591
+ h_to_rxry = QuantumCircuit(q)
1592
+ h_to_rxry.append(RYGate(theta=pi / 2), [q[0]])
1593
+ h_to_rxry.append(RXGate(theta=pi), [q[0]])
1594
+ h_to_rxry.global_phase = pi / 2
1595
+ _sel.add_equivalence(HGate(), h_to_rxry)
1596
+
1597
+ # HGate
1598
+ # global phase: π/2
1599
+ # ┌───┐ ┌────────────┐┌────────┐
1600
+ # q: ┤ H ├ ≡ q: ┤ R(π/2,π/2) ├┤ R(π,0) ├
1601
+ # └───┘ └────────────┘└────────┘
1602
+ q = QuantumRegister(1, "q")
1603
+ h_to_rr = QuantumCircuit(q)
1604
+ h_to_rr.append(RGate(theta=pi / 2, phi=pi / 2), [q[0]])
1605
+ h_to_rr.append(RGate(theta=pi, phi=0), [q[0]])
1606
+ h_to_rr.global_phase = pi / 2
1607
+ _sel.add_equivalence(HGate(), h_to_rr)
1608
+
1609
+ # XXPlusYYGate
1610
+ # ┌───────────────┐
1611
+ # ┤0 ├
1612
+ # │ {XX+YY}(θ,β) │
1613
+ # ┤1 ├
1614
+ # └───────────────┘
1615
+ # ┌───────┐ ┌───┐ ┌───┐┌────────────┐┌───┐ ┌─────┐ ┌────────────┐
1616
+ # ─┤ Rz(β) ├──┤ S ├────────────┤ X ├┤ Ry(-0.5*θ) ├┤ X ├──┤ Sdg ├───┤ Rz(-1.0*β) ├───────────
1617
+ # ≡ ┌┴───────┴─┐├───┴┐┌─────────┐└─┬─┘├────────────┤└─┬─┘┌─┴─────┴──┐└──┬──────┬──┘┌─────────┐
1618
+ # ┤ Rz(-π/2) ├┤ √X ├┤ Rz(π/2) ├──■──┤ Ry(-0.5*θ) ├──■──┤ Rz(-π/2) ├───┤ √Xdg ├───┤ Rz(π/2) ├
1619
+ # └──────────┘└────┘└─────────┘ └────────────┘ └──────────┘ └──────┘ └─────────┘
1620
+ q = QuantumRegister(2, "q")
1621
+ xxplusyy = QuantumCircuit(q)
1622
+ beta = Parameter("beta")
1623
+ theta = Parameter("theta")
1624
+ rules: list[tuple[Gate, list[Qubit], list[Clbit]]] = [
1625
+ (RZGate(beta), [q[0]], []),
1626
+ (RZGate(-pi / 2), [q[1]], []),
1627
+ (SXGate(), [q[1]], []),
1628
+ (RZGate(pi / 2), [q[1]], []),
1629
+ (SGate(), [q[0]], []),
1630
+ (CXGate(), [q[1], q[0]], []),
1631
+ (RYGate(-theta / 2), [q[1]], []),
1632
+ (RYGate(-theta / 2), [q[0]], []),
1633
+ (CXGate(), [q[1], q[0]], []),
1634
+ (SdgGate(), [q[0]], []),
1635
+ (RZGate(-pi / 2), [q[1]], []),
1636
+ (SXdgGate(), [q[1]], []),
1637
+ (RZGate(pi / 2), [q[1]], []),
1638
+ (RZGate(-beta), [q[0]], []),
1639
+ ]
1640
+ for instr, qargs, cargs in rules:
1641
+ xxplusyy._append(instr, qargs, cargs)
1642
+ _sel.add_equivalence(XXPlusYYGate(theta, beta), xxplusyy)
1643
+
1644
+ # XXMinusYYGate
1645
+ # ┌───────────────┐
1646
+ # ┤0 ├
1647
+ # │ {XX-YY}(θ,β) │
1648
+ # ┤1 ├
1649
+ # └───────────────┘
1650
+ # ┌──────────┐ ┌────┐┌─────────┐ ┌─────────┐ ┌──────────┐ ┌──────┐┌─────────┐
1651
+ # ─┤ Rz(-π/2) ├─┤ √X ├┤ Rz(π/2) ├──■───┤ Ry(θ/2) ├────■──┤ Rz(-π/2) ├─┤ √Xdg ├┤ Rz(π/2) ├
1652
+ # ≡ ┌┴──────────┴┐├───┬┘└─────────┘┌─┴─┐┌┴─────────┴─┐┌─┴─┐└─┬─────┬──┘┌┴──────┤└─────────┘
1653
+ # ┤ Rz(-1.0*β) ├┤ S ├────────────┤ X ├┤ Ry(-0.5*θ) ├┤ X ├──┤ Sdg ├───┤ Rz(β) ├───────────
1654
+ # └────────────┘└───┘ └───┘└────────────┘└───┘ └─────┘ └───────┘
1655
+ q = QuantumRegister(2, "q")
1656
+ xxminusyy = QuantumCircuit(q)
1657
+ beta = Parameter("beta")
1658
+ theta = Parameter("theta")
1659
+ rules: list[tuple[Gate, list[Qubit], list[Clbit]]] = [
1660
+ (RZGate(-beta), [q[1]], []),
1661
+ (RZGate(-pi / 2), [q[0]], []),
1662
+ (SXGate(), [q[0]], []),
1663
+ (RZGate(pi / 2), [q[0]], []),
1664
+ (SGate(), [q[1]], []),
1665
+ (CXGate(), [q[0], q[1]], []),
1666
+ (RYGate(theta / 2), [q[0]], []),
1667
+ (RYGate(-theta / 2), [q[1]], []),
1668
+ (CXGate(), [q[0], q[1]], []),
1669
+ (SdgGate(), [q[1]], []),
1670
+ (RZGate(-pi / 2), [q[0]], []),
1671
+ (SXdgGate(), [q[0]], []),
1672
+ (RZGate(pi / 2), [q[0]], []),
1673
+ (RZGate(beta), [q[1]], []),
1674
+ ]
1675
+ for instr, qargs, cargs in rules:
1676
+ xxminusyy._append(instr, qargs, cargs)
1677
+ _sel.add_equivalence(XXMinusYYGate(theta, beta), xxminusyy)