qiskit 2.0.3__cp39-abi3-manylinux2014_aarch64.manylinux_2_17_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 (690) hide show
  1. qiskit/VERSION.txt +1 -0
  2. qiskit/__init__.py +141 -0
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/_numpy_compat.py +73 -0
  5. qiskit/circuit/__init__.py +1343 -0
  6. qiskit/circuit/_add_control.py +312 -0
  7. qiskit/circuit/_classical_resource_map.py +150 -0
  8. qiskit/circuit/_standard_gates_commutations.py +3849 -0
  9. qiskit/circuit/_utils.py +167 -0
  10. qiskit/circuit/annotated_operation.py +279 -0
  11. qiskit/circuit/barrier.py +46 -0
  12. qiskit/circuit/classical/__init__.py +41 -0
  13. qiskit/circuit/classical/expr/__init__.py +266 -0
  14. qiskit/circuit/classical/expr/constructors.py +764 -0
  15. qiskit/circuit/classical/expr/expr.py +498 -0
  16. qiskit/circuit/classical/expr/visitors.py +375 -0
  17. qiskit/circuit/classical/types/__init__.py +113 -0
  18. qiskit/circuit/classical/types/ordering.py +229 -0
  19. qiskit/circuit/classical/types/types.py +153 -0
  20. qiskit/circuit/commutation_checker.py +133 -0
  21. qiskit/circuit/commutation_library.py +20 -0
  22. qiskit/circuit/controlflow/__init__.py +59 -0
  23. qiskit/circuit/controlflow/_builder_utils.py +211 -0
  24. qiskit/circuit/controlflow/box.py +163 -0
  25. qiskit/circuit/controlflow/break_loop.py +56 -0
  26. qiskit/circuit/controlflow/builder.py +791 -0
  27. qiskit/circuit/controlflow/continue_loop.py +56 -0
  28. qiskit/circuit/controlflow/control_flow.py +94 -0
  29. qiskit/circuit/controlflow/for_loop.py +218 -0
  30. qiskit/circuit/controlflow/if_else.py +498 -0
  31. qiskit/circuit/controlflow/switch_case.py +411 -0
  32. qiskit/circuit/controlflow/while_loop.py +166 -0
  33. qiskit/circuit/controlledgate.py +274 -0
  34. qiskit/circuit/delay.py +157 -0
  35. qiskit/circuit/duration.py +80 -0
  36. qiskit/circuit/equivalence.py +94 -0
  37. qiskit/circuit/equivalence_library.py +18 -0
  38. qiskit/circuit/exceptions.py +19 -0
  39. qiskit/circuit/gate.py +261 -0
  40. qiskit/circuit/instruction.py +564 -0
  41. qiskit/circuit/instructionset.py +132 -0
  42. qiskit/circuit/library/__init__.py +984 -0
  43. qiskit/circuit/library/arithmetic/__init__.py +40 -0
  44. qiskit/circuit/library/arithmetic/adders/__init__.py +18 -0
  45. qiskit/circuit/library/arithmetic/adders/adder.py +235 -0
  46. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +123 -0
  47. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +129 -0
  48. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +95 -0
  49. qiskit/circuit/library/arithmetic/exact_reciprocal.py +131 -0
  50. qiskit/circuit/library/arithmetic/functional_pauli_rotations.py +114 -0
  51. qiskit/circuit/library/arithmetic/integer_comparator.py +200 -0
  52. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +363 -0
  53. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +243 -0
  54. qiskit/circuit/library/arithmetic/multipliers/__init__.py +17 -0
  55. qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +145 -0
  56. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +201 -0
  57. qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +108 -0
  58. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +502 -0
  59. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +387 -0
  60. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +493 -0
  61. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +389 -0
  62. qiskit/circuit/library/arithmetic/quadratic_form.py +364 -0
  63. qiskit/circuit/library/arithmetic/weighted_adder.py +409 -0
  64. qiskit/circuit/library/basis_change/__init__.py +15 -0
  65. qiskit/circuit/library/basis_change/qft.py +316 -0
  66. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  67. qiskit/circuit/library/blueprintcircuit.py +316 -0
  68. qiskit/circuit/library/boolean_logic/__init__.py +18 -0
  69. qiskit/circuit/library/boolean_logic/inner_product.py +157 -0
  70. qiskit/circuit/library/boolean_logic/quantum_and.py +204 -0
  71. qiskit/circuit/library/boolean_logic/quantum_or.py +206 -0
  72. qiskit/circuit/library/boolean_logic/quantum_xor.py +167 -0
  73. qiskit/circuit/library/data_preparation/__init__.py +57 -0
  74. qiskit/circuit/library/data_preparation/_z_feature_map.py +115 -0
  75. qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
  76. qiskit/circuit/library/data_preparation/initializer.py +107 -0
  77. qiskit/circuit/library/data_preparation/pauli_feature_map.py +656 -0
  78. qiskit/circuit/library/data_preparation/state_preparation.py +336 -0
  79. qiskit/circuit/library/fourier_checking.py +160 -0
  80. qiskit/circuit/library/generalized_gates/__init__.py +30 -0
  81. qiskit/circuit/library/generalized_gates/diagonal.py +159 -0
  82. qiskit/circuit/library/generalized_gates/gms.py +175 -0
  83. qiskit/circuit/library/generalized_gates/gr.py +219 -0
  84. qiskit/circuit/library/generalized_gates/isometry.py +370 -0
  85. qiskit/circuit/library/generalized_gates/linear_function.py +318 -0
  86. qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +143 -0
  87. qiskit/circuit/library/generalized_gates/mcmt.py +316 -0
  88. qiskit/circuit/library/generalized_gates/pauli.py +84 -0
  89. qiskit/circuit/library/generalized_gates/permutation.py +198 -0
  90. qiskit/circuit/library/generalized_gates/rv.py +96 -0
  91. qiskit/circuit/library/generalized_gates/uc.py +303 -0
  92. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +164 -0
  93. qiskit/circuit/library/generalized_gates/ucrx.py +32 -0
  94. qiskit/circuit/library/generalized_gates/ucry.py +32 -0
  95. qiskit/circuit/library/generalized_gates/ucrz.py +32 -0
  96. qiskit/circuit/library/generalized_gates/unitary.py +217 -0
  97. qiskit/circuit/library/graph_state.py +172 -0
  98. qiskit/circuit/library/grover_operator.py +583 -0
  99. qiskit/circuit/library/hamiltonian_gate.py +142 -0
  100. qiskit/circuit/library/hidden_linear_function.py +163 -0
  101. qiskit/circuit/library/iqp.py +180 -0
  102. qiskit/circuit/library/n_local/__init__.py +45 -0
  103. qiskit/circuit/library/n_local/efficient_su2.py +282 -0
  104. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +520 -0
  105. qiskit/circuit/library/n_local/excitation_preserving.py +303 -0
  106. qiskit/circuit/library/n_local/n_local.py +1477 -0
  107. qiskit/circuit/library/n_local/pauli_two_design.py +246 -0
  108. qiskit/circuit/library/n_local/qaoa_ansatz.py +367 -0
  109. qiskit/circuit/library/n_local/real_amplitudes.py +312 -0
  110. qiskit/circuit/library/n_local/two_local.py +289 -0
  111. qiskit/circuit/library/overlap.py +183 -0
  112. qiskit/circuit/library/pauli_evolution.py +201 -0
  113. qiskit/circuit/library/phase_estimation.py +177 -0
  114. qiskit/circuit/library/phase_oracle.py +239 -0
  115. qiskit/circuit/library/quantum_volume.py +180 -0
  116. qiskit/circuit/library/standard_gates/__init__.py +141 -0
  117. qiskit/circuit/library/standard_gates/dcx.py +77 -0
  118. qiskit/circuit/library/standard_gates/ecr.py +129 -0
  119. qiskit/circuit/library/standard_gates/equivalence_library.py +1800 -0
  120. qiskit/circuit/library/standard_gates/global_phase.py +84 -0
  121. qiskit/circuit/library/standard_gates/h.py +253 -0
  122. qiskit/circuit/library/standard_gates/i.py +76 -0
  123. qiskit/circuit/library/standard_gates/iswap.py +133 -0
  124. qiskit/circuit/library/standard_gates/p.py +422 -0
  125. qiskit/circuit/library/standard_gates/r.py +114 -0
  126. qiskit/circuit/library/standard_gates/rx.py +293 -0
  127. qiskit/circuit/library/standard_gates/rxx.py +180 -0
  128. qiskit/circuit/library/standard_gates/ry.py +286 -0
  129. qiskit/circuit/library/standard_gates/ryy.py +180 -0
  130. qiskit/circuit/library/standard_gates/rz.py +307 -0
  131. qiskit/circuit/library/standard_gates/rzx.py +226 -0
  132. qiskit/circuit/library/standard_gates/rzz.py +193 -0
  133. qiskit/circuit/library/standard_gates/s.py +419 -0
  134. qiskit/circuit/library/standard_gates/swap.py +281 -0
  135. qiskit/circuit/library/standard_gates/sx.py +310 -0
  136. qiskit/circuit/library/standard_gates/t.py +178 -0
  137. qiskit/circuit/library/standard_gates/u.py +395 -0
  138. qiskit/circuit/library/standard_gates/u1.py +490 -0
  139. qiskit/circuit/library/standard_gates/u2.py +145 -0
  140. qiskit/circuit/library/standard_gates/u3.py +428 -0
  141. qiskit/circuit/library/standard_gates/x.py +1481 -0
  142. qiskit/circuit/library/standard_gates/xx_minus_yy.py +202 -0
  143. qiskit/circuit/library/standard_gates/xx_plus_yy.py +236 -0
  144. qiskit/circuit/library/standard_gates/y.py +257 -0
  145. qiskit/circuit/library/standard_gates/z.py +338 -0
  146. qiskit/circuit/library/templates/__init__.py +92 -0
  147. qiskit/circuit/library/templates/clifford/__init__.py +33 -0
  148. qiskit/circuit/library/templates/clifford/clifford_2_1.py +34 -0
  149. qiskit/circuit/library/templates/clifford/clifford_2_2.py +35 -0
  150. qiskit/circuit/library/templates/clifford/clifford_2_3.py +34 -0
  151. qiskit/circuit/library/templates/clifford/clifford_2_4.py +34 -0
  152. qiskit/circuit/library/templates/clifford/clifford_3_1.py +35 -0
  153. qiskit/circuit/library/templates/clifford/clifford_4_1.py +38 -0
  154. qiskit/circuit/library/templates/clifford/clifford_4_2.py +37 -0
  155. qiskit/circuit/library/templates/clifford/clifford_4_3.py +38 -0
  156. qiskit/circuit/library/templates/clifford/clifford_4_4.py +37 -0
  157. qiskit/circuit/library/templates/clifford/clifford_5_1.py +40 -0
  158. qiskit/circuit/library/templates/clifford/clifford_6_1.py +40 -0
  159. qiskit/circuit/library/templates/clifford/clifford_6_2.py +40 -0
  160. qiskit/circuit/library/templates/clifford/clifford_6_3.py +40 -0
  161. qiskit/circuit/library/templates/clifford/clifford_6_4.py +38 -0
  162. qiskit/circuit/library/templates/clifford/clifford_6_5.py +40 -0
  163. qiskit/circuit/library/templates/clifford/clifford_8_1.py +42 -0
  164. qiskit/circuit/library/templates/clifford/clifford_8_2.py +42 -0
  165. qiskit/circuit/library/templates/clifford/clifford_8_3.py +41 -0
  166. qiskit/circuit/library/templates/nct/__init__.py +67 -0
  167. qiskit/circuit/library/templates/nct/template_nct_2a_1.py +34 -0
  168. qiskit/circuit/library/templates/nct/template_nct_2a_2.py +35 -0
  169. qiskit/circuit/library/templates/nct/template_nct_2a_3.py +37 -0
  170. qiskit/circuit/library/templates/nct/template_nct_4a_1.py +43 -0
  171. qiskit/circuit/library/templates/nct/template_nct_4a_2.py +41 -0
  172. qiskit/circuit/library/templates/nct/template_nct_4a_3.py +39 -0
  173. qiskit/circuit/library/templates/nct/template_nct_4b_1.py +41 -0
  174. qiskit/circuit/library/templates/nct/template_nct_4b_2.py +39 -0
  175. qiskit/circuit/library/templates/nct/template_nct_5a_1.py +40 -0
  176. qiskit/circuit/library/templates/nct/template_nct_5a_2.py +40 -0
  177. qiskit/circuit/library/templates/nct/template_nct_5a_3.py +40 -0
  178. qiskit/circuit/library/templates/nct/template_nct_5a_4.py +39 -0
  179. qiskit/circuit/library/templates/nct/template_nct_6a_1.py +40 -0
  180. qiskit/circuit/library/templates/nct/template_nct_6a_2.py +41 -0
  181. qiskit/circuit/library/templates/nct/template_nct_6a_3.py +41 -0
  182. qiskit/circuit/library/templates/nct/template_nct_6a_4.py +41 -0
  183. qiskit/circuit/library/templates/nct/template_nct_6b_1.py +41 -0
  184. qiskit/circuit/library/templates/nct/template_nct_6b_2.py +41 -0
  185. qiskit/circuit/library/templates/nct/template_nct_6c_1.py +41 -0
  186. qiskit/circuit/library/templates/nct/template_nct_7a_1.py +43 -0
  187. qiskit/circuit/library/templates/nct/template_nct_7b_1.py +43 -0
  188. qiskit/circuit/library/templates/nct/template_nct_7c_1.py +43 -0
  189. qiskit/circuit/library/templates/nct/template_nct_7d_1.py +43 -0
  190. qiskit/circuit/library/templates/nct/template_nct_7e_1.py +43 -0
  191. qiskit/circuit/library/templates/nct/template_nct_9a_1.py +45 -0
  192. qiskit/circuit/library/templates/nct/template_nct_9c_1.py +43 -0
  193. qiskit/circuit/library/templates/nct/template_nct_9c_10.py +44 -0
  194. qiskit/circuit/library/templates/nct/template_nct_9c_11.py +44 -0
  195. qiskit/circuit/library/templates/nct/template_nct_9c_12.py +44 -0
  196. qiskit/circuit/library/templates/nct/template_nct_9c_2.py +44 -0
  197. qiskit/circuit/library/templates/nct/template_nct_9c_3.py +44 -0
  198. qiskit/circuit/library/templates/nct/template_nct_9c_4.py +44 -0
  199. qiskit/circuit/library/templates/nct/template_nct_9c_5.py +44 -0
  200. qiskit/circuit/library/templates/nct/template_nct_9c_6.py +44 -0
  201. qiskit/circuit/library/templates/nct/template_nct_9c_7.py +44 -0
  202. qiskit/circuit/library/templates/nct/template_nct_9c_8.py +44 -0
  203. qiskit/circuit/library/templates/nct/template_nct_9c_9.py +44 -0
  204. qiskit/circuit/library/templates/nct/template_nct_9d_1.py +43 -0
  205. qiskit/circuit/library/templates/nct/template_nct_9d_10.py +44 -0
  206. qiskit/circuit/library/templates/nct/template_nct_9d_2.py +44 -0
  207. qiskit/circuit/library/templates/nct/template_nct_9d_3.py +44 -0
  208. qiskit/circuit/library/templates/nct/template_nct_9d_4.py +44 -0
  209. qiskit/circuit/library/templates/nct/template_nct_9d_5.py +44 -0
  210. qiskit/circuit/library/templates/nct/template_nct_9d_6.py +44 -0
  211. qiskit/circuit/library/templates/nct/template_nct_9d_7.py +44 -0
  212. qiskit/circuit/library/templates/nct/template_nct_9d_8.py +44 -0
  213. qiskit/circuit/library/templates/nct/template_nct_9d_9.py +44 -0
  214. qiskit/circuit/library/templates/rzx/__init__.py +25 -0
  215. qiskit/circuit/library/templates/rzx/rzx_cy.py +47 -0
  216. qiskit/circuit/library/templates/rzx/rzx_xz.py +54 -0
  217. qiskit/circuit/library/templates/rzx/rzx_yz.py +45 -0
  218. qiskit/circuit/library/templates/rzx/rzx_zz1.py +69 -0
  219. qiskit/circuit/library/templates/rzx/rzx_zz2.py +59 -0
  220. qiskit/circuit/library/templates/rzx/rzx_zz3.py +59 -0
  221. qiskit/circuit/measure.py +53 -0
  222. qiskit/circuit/operation.py +68 -0
  223. qiskit/circuit/parameter.py +179 -0
  224. qiskit/circuit/parameterexpression.py +703 -0
  225. qiskit/circuit/parametertable.py +119 -0
  226. qiskit/circuit/parametervector.py +140 -0
  227. qiskit/circuit/quantumcircuit.py +7540 -0
  228. qiskit/circuit/quantumcircuitdata.py +136 -0
  229. qiskit/circuit/random/__init__.py +15 -0
  230. qiskit/circuit/random/utils.py +366 -0
  231. qiskit/circuit/reset.py +37 -0
  232. qiskit/circuit/singleton.py +600 -0
  233. qiskit/circuit/store.py +89 -0
  234. qiskit/circuit/tools/__init__.py +16 -0
  235. qiskit/circuit/tools/pi_check.py +193 -0
  236. qiskit/circuit/twirling.py +145 -0
  237. qiskit/compiler/__init__.py +27 -0
  238. qiskit/compiler/transpiler.py +375 -0
  239. qiskit/converters/__init__.py +74 -0
  240. qiskit/converters/circuit_to_dag.py +80 -0
  241. qiskit/converters/circuit_to_dagdependency.py +49 -0
  242. qiskit/converters/circuit_to_dagdependency_v2.py +46 -0
  243. qiskit/converters/circuit_to_gate.py +107 -0
  244. qiskit/converters/circuit_to_instruction.py +142 -0
  245. qiskit/converters/dag_to_circuit.py +79 -0
  246. qiskit/converters/dag_to_dagdependency.py +54 -0
  247. qiskit/converters/dag_to_dagdependency_v2.py +43 -0
  248. qiskit/converters/dagdependency_to_circuit.py +40 -0
  249. qiskit/converters/dagdependency_to_dag.py +48 -0
  250. qiskit/dagcircuit/__init__.py +55 -0
  251. qiskit/dagcircuit/collect_blocks.py +407 -0
  252. qiskit/dagcircuit/dagcircuit.py +24 -0
  253. qiskit/dagcircuit/dagdependency.py +612 -0
  254. qiskit/dagcircuit/dagdependency_v2.py +566 -0
  255. qiskit/dagcircuit/dagdepnode.py +160 -0
  256. qiskit/dagcircuit/dagnode.py +188 -0
  257. qiskit/dagcircuit/exceptions.py +42 -0
  258. qiskit/exceptions.py +153 -0
  259. qiskit/passmanager/__init__.py +258 -0
  260. qiskit/passmanager/base_tasks.py +230 -0
  261. qiskit/passmanager/compilation_status.py +74 -0
  262. qiskit/passmanager/exceptions.py +19 -0
  263. qiskit/passmanager/flow_controllers.py +116 -0
  264. qiskit/passmanager/passmanager.py +353 -0
  265. qiskit/primitives/__init__.py +490 -0
  266. qiskit/primitives/backend_estimator_v2.py +530 -0
  267. qiskit/primitives/backend_sampler_v2.py +339 -0
  268. qiskit/primitives/base/__init__.py +20 -0
  269. qiskit/primitives/base/base_estimator.py +247 -0
  270. qiskit/primitives/base/base_primitive_job.py +78 -0
  271. qiskit/primitives/base/base_primitive_v1.py +45 -0
  272. qiskit/primitives/base/base_result_v1.py +65 -0
  273. qiskit/primitives/base/base_sampler.py +196 -0
  274. qiskit/primitives/base/estimator_result_v1.py +46 -0
  275. qiskit/primitives/base/sampler_result_v1.py +45 -0
  276. qiskit/primitives/base/validation_v1.py +250 -0
  277. qiskit/primitives/containers/__init__.py +26 -0
  278. qiskit/primitives/containers/bindings_array.py +391 -0
  279. qiskit/primitives/containers/bit_array.py +764 -0
  280. qiskit/primitives/containers/data_bin.py +175 -0
  281. qiskit/primitives/containers/estimator_pub.py +222 -0
  282. qiskit/primitives/containers/object_array.py +94 -0
  283. qiskit/primitives/containers/observables_array.py +296 -0
  284. qiskit/primitives/containers/primitive_result.py +53 -0
  285. qiskit/primitives/containers/pub_result.py +51 -0
  286. qiskit/primitives/containers/sampler_pub.py +193 -0
  287. qiskit/primitives/containers/sampler_pub_result.py +74 -0
  288. qiskit/primitives/containers/shape.py +129 -0
  289. qiskit/primitives/primitive_job.py +81 -0
  290. qiskit/primitives/statevector_estimator.py +175 -0
  291. qiskit/primitives/statevector_sampler.py +290 -0
  292. qiskit/primitives/utils.py +72 -0
  293. qiskit/providers/__init__.py +677 -0
  294. qiskit/providers/backend.py +364 -0
  295. qiskit/providers/basic_provider/__init__.py +47 -0
  296. qiskit/providers/basic_provider/basic_provider.py +121 -0
  297. qiskit/providers/basic_provider/basic_provider_job.py +65 -0
  298. qiskit/providers/basic_provider/basic_provider_tools.py +218 -0
  299. qiskit/providers/basic_provider/basic_simulator.py +693 -0
  300. qiskit/providers/basic_provider/exceptions.py +30 -0
  301. qiskit/providers/exceptions.py +33 -0
  302. qiskit/providers/fake_provider/__init__.py +69 -0
  303. qiskit/providers/fake_provider/generic_backend_v2.py +374 -0
  304. qiskit/providers/fake_provider/utils/__init__.py +15 -0
  305. qiskit/providers/job.py +147 -0
  306. qiskit/providers/jobstatus.py +30 -0
  307. qiskit/providers/options.py +273 -0
  308. qiskit/providers/providerutils.py +110 -0
  309. qiskit/qasm/libs/dummy/stdgates.inc +75 -0
  310. qiskit/qasm/libs/qelib1.inc +266 -0
  311. qiskit/qasm/libs/stdgates.inc +82 -0
  312. qiskit/qasm2/__init__.py +669 -0
  313. qiskit/qasm2/exceptions.py +27 -0
  314. qiskit/qasm2/export.py +364 -0
  315. qiskit/qasm2/parse.py +438 -0
  316. qiskit/qasm3/__init__.py +372 -0
  317. qiskit/qasm3/ast.py +782 -0
  318. qiskit/qasm3/exceptions.py +27 -0
  319. qiskit/qasm3/experimental.py +70 -0
  320. qiskit/qasm3/exporter.py +1340 -0
  321. qiskit/qasm3/printer.py +608 -0
  322. qiskit/qpy/__init__.py +1965 -0
  323. qiskit/qpy/binary_io/__init__.py +35 -0
  324. qiskit/qpy/binary_io/circuits.py +1455 -0
  325. qiskit/qpy/binary_io/parse_sympy_repr.py +121 -0
  326. qiskit/qpy/binary_io/schedules.py +308 -0
  327. qiskit/qpy/binary_io/value.py +1165 -0
  328. qiskit/qpy/common.py +353 -0
  329. qiskit/qpy/exceptions.py +53 -0
  330. qiskit/qpy/formats.py +442 -0
  331. qiskit/qpy/interface.py +344 -0
  332. qiskit/qpy/type_keys.py +409 -0
  333. qiskit/quantum_info/__init__.py +162 -0
  334. qiskit/quantum_info/analysis/__init__.py +17 -0
  335. qiskit/quantum_info/analysis/average.py +47 -0
  336. qiskit/quantum_info/analysis/distance.py +104 -0
  337. qiskit/quantum_info/analysis/make_observable.py +44 -0
  338. qiskit/quantum_info/analysis/z2_symmetries.py +484 -0
  339. qiskit/quantum_info/operators/__init__.py +28 -0
  340. qiskit/quantum_info/operators/base_operator.py +145 -0
  341. qiskit/quantum_info/operators/channel/__init__.py +29 -0
  342. qiskit/quantum_info/operators/channel/chi.py +191 -0
  343. qiskit/quantum_info/operators/channel/choi.py +218 -0
  344. qiskit/quantum_info/operators/channel/kraus.py +337 -0
  345. qiskit/quantum_info/operators/channel/ptm.py +204 -0
  346. qiskit/quantum_info/operators/channel/quantum_channel.py +348 -0
  347. qiskit/quantum_info/operators/channel/stinespring.py +296 -0
  348. qiskit/quantum_info/operators/channel/superop.py +373 -0
  349. qiskit/quantum_info/operators/channel/transformations.py +490 -0
  350. qiskit/quantum_info/operators/custom_iterator.py +48 -0
  351. qiskit/quantum_info/operators/dihedral/__init__.py +18 -0
  352. qiskit/quantum_info/operators/dihedral/dihedral.py +511 -0
  353. qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +216 -0
  354. qiskit/quantum_info/operators/dihedral/polynomial.py +313 -0
  355. qiskit/quantum_info/operators/dihedral/random.py +64 -0
  356. qiskit/quantum_info/operators/linear_op.py +25 -0
  357. qiskit/quantum_info/operators/measures.py +418 -0
  358. qiskit/quantum_info/operators/mixins/__init__.py +52 -0
  359. qiskit/quantum_info/operators/mixins/adjoint.py +52 -0
  360. qiskit/quantum_info/operators/mixins/group.py +171 -0
  361. qiskit/quantum_info/operators/mixins/linear.py +84 -0
  362. qiskit/quantum_info/operators/mixins/multiply.py +62 -0
  363. qiskit/quantum_info/operators/mixins/tolerances.py +72 -0
  364. qiskit/quantum_info/operators/op_shape.py +525 -0
  365. qiskit/quantum_info/operators/operator.py +869 -0
  366. qiskit/quantum_info/operators/operator_utils.py +76 -0
  367. qiskit/quantum_info/operators/predicates.py +183 -0
  368. qiskit/quantum_info/operators/random.py +154 -0
  369. qiskit/quantum_info/operators/scalar_op.py +254 -0
  370. qiskit/quantum_info/operators/symplectic/__init__.py +23 -0
  371. qiskit/quantum_info/operators/symplectic/base_pauli.py +719 -0
  372. qiskit/quantum_info/operators/symplectic/clifford.py +1032 -0
  373. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +558 -0
  374. qiskit/quantum_info/operators/symplectic/pauli.py +755 -0
  375. qiskit/quantum_info/operators/symplectic/pauli_list.py +1242 -0
  376. qiskit/quantum_info/operators/symplectic/pauli_utils.py +40 -0
  377. qiskit/quantum_info/operators/symplectic/random.py +117 -0
  378. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1239 -0
  379. qiskit/quantum_info/operators/utils/__init__.py +20 -0
  380. qiskit/quantum_info/operators/utils/anti_commutator.py +36 -0
  381. qiskit/quantum_info/operators/utils/commutator.py +36 -0
  382. qiskit/quantum_info/operators/utils/double_commutator.py +76 -0
  383. qiskit/quantum_info/quaternion.py +156 -0
  384. qiskit/quantum_info/random.py +26 -0
  385. qiskit/quantum_info/states/__init__.py +28 -0
  386. qiskit/quantum_info/states/densitymatrix.py +857 -0
  387. qiskit/quantum_info/states/measures.py +288 -0
  388. qiskit/quantum_info/states/quantum_state.py +503 -0
  389. qiskit/quantum_info/states/random.py +157 -0
  390. qiskit/quantum_info/states/stabilizerstate.py +805 -0
  391. qiskit/quantum_info/states/statevector.py +977 -0
  392. qiskit/quantum_info/states/utils.py +247 -0
  393. qiskit/result/__init__.py +61 -0
  394. qiskit/result/counts.py +189 -0
  395. qiskit/result/distributions/__init__.py +17 -0
  396. qiskit/result/distributions/probability.py +100 -0
  397. qiskit/result/distributions/quasi.py +154 -0
  398. qiskit/result/exceptions.py +40 -0
  399. qiskit/result/models.py +241 -0
  400. qiskit/result/postprocess.py +239 -0
  401. qiskit/result/result.py +385 -0
  402. qiskit/result/sampled_expval.py +74 -0
  403. qiskit/result/utils.py +294 -0
  404. qiskit/synthesis/__init__.py +240 -0
  405. qiskit/synthesis/arithmetic/__init__.py +18 -0
  406. qiskit/synthesis/arithmetic/adders/__init__.py +17 -0
  407. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
  408. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +103 -0
  409. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
  410. qiskit/synthesis/arithmetic/comparators/__init__.py +16 -0
  411. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  412. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  413. qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
  414. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +103 -0
  415. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +100 -0
  416. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  417. qiskit/synthesis/boolean/__init__.py +13 -0
  418. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  419. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  420. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  421. qiskit/synthesis/clifford/__init__.py +19 -0
  422. qiskit/synthesis/clifford/clifford_decompose_ag.py +178 -0
  423. qiskit/synthesis/clifford/clifford_decompose_bm.py +46 -0
  424. qiskit/synthesis/clifford/clifford_decompose_full.py +64 -0
  425. qiskit/synthesis/clifford/clifford_decompose_greedy.py +58 -0
  426. qiskit/synthesis/clifford/clifford_decompose_layers.py +447 -0
  427. qiskit/synthesis/cnotdihedral/__init__.py +17 -0
  428. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +52 -0
  429. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +141 -0
  430. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_two_qubits.py +266 -0
  431. qiskit/synthesis/discrete_basis/__init__.py +16 -0
  432. qiskit/synthesis/discrete_basis/commutator_decompose.py +265 -0
  433. qiskit/synthesis/discrete_basis/gate_sequence.py +421 -0
  434. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +165 -0
  435. qiskit/synthesis/discrete_basis/solovay_kitaev.py +240 -0
  436. qiskit/synthesis/evolution/__init__.py +21 -0
  437. qiskit/synthesis/evolution/evolution_synthesis.py +48 -0
  438. qiskit/synthesis/evolution/lie_trotter.py +120 -0
  439. qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
  440. qiskit/synthesis/evolution/pauli_network.py +80 -0
  441. qiskit/synthesis/evolution/product_formula.py +313 -0
  442. qiskit/synthesis/evolution/qdrift.py +130 -0
  443. qiskit/synthesis/evolution/suzuki_trotter.py +224 -0
  444. qiskit/synthesis/linear/__init__.py +26 -0
  445. qiskit/synthesis/linear/cnot_synth.py +69 -0
  446. qiskit/synthesis/linear/linear_circuits_utils.py +128 -0
  447. qiskit/synthesis/linear/linear_depth_lnn.py +61 -0
  448. qiskit/synthesis/linear/linear_matrix_utils.py +27 -0
  449. qiskit/synthesis/linear_phase/__init__.py +17 -0
  450. qiskit/synthesis/linear_phase/cnot_phase_synth.py +206 -0
  451. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +61 -0
  452. qiskit/synthesis/linear_phase/cz_depth_lnn.py +58 -0
  453. qiskit/synthesis/multi_controlled/__init__.py +25 -0
  454. qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
  455. qiskit/synthesis/multi_controlled/mcx_synthesis.py +359 -0
  456. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  457. qiskit/synthesis/one_qubit/__init__.py +15 -0
  458. qiskit/synthesis/one_qubit/one_qubit_decompose.py +288 -0
  459. qiskit/synthesis/permutation/__init__.py +18 -0
  460. qiskit/synthesis/permutation/permutation_full.py +78 -0
  461. qiskit/synthesis/permutation/permutation_lnn.py +54 -0
  462. qiskit/synthesis/permutation/permutation_reverse_lnn.py +93 -0
  463. qiskit/synthesis/permutation/permutation_utils.py +16 -0
  464. qiskit/synthesis/qft/__init__.py +16 -0
  465. qiskit/synthesis/qft/qft_decompose_full.py +97 -0
  466. qiskit/synthesis/qft/qft_decompose_lnn.py +79 -0
  467. qiskit/synthesis/stabilizer/__init__.py +16 -0
  468. qiskit/synthesis/stabilizer/stabilizer_circuit.py +149 -0
  469. qiskit/synthesis/stabilizer/stabilizer_decompose.py +194 -0
  470. qiskit/synthesis/two_qubit/__init__.py +20 -0
  471. qiskit/synthesis/two_qubit/local_invariance.py +63 -0
  472. qiskit/synthesis/two_qubit/two_qubit_decompose.py +583 -0
  473. qiskit/synthesis/two_qubit/xx_decompose/__init__.py +19 -0
  474. qiskit/synthesis/two_qubit/xx_decompose/circuits.py +300 -0
  475. qiskit/synthesis/two_qubit/xx_decompose/decomposer.py +324 -0
  476. qiskit/synthesis/two_qubit/xx_decompose/embodiments.py +163 -0
  477. qiskit/synthesis/two_qubit/xx_decompose/paths.py +412 -0
  478. qiskit/synthesis/two_qubit/xx_decompose/polytopes.py +262 -0
  479. qiskit/synthesis/two_qubit/xx_decompose/utilities.py +40 -0
  480. qiskit/synthesis/two_qubit/xx_decompose/weyl.py +133 -0
  481. qiskit/synthesis/unitary/__init__.py +13 -0
  482. qiskit/synthesis/unitary/aqc/__init__.py +177 -0
  483. qiskit/synthesis/unitary/aqc/approximate.py +116 -0
  484. qiskit/synthesis/unitary/aqc/aqc.py +175 -0
  485. qiskit/synthesis/unitary/aqc/cnot_structures.py +300 -0
  486. qiskit/synthesis/unitary/aqc/cnot_unit_circuit.py +103 -0
  487. qiskit/synthesis/unitary/aqc/cnot_unit_objective.py +299 -0
  488. qiskit/synthesis/unitary/aqc/elementary_operations.py +108 -0
  489. qiskit/synthesis/unitary/aqc/fast_gradient/__init__.py +164 -0
  490. qiskit/synthesis/unitary/aqc/fast_gradient/fast_grad_utils.py +237 -0
  491. qiskit/synthesis/unitary/aqc/fast_gradient/fast_gradient.py +226 -0
  492. qiskit/synthesis/unitary/aqc/fast_gradient/layer.py +370 -0
  493. qiskit/synthesis/unitary/aqc/fast_gradient/pmatrix.py +312 -0
  494. qiskit/synthesis/unitary/qsd.py +288 -0
  495. qiskit/transpiler/__init__.py +1345 -0
  496. qiskit/transpiler/basepasses.py +190 -0
  497. qiskit/transpiler/coupling.py +500 -0
  498. qiskit/transpiler/exceptions.py +59 -0
  499. qiskit/transpiler/instruction_durations.py +281 -0
  500. qiskit/transpiler/layout.py +740 -0
  501. qiskit/transpiler/passes/__init__.py +276 -0
  502. qiskit/transpiler/passes/analysis/__init__.py +23 -0
  503. qiskit/transpiler/passes/analysis/count_ops.py +30 -0
  504. qiskit/transpiler/passes/analysis/count_ops_longest_path.py +26 -0
  505. qiskit/transpiler/passes/analysis/dag_longest_path.py +24 -0
  506. qiskit/transpiler/passes/analysis/depth.py +33 -0
  507. qiskit/transpiler/passes/analysis/num_qubits.py +26 -0
  508. qiskit/transpiler/passes/analysis/num_tensor_factors.py +26 -0
  509. qiskit/transpiler/passes/analysis/resource_estimation.py +41 -0
  510. qiskit/transpiler/passes/analysis/size.py +36 -0
  511. qiskit/transpiler/passes/analysis/width.py +27 -0
  512. qiskit/transpiler/passes/basis/__init__.py +19 -0
  513. qiskit/transpiler/passes/basis/basis_translator.py +138 -0
  514. qiskit/transpiler/passes/basis/decompose.py +137 -0
  515. qiskit/transpiler/passes/basis/translate_parameterized.py +175 -0
  516. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +84 -0
  517. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +110 -0
  518. qiskit/transpiler/passes/layout/__init__.py +26 -0
  519. qiskit/transpiler/passes/layout/_csp_custom_solver.py +65 -0
  520. qiskit/transpiler/passes/layout/apply_layout.py +128 -0
  521. qiskit/transpiler/passes/layout/csp_layout.py +132 -0
  522. qiskit/transpiler/passes/layout/dense_layout.py +177 -0
  523. qiskit/transpiler/passes/layout/disjoint_utils.py +219 -0
  524. qiskit/transpiler/passes/layout/enlarge_with_ancilla.py +49 -0
  525. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +116 -0
  526. qiskit/transpiler/passes/layout/layout_2q_distance.py +77 -0
  527. qiskit/transpiler/passes/layout/sabre_layout.py +506 -0
  528. qiskit/transpiler/passes/layout/sabre_pre_layout.py +225 -0
  529. qiskit/transpiler/passes/layout/set_layout.py +69 -0
  530. qiskit/transpiler/passes/layout/trivial_layout.py +66 -0
  531. qiskit/transpiler/passes/layout/vf2_layout.py +256 -0
  532. qiskit/transpiler/passes/layout/vf2_post_layout.py +376 -0
  533. qiskit/transpiler/passes/layout/vf2_utils.py +235 -0
  534. qiskit/transpiler/passes/optimization/__init__.py +42 -0
  535. qiskit/transpiler/passes/optimization/_gate_extension.py +80 -0
  536. qiskit/transpiler/passes/optimization/collect_1q_runs.py +31 -0
  537. qiskit/transpiler/passes/optimization/collect_2q_blocks.py +35 -0
  538. qiskit/transpiler/passes/optimization/collect_and_collapse.py +117 -0
  539. qiskit/transpiler/passes/optimization/collect_cliffords.py +109 -0
  540. qiskit/transpiler/passes/optimization/collect_linear_functions.py +85 -0
  541. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +242 -0
  542. qiskit/transpiler/passes/optimization/commutation_analysis.py +44 -0
  543. qiskit/transpiler/passes/optimization/commutative_cancellation.py +82 -0
  544. qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +140 -0
  545. qiskit/transpiler/passes/optimization/consolidate_blocks.py +176 -0
  546. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  547. qiskit/transpiler/passes/optimization/elide_permutations.py +91 -0
  548. qiskit/transpiler/passes/optimization/hoare_opt.py +420 -0
  549. qiskit/transpiler/passes/optimization/inverse_cancellation.py +95 -0
  550. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  551. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +267 -0
  552. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +250 -0
  553. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +384 -0
  554. qiskit/transpiler/passes/optimization/optimize_annotated.py +449 -0
  555. qiskit/transpiler/passes/optimization/optimize_cliffords.py +89 -0
  556. qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +71 -0
  557. qiskit/transpiler/passes/optimization/remove_diagonal_gates_before_measure.py +41 -0
  558. qiskit/transpiler/passes/optimization/remove_final_reset.py +37 -0
  559. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +70 -0
  560. qiskit/transpiler/passes/optimization/remove_reset_in_zero_state.py +37 -0
  561. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +50 -0
  562. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +63 -0
  563. qiskit/transpiler/passes/optimization/template_matching/__init__.py +19 -0
  564. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +749 -0
  565. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +452 -0
  566. qiskit/transpiler/passes/optimization/template_matching/maximal_matches.py +77 -0
  567. qiskit/transpiler/passes/optimization/template_matching/template_matching.py +370 -0
  568. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +639 -0
  569. qiskit/transpiler/passes/optimization/template_optimization.py +158 -0
  570. qiskit/transpiler/passes/routing/__init__.py +21 -0
  571. qiskit/transpiler/passes/routing/algorithms/__init__.py +33 -0
  572. qiskit/transpiler/passes/routing/algorithms/token_swapper.py +105 -0
  573. qiskit/transpiler/passes/routing/algorithms/types.py +46 -0
  574. qiskit/transpiler/passes/routing/algorithms/util.py +103 -0
  575. qiskit/transpiler/passes/routing/basic_swap.py +166 -0
  576. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/__init__.py +25 -0
  577. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_block.py +60 -0
  578. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +397 -0
  579. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/pauli_2q_evolution_commutation.py +145 -0
  580. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +306 -0
  581. qiskit/transpiler/passes/routing/layout_transformation.py +119 -0
  582. qiskit/transpiler/passes/routing/lookahead_swap.py +390 -0
  583. qiskit/transpiler/passes/routing/sabre_swap.py +463 -0
  584. qiskit/transpiler/passes/routing/star_prerouting.py +408 -0
  585. qiskit/transpiler/passes/routing/utils.py +35 -0
  586. qiskit/transpiler/passes/scheduling/__init__.py +21 -0
  587. qiskit/transpiler/passes/scheduling/alignments/__init__.py +79 -0
  588. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +70 -0
  589. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +251 -0
  590. qiskit/transpiler/passes/scheduling/padding/__init__.py +16 -0
  591. qiskit/transpiler/passes/scheduling/padding/base_padding.py +284 -0
  592. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +415 -0
  593. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +90 -0
  594. qiskit/transpiler/passes/scheduling/scheduling/__init__.py +17 -0
  595. qiskit/transpiler/passes/scheduling/scheduling/alap.py +93 -0
  596. qiskit/transpiler/passes/scheduling/scheduling/asap.py +100 -0
  597. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +88 -0
  598. qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
  599. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +237 -0
  600. qiskit/transpiler/passes/synthesis/__init__.py +20 -0
  601. qiskit/transpiler/passes/synthesis/aqc_plugin.py +153 -0
  602. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  603. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +429 -0
  604. qiskit/transpiler/passes/synthesis/hls_plugins.py +1963 -0
  605. qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +41 -0
  606. qiskit/transpiler/passes/synthesis/plugin.py +738 -0
  607. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +313 -0
  608. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +425 -0
  609. qiskit/transpiler/passes/utils/__init__.py +32 -0
  610. qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +41 -0
  611. qiskit/transpiler/passes/utils/check_gate_direction.py +60 -0
  612. qiskit/transpiler/passes/utils/check_map.py +78 -0
  613. qiskit/transpiler/passes/utils/contains_instruction.py +45 -0
  614. qiskit/transpiler/passes/utils/control_flow.py +61 -0
  615. qiskit/transpiler/passes/utils/dag_fixed_point.py +36 -0
  616. qiskit/transpiler/passes/utils/error.py +69 -0
  617. qiskit/transpiler/passes/utils/filter_op_nodes.py +66 -0
  618. qiskit/transpiler/passes/utils/fixed_point.py +48 -0
  619. qiskit/transpiler/passes/utils/gate_direction.py +93 -0
  620. qiskit/transpiler/passes/utils/gates_basis.py +51 -0
  621. qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +163 -0
  622. qiskit/transpiler/passes/utils/minimum_point.py +118 -0
  623. qiskit/transpiler/passes/utils/remove_barriers.py +50 -0
  624. qiskit/transpiler/passes/utils/remove_final_measurements.py +121 -0
  625. qiskit/transpiler/passes/utils/unroll_forloops.py +81 -0
  626. qiskit/transpiler/passmanager.py +503 -0
  627. qiskit/transpiler/passmanager_config.py +151 -0
  628. qiskit/transpiler/preset_passmanagers/__init__.py +93 -0
  629. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +993 -0
  630. qiskit/transpiler/preset_passmanagers/common.py +672 -0
  631. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +437 -0
  632. qiskit/transpiler/preset_passmanagers/level0.py +104 -0
  633. qiskit/transpiler/preset_passmanagers/level1.py +108 -0
  634. qiskit/transpiler/preset_passmanagers/level2.py +109 -0
  635. qiskit/transpiler/preset_passmanagers/level3.py +110 -0
  636. qiskit/transpiler/preset_passmanagers/plugin.py +346 -0
  637. qiskit/transpiler/target.py +905 -0
  638. qiskit/transpiler/timing_constraints.py +59 -0
  639. qiskit/user_config.py +266 -0
  640. qiskit/utils/__init__.py +90 -0
  641. qiskit/utils/classtools.py +146 -0
  642. qiskit/utils/deprecation.py +382 -0
  643. qiskit/utils/lazy_tester.py +363 -0
  644. qiskit/utils/optionals.py +354 -0
  645. qiskit/utils/parallel.py +318 -0
  646. qiskit/utils/units.py +146 -0
  647. qiskit/version.py +84 -0
  648. qiskit/visualization/__init__.py +290 -0
  649. qiskit/visualization/array.py +207 -0
  650. qiskit/visualization/bloch.py +778 -0
  651. qiskit/visualization/circuit/__init__.py +15 -0
  652. qiskit/visualization/circuit/_utils.py +675 -0
  653. qiskit/visualization/circuit/circuit_visualization.py +735 -0
  654. qiskit/visualization/circuit/latex.py +661 -0
  655. qiskit/visualization/circuit/matplotlib.py +2019 -0
  656. qiskit/visualization/circuit/qcstyle.py +278 -0
  657. qiskit/visualization/circuit/styles/__init__.py +13 -0
  658. qiskit/visualization/circuit/styles/bw.json +202 -0
  659. qiskit/visualization/circuit/styles/clifford.json +202 -0
  660. qiskit/visualization/circuit/styles/iqp-dark.json +214 -0
  661. qiskit/visualization/circuit/styles/iqp.json +214 -0
  662. qiskit/visualization/circuit/styles/textbook.json +202 -0
  663. qiskit/visualization/circuit/text.py +1849 -0
  664. qiskit/visualization/circuit_visualization.py +19 -0
  665. qiskit/visualization/counts_visualization.py +487 -0
  666. qiskit/visualization/dag_visualization.py +318 -0
  667. qiskit/visualization/exceptions.py +21 -0
  668. qiskit/visualization/gate_map.py +1424 -0
  669. qiskit/visualization/library.py +40 -0
  670. qiskit/visualization/pass_manager_visualization.py +312 -0
  671. qiskit/visualization/state_visualization.py +1546 -0
  672. qiskit/visualization/timeline/__init__.py +21 -0
  673. qiskit/visualization/timeline/core.py +495 -0
  674. qiskit/visualization/timeline/drawings.py +260 -0
  675. qiskit/visualization/timeline/generators.py +506 -0
  676. qiskit/visualization/timeline/interface.py +444 -0
  677. qiskit/visualization/timeline/layouts.py +115 -0
  678. qiskit/visualization/timeline/plotters/__init__.py +16 -0
  679. qiskit/visualization/timeline/plotters/base_plotter.py +58 -0
  680. qiskit/visualization/timeline/plotters/matplotlib.py +195 -0
  681. qiskit/visualization/timeline/stylesheet.py +301 -0
  682. qiskit/visualization/timeline/types.py +148 -0
  683. qiskit/visualization/transition_visualization.py +369 -0
  684. qiskit/visualization/utils.py +49 -0
  685. qiskit-2.0.3.dist-info/METADATA +220 -0
  686. qiskit-2.0.3.dist-info/RECORD +690 -0
  687. qiskit-2.0.3.dist-info/WHEEL +6 -0
  688. qiskit-2.0.3.dist-info/entry_points.txt +82 -0
  689. qiskit-2.0.3.dist-info/licenses/LICENSE.txt +203 -0
  690. qiskit-2.0.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,583 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2017, 2024.
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
+ # pylint: disable=invalid-name
14
+
15
+ """
16
+ Expand 2-qubit Unitary operators into an equivalent
17
+ decomposition over SU(2)+fixed 2q basis gate, using the KAK method.
18
+
19
+ May be exact or approximate expansion. In either case uses the minimal
20
+ number of basis applications.
21
+
22
+ Method is described in Appendix B of Cross, A. W., Bishop, L. S., Sheldon, S., Nation, P. D. &
23
+ Gambetta, J. M. Validating quantum computers using randomized model circuits.
24
+ arXiv:1811.12926 [quant-ph] (2018).
25
+ """
26
+ from __future__ import annotations
27
+ import io
28
+ import base64
29
+ import warnings
30
+ from typing import Optional, Type, TYPE_CHECKING
31
+
32
+ import logging
33
+
34
+ import numpy as np
35
+
36
+ from qiskit.circuit import QuantumRegister, QuantumCircuit, Gate, CircuitInstruction
37
+ from qiskit.circuit.library.standard_gates import (
38
+ CXGate,
39
+ U3Gate,
40
+ U2Gate,
41
+ U1Gate,
42
+ UGate,
43
+ PhaseGate,
44
+ RXGate,
45
+ RYGate,
46
+ RZGate,
47
+ SXGate,
48
+ XGate,
49
+ RGate,
50
+ )
51
+ from qiskit.exceptions import QiskitError
52
+ from qiskit.quantum_info.operators import Operator
53
+ from qiskit.synthesis.one_qubit.one_qubit_decompose import (
54
+ DEFAULT_ATOL,
55
+ )
56
+ from qiskit.utils.deprecation import deprecate_func
57
+ from qiskit._accelerate import two_qubit_decompose
58
+
59
+ if TYPE_CHECKING:
60
+ from qiskit.dagcircuit.dagcircuit import DAGCircuit, DAGOpNode
61
+
62
+ logger = logging.getLogger(__name__)
63
+
64
+
65
+ GATE_NAME_MAP = {
66
+ "cx": CXGate,
67
+ "rx": RXGate,
68
+ "sx": SXGate,
69
+ "x": XGate,
70
+ "rz": RZGate,
71
+ "u": UGate,
72
+ "p": PhaseGate,
73
+ "u1": U1Gate,
74
+ "u2": U2Gate,
75
+ "u3": U3Gate,
76
+ "ry": RYGate,
77
+ "r": RGate,
78
+ }
79
+
80
+
81
+ def decompose_two_qubit_product_gate(special_unitary_matrix: np.ndarray):
82
+ r"""Decompose :math:`U = U_l \otimes U_r` where :math:`U \in SU(4)`,
83
+ and :math:`U_l,~U_r \in SU(2)`.
84
+
85
+ Args:
86
+ special_unitary_matrix: special unitary matrix to decompose
87
+ Raises:
88
+ QiskitError: if decomposition isn't possible.
89
+ """
90
+ special_unitary_matrix = np.asarray(special_unitary_matrix, dtype=complex)
91
+ (L, R, phase) = two_qubit_decompose.decompose_two_qubit_product_gate(special_unitary_matrix)
92
+
93
+ temp = np.kron(L, R)
94
+ deviation = abs(abs(temp.conj().T.dot(special_unitary_matrix).trace()) - 4)
95
+
96
+ if deviation > 1.0e-13:
97
+ raise QiskitError(
98
+ "decompose_two_qubit_product_gate: decomposition failed: "
99
+ f"deviation too large: {deviation}"
100
+ )
101
+
102
+ return (L, R, phase)
103
+
104
+
105
+ class TwoQubitWeylDecomposition:
106
+ r"""Two-qubit Weyl decomposition.
107
+
108
+ Decompose two-qubit unitary
109
+
110
+ .. math::
111
+
112
+ U = ({K_1}^l \otimes {K_1}^r) e^{(i a XX + i b YY + i c ZZ)} ({K_2}^l \otimes {K_2}^r)
113
+
114
+ where
115
+
116
+ .. math::
117
+
118
+ U \in U(4),~
119
+ {K_1}^l, {K_1}^r, {K_2}^l, {K_2}^r \in SU(2)
120
+
121
+ and we stay in the "Weyl Chamber"
122
+
123
+ .. math::
124
+
125
+ \pi /4 \geq a \geq b \geq |c|
126
+
127
+ This class avoids some problems of numerical instability near high-symmetry loci within the Weyl
128
+ chamber. If there is a high-symmetry gate "nearby" (in terms of the requested average gate fidelity),
129
+ then it return a canonicalized decomposition of that high-symmetry gate.
130
+
131
+ References:
132
+ 1. Cross, A. W., Bishop, L. S., Sheldon, S., Nation, P. D. & Gambetta, J. M.,
133
+ *Validating quantum computers using randomized model circuits*,
134
+ `arXiv:1811.12926 [quant-ph] <https://arxiv.org/abs/1811.12926>`_
135
+ 2. B. Kraus, J. I. Cirac, *Optimal Creation of Entanglement Using a Two-Qubit Gate*,
136
+ `arXiv:0011050 [quant-ph] <https://arxiv.org/abs/quant-ph/0011050>`_
137
+ 3. B. Drury, P. J. Love, *Constructive Quantum Shannon Decomposition from Cartan
138
+ Involutions*, `arXiv:0806.4015 [quant-ph] <https://arxiv.org/abs/0806.4015>`_
139
+
140
+ """
141
+
142
+ # The parameters of the decomposition:
143
+ a: float
144
+ b: float
145
+ c: float
146
+ global_phase: float
147
+ K1l: np.ndarray
148
+ K2l: np.ndarray
149
+ K1r: np.ndarray
150
+ K2r: np.ndarray
151
+
152
+ unitary_matrix: np.ndarray # The unitary that was input
153
+ requested_fidelity: Optional[float] # None means no automatic specialization
154
+ calculated_fidelity: float # Fidelity after specialization
155
+
156
+ _specializations = two_qubit_decompose.Specialization
157
+
158
+ def __init__(
159
+ self,
160
+ unitary_matrix: np.ndarray,
161
+ fidelity: float | None = 1.0 - 1.0e-9,
162
+ *,
163
+ _specialization: two_qubit_decompose.Specialization | None = None,
164
+ ):
165
+ unitary_matrix = np.asarray(unitary_matrix, dtype=complex)
166
+ self._inner_decomposition = two_qubit_decompose.TwoQubitWeylDecomposition(
167
+ unitary_matrix, fidelity=fidelity, _specialization=_specialization
168
+ )
169
+ self.a = self._inner_decomposition.a
170
+ self.b = self._inner_decomposition.b
171
+ self.c = self._inner_decomposition.c
172
+ self.global_phase = self._inner_decomposition.global_phase
173
+ self.K1l = self._inner_decomposition.K1l
174
+ self.K1r = self._inner_decomposition.K1r
175
+ self.K2l = self._inner_decomposition.K2l
176
+ self.K2r = self._inner_decomposition.K2r
177
+ self.unitary_matrix = unitary_matrix
178
+ self.requested_fidelity = fidelity
179
+ self.calculated_fidelity = self._inner_decomposition.calculated_fidelity
180
+ if logger.isEnabledFor(logging.DEBUG):
181
+ actual_fidelity = self.actual_fidelity()
182
+ logger.debug(
183
+ "Requested fidelity: %s calculated fidelity: %s actual fidelity %s",
184
+ self.requested_fidelity,
185
+ self.calculated_fidelity,
186
+ actual_fidelity,
187
+ )
188
+ if abs(self.calculated_fidelity - actual_fidelity) > 1.0e-12:
189
+ logger.warning(
190
+ "Requested fidelity different from actual by %s",
191
+ self.calculated_fidelity - actual_fidelity,
192
+ )
193
+
194
+ @deprecate_func(since="1.1.0", removal_timeline="in the 2.0.0 release")
195
+ def specialize(self):
196
+ """Make changes to the decomposition to comply with any specializations.
197
+
198
+ This method will always raise a ``NotImplementedError`` because
199
+ there are no specializations to comply with in the current implementation.
200
+ """
201
+ raise NotImplementedError
202
+
203
+ def circuit(
204
+ self, *, euler_basis: str | None = None, simplify: bool = False, atol: float = DEFAULT_ATOL
205
+ ) -> QuantumCircuit:
206
+ """Returns Weyl decomposition in circuit form."""
207
+ circuit_data = self._inner_decomposition.circuit(
208
+ euler_basis=euler_basis, simplify=simplify, atol=atol
209
+ )
210
+ return QuantumCircuit._from_circuit_data(circuit_data, add_regs=True)
211
+
212
+ def actual_fidelity(self, **kwargs) -> float:
213
+ """Calculates the actual fidelity of the decomposed circuit to the input unitary."""
214
+ circ = self.circuit(**kwargs)
215
+ trace = np.trace(Operator(circ).data.T.conj() @ self.unitary_matrix)
216
+ return two_qubit_decompose.trace_to_fid(trace)
217
+
218
+ def __repr__(self):
219
+ """Represent with enough precision to allow copy-paste debugging of all corner cases"""
220
+ prefix = f"{type(self).__qualname__}.from_bytes("
221
+ with io.BytesIO() as f:
222
+ np.save(f, self.unitary_matrix, allow_pickle=False)
223
+ b64 = base64.encodebytes(f.getvalue()).splitlines()
224
+ b64ascii = [repr(x) for x in b64]
225
+ b64ascii[-1] += ","
226
+ pretty = [f"# {x.rstrip()}" for x in str(self).splitlines()]
227
+ indent = "\n" + " " * 4
228
+ specialization_variant = str(self._inner_decomposition.specialization).split(".")[1]
229
+ specialization_repr = f"{type(self).__qualname__}._specializations.{specialization_variant}"
230
+ lines = (
231
+ [prefix]
232
+ + pretty
233
+ + b64ascii
234
+ + [
235
+ f"requested_fidelity={self.requested_fidelity},",
236
+ f"_specialization={specialization_repr},",
237
+ f"calculated_fidelity={self.calculated_fidelity},",
238
+ f"actual_fidelity={self.actual_fidelity()},",
239
+ f"abc={(self.a, self.b, self.c)})",
240
+ ]
241
+ )
242
+ return indent.join(lines)
243
+
244
+ @classmethod
245
+ def from_bytes(
246
+ cls,
247
+ bytes_in: bytes,
248
+ *,
249
+ requested_fidelity: float,
250
+ _specialization: two_qubit_decompose.Specialization | None = None,
251
+ **kwargs,
252
+ ) -> "TwoQubitWeylDecomposition":
253
+ """Decode bytes into :class:`.TwoQubitWeylDecomposition`."""
254
+ # Used by __repr__
255
+ del kwargs # Unused (just for display)
256
+ b64 = base64.decodebytes(bytes_in)
257
+ with io.BytesIO(b64) as f:
258
+ arr = np.load(f, allow_pickle=False)
259
+ return cls(arr, fidelity=requested_fidelity, _specialization=_specialization)
260
+
261
+ def __str__(self):
262
+ specialization = str(self._inner_decomposition.specialization).split(".")[1]
263
+ pre = f"{self.__class__.__name__} [specialization={specialization}] (\n\t"
264
+ circ_indent = "\n\t".join(self.circuit(simplify=True).draw("text").lines(-1))
265
+ return f"{pre}{circ_indent}\n)"
266
+
267
+
268
+ class TwoQubitControlledUDecomposer:
269
+ r"""Decompose two-qubit unitary in terms of a desired
270
+ :math:`U \sim U_d(\alpha, 0, 0) \sim \text{Ctrl-U}`
271
+ gate that is locally equivalent to an :class:`.RXXGate`."""
272
+
273
+ def __init__(self, rxx_equivalent_gate: Type[Gate], euler_basis: str = "ZXZ"):
274
+ r"""Initialize the KAK decomposition.
275
+
276
+ Args:
277
+ rxx_equivalent_gate: Gate that is locally equivalent to an :class:`.RXXGate`:
278
+ :math:`U \sim U_d(\alpha, 0, 0) \sim \text{Ctrl-U}` gate.
279
+ Valid options are [:class:`.RZZGate`, :class:`.RXXGate`, :class:`.RYYGate`,
280
+ :class:`.RZXGate`, :class:`.CPhaseGate`, :class:`.CRXGate`, :class:`.CRYGate`,
281
+ :class:`.CRZGate`].
282
+ euler_basis: Basis string to be provided to :class:`.OneQubitEulerDecomposer`
283
+ for 1Q synthesis.
284
+ Valid options are [``'ZXZ'``, ``'ZYZ'``, ``'XYX'``, ``'XZX'``, ``'U'``, ``'U3'``,
285
+ ``'U321'``, ``'U1X'``, ``'PSX'``, ``'ZSX'``, ``'ZSXX'``, ``'RR'``].
286
+
287
+ Raises:
288
+ QiskitError: If the gate is not locally equivalent to an :class:`.RXXGate`.
289
+ """
290
+ if rxx_equivalent_gate._standard_gate is not None:
291
+ self._inner_decomposer = two_qubit_decompose.TwoQubitControlledUDecomposer(
292
+ rxx_equivalent_gate._standard_gate, euler_basis
293
+ )
294
+ self.gate_name = rxx_equivalent_gate._standard_gate.name
295
+ else:
296
+ self._inner_decomposer = two_qubit_decompose.TwoQubitControlledUDecomposer(
297
+ rxx_equivalent_gate, euler_basis
298
+ )
299
+ self.rxx_equivalent_gate = rxx_equivalent_gate
300
+ self.scale = self._inner_decomposer.scale
301
+ self.euler_basis = euler_basis
302
+
303
+ def __call__(
304
+ self, unitary: Operator | np.ndarray, approximate=False, use_dag=False, *, atol=DEFAULT_ATOL
305
+ ) -> QuantumCircuit:
306
+ """Returns the Weyl decomposition in circuit form.
307
+
308
+ Args:
309
+ unitary (Operator or ndarray): :math:`4 \times 4` unitary to synthesize.
310
+
311
+ Returns:
312
+ QuantumCircuit: Synthesized quantum circuit.
313
+
314
+ Note: atol is passed to OneQubitEulerDecomposer.
315
+ """
316
+ circ_data = self._inner_decomposer(np.asarray(unitary, dtype=complex), atol)
317
+ return QuantumCircuit._from_circuit_data(circ_data, add_regs=True)
318
+
319
+
320
+ class TwoQubitBasisDecomposer:
321
+ """A class for decomposing 2-qubit unitaries into minimal number of uses of a 2-qubit
322
+ basis gate.
323
+
324
+ Args:
325
+ gate: Two-qubit gate to be used in the KAK decomposition.
326
+ basis_fidelity: Fidelity to be assumed for applications of KAK Gate. Defaults to ``1.0``.
327
+ euler_basis: Basis string to be provided to :class:`.OneQubitEulerDecomposer` for 1Q synthesis.
328
+ Valid options are [``'ZYZ'``, ``'ZXZ'``, ``'XYX'``, ``'U'``, ``'U3'``, ``'U1X'``,
329
+ ``'PSX'``, ``'ZSX'``, ``'RR'``].
330
+ pulse_optimize: If ``True``, try to do decomposition which minimizes
331
+ local unitaries in between entangling gates. This will raise an exception if an
332
+ optimal decomposition is not implemented. Currently, only [{CX, SX, RZ}] is known.
333
+ If ``False``, don't attempt optimization. If ``None``, attempt optimization but don't raise
334
+ if unknown.
335
+
336
+
337
+ .. automethod:: __call__
338
+ """
339
+
340
+ def __init__(
341
+ self,
342
+ gate: Gate,
343
+ basis_fidelity: float = 1.0,
344
+ euler_basis: str = "U",
345
+ pulse_optimize: bool | None = None,
346
+ ):
347
+ self.gate = gate
348
+ self.basis_fidelity = basis_fidelity
349
+ self.pulse_optimize = pulse_optimize
350
+ # Use cx as gate name for pulse optimal decomposition detection
351
+ # otherwise use USER_GATE as a unique key to support custom gates
352
+ # including parameterized gates like UnitaryGate.
353
+ if isinstance(gate, CXGate):
354
+ gate_name = "cx"
355
+ else:
356
+ gate_name = "USER_GATE"
357
+ self.gate_name = gate_name
358
+
359
+ self._inner_decomposer = two_qubit_decompose.TwoQubitBasisDecomposer(
360
+ gate_name,
361
+ Operator(gate).data,
362
+ basis_fidelity=basis_fidelity,
363
+ euler_basis=euler_basis,
364
+ pulse_optimize=pulse_optimize,
365
+ )
366
+ self.is_supercontrolled = self._inner_decomposer.super_controlled
367
+ if not self.is_supercontrolled:
368
+ warnings.warn(
369
+ "Only know how to decompose properly for a supercontrolled basis gate.",
370
+ stacklevel=2,
371
+ )
372
+
373
+ def num_basis_gates(self, unitary):
374
+ """Computes the number of basis gates needed in
375
+ a decomposition of input unitary
376
+ """
377
+ unitary = np.asarray(unitary, dtype=complex)
378
+ return self._inner_decomposer.num_basis_gates(unitary)
379
+
380
+ @staticmethod
381
+ def decomp0(target):
382
+ r"""
383
+ Decompose target :math:`\sim U_d(x, y, z)` with :math:`0` uses of the basis gate.
384
+ Result :math:`U_r` has trace:
385
+
386
+ .. math::
387
+
388
+ \Big\vert\text{Tr}(U_r\cdot U_\text{target}^{\dag})\Big\vert =
389
+ 4\Big\vert (\cos(x)\cos(y)\cos(z)+ j \sin(x)\sin(y)\sin(z)\Big\vert
390
+
391
+ which is optimal for all targets and bases
392
+ """
393
+
394
+ return two_qubit_decompose.TwoQubitBasisDecomposer.decomp0(target)
395
+
396
+ def decomp1(self, target):
397
+ r"""Decompose target :math:`\sim U_d(x, y, z)` with :math:`1` use of the basis gate
398
+ :math:`\sim U_d(a, b, c)`.
399
+ Result :math:`U_r` has trace:
400
+
401
+ .. math::
402
+
403
+ \Big\vert\text{Tr}(U_r \cdot U_\text{target}^{\dag})\Big\vert =
404
+ 4\Big\vert \cos(x-a)\cos(y-b)\cos(z-c) + j \sin(x-a)\sin(y-b)\sin(z-c)\Big\vert
405
+
406
+ which is optimal for all targets and bases with ``z==0`` or ``c==0``.
407
+ """
408
+ return self._inner_decomposer.decomp1(target)
409
+
410
+ def decomp2_supercontrolled(self, target):
411
+ r"""
412
+ Decompose target :math:`\sim U_d(x, y, z)` with :math:`2` uses of the basis gate.
413
+
414
+ For supercontrolled basis :math:`\sim U_d(\pi/4, b, 0)`, all b, result :math:`U_r` has trace
415
+
416
+ .. math::
417
+
418
+ \Big\vert\text{Tr}(U_r \cdot U_\text{target}^\dag) \Big\vert = 4\cos(z)
419
+
420
+ which is the optimal approximation for basis of CNOT-class :math:`\sim U_d(\pi/4, 0, 0)`
421
+ or DCNOT-class :math:`\sim U_d(\pi/4, \pi/4, 0)` and any target. It may
422
+ be sub-optimal for :math:`b \neq 0` (i.e. there exists an exact decomposition for any target
423
+ using :math:`B \sim U_d(\pi/4, \pi/8, 0)`, but it may not be this decomposition).
424
+ This is an exact decomposition for supercontrolled basis and target :math:`\sim U_d(x, y, 0)`.
425
+ No guarantees for non-supercontrolled basis.
426
+ """
427
+ return self._inner_decomposer.decomp2_supercontrolled(target)
428
+
429
+ def decomp3_supercontrolled(self, target):
430
+ r"""
431
+ Decompose target with :math:`3` uses of the basis.
432
+ This is an exact decomposition for supercontrolled basis :math:`\sim U_d(\pi/4, b, 0)`, all b,
433
+ and any target. No guarantees for non-supercontrolled basis.
434
+ """
435
+ return self._inner_decomposer.decomp3_supercontrolled(target)
436
+
437
+ def __call__(
438
+ self,
439
+ unitary: Operator | np.ndarray,
440
+ basis_fidelity: float | None = None,
441
+ approximate: bool = True,
442
+ use_dag: bool = False,
443
+ *,
444
+ _num_basis_uses: int | None = None,
445
+ ) -> QuantumCircuit | DAGCircuit:
446
+ r"""Decompose a two-qubit ``unitary`` over fixed basis and :math:`SU(2)` using the best
447
+ approximation given that each basis application has a finite ``basis_fidelity``.
448
+
449
+ Args:
450
+ unitary (Operator or ndarray): :math:`4 \times 4` unitary to synthesize.
451
+ basis_fidelity (float or None): Fidelity to be assumed for applications of KAK Gate.
452
+ If given, overrides ``basis_fidelity`` given at init.
453
+ approximate (bool): Approximates if basis fidelities are less than 1.0.
454
+ use_dag (bool): If true a :class:`.DAGCircuit` is returned instead of a
455
+ :class:`QuantumCircuit` when this class is called.
456
+ _num_basis_uses (int): force a particular approximation by passing a number in [0, 3].
457
+
458
+ Returns:
459
+ QuantumCircuit: Synthesized quantum circuit.
460
+
461
+ Raises:
462
+ QiskitError: if ``pulse_optimize`` is True but we don't know how to do it.
463
+ """
464
+
465
+ if use_dag:
466
+ from qiskit.dagcircuit.dagcircuit import DAGCircuit
467
+ from qiskit.dagcircuit.dagnode import DAGOpNode
468
+
469
+ sequence = self._inner_decomposer(
470
+ np.asarray(unitary, dtype=complex),
471
+ basis_fidelity,
472
+ approximate,
473
+ _num_basis_uses=_num_basis_uses,
474
+ )
475
+ q = QuantumRegister(2)
476
+
477
+ dag = DAGCircuit()
478
+ dag.global_phase = sequence.global_phase
479
+ dag.add_qreg(q)
480
+ for gate, params, qubits in sequence:
481
+ if gate is None:
482
+ dag.apply_operation_back(self.gate, tuple(q[x] for x in qubits), check=False)
483
+ else:
484
+ op = CircuitInstruction.from_standard(
485
+ gate, qubits=tuple(q[x] for x in qubits), params=params
486
+ )
487
+ node = DAGOpNode.from_instruction(op)
488
+ dag._apply_op_node_back(node)
489
+ return dag
490
+ else:
491
+ if getattr(self.gate, "_standard_gate", None):
492
+ circ_data = self._inner_decomposer.to_circuit(
493
+ np.asarray(unitary, dtype=complex),
494
+ self.gate,
495
+ basis_fidelity,
496
+ approximate,
497
+ _num_basis_uses=_num_basis_uses,
498
+ )
499
+ return QuantumCircuit._from_circuit_data(circ_data, add_regs=True)
500
+ else:
501
+ sequence = self._inner_decomposer(
502
+ np.asarray(unitary, dtype=complex),
503
+ basis_fidelity,
504
+ approximate,
505
+ _num_basis_uses=_num_basis_uses,
506
+ )
507
+ q = QuantumRegister(2)
508
+ circ = QuantumCircuit(q, global_phase=sequence.global_phase)
509
+ for gate, params, qubits in sequence:
510
+ if gate is None:
511
+ circ._append(self.gate, qargs=tuple(q[x] for x in qubits))
512
+ else:
513
+ inst = CircuitInstruction.from_standard(
514
+ gate, qubits=tuple(q[x] for x in qubits), params=params
515
+ )
516
+ circ._append(inst)
517
+ return circ
518
+
519
+ def traces(self, target):
520
+ r"""
521
+ Give the expected traces :math:`\Big\vert\text{Tr}(U \cdot U_\text{target}^{\dag})\Big\vert`
522
+ for a different number of basis gates.
523
+ """
524
+ return self._inner_decomposer.traces(target._inner_decomposition)
525
+
526
+
527
+ # This weird duplicated lazy structure is for backwards compatibility; Qiskit has historically
528
+ # always made ``two_qubit_cnot_decompose`` available publicly immediately on import, but it's quite
529
+ # expensive to construct, and we want to defer the object's creation until it's actually used. We
530
+ # only need to pass through the public methods that take `self` as a parameter. Using `__getattr__`
531
+ # doesn't work because it is only called if the normal resolution methods fail. Using
532
+ # `__getattribute__` is too messy for a simple one-off use object.
533
+
534
+
535
+ class _LazyTwoQubitCXDecomposer(TwoQubitBasisDecomposer):
536
+ __slots__ = ("_inner",)
537
+
538
+ def __init__(self): # pylint: disable=super-init-not-called
539
+ self._inner = None
540
+
541
+ def _load(self):
542
+ if self._inner is None:
543
+ self._inner = TwoQubitBasisDecomposer(CXGate())
544
+
545
+ def __call__(self, *args, **kwargs) -> QuantumCircuit:
546
+ self._load()
547
+ return self._inner(*args, **kwargs)
548
+
549
+ def traces(self, target):
550
+ self._load()
551
+ return self._inner.traces(target)
552
+
553
+ def decomp1(self, target):
554
+ self._load()
555
+ return self._inner.decomp1(target)
556
+
557
+ def decomp2_supercontrolled(self, target):
558
+ self._load()
559
+ return self._inner.decomp2_supercontrolled(target)
560
+
561
+ def decomp3_supercontrolled(self, target):
562
+ self._load()
563
+ return self._inner.decomp3_supercontrolled(target)
564
+
565
+ def num_basis_gates(self, unitary):
566
+ self._load()
567
+ return self._inner.num_basis_gates(unitary)
568
+
569
+
570
+ two_qubit_cnot_decompose = _LazyTwoQubitCXDecomposer()
571
+ """
572
+ This is an instance of :class:`.TwoQubitBasisDecomposer` that always uses
573
+ ``cx`` as the KAK gate for the basis decomposition. You can use this function
574
+ as a quick access to ``cx``-based 2-qubit decompositions.
575
+
576
+ Args:
577
+ unitary (Operator or np.ndarray): The 4x4 unitary to synthesize.
578
+ basis_fidelity (float or None): If given the assumed fidelity for applications of :class:`.CXGate`.
579
+ approximate (bool): If ``True`` approximate if ``basis_fidelity`` is less than 1.0.
580
+
581
+ Returns:
582
+ QuantumCircuit: The synthesized circuit of the input unitary.
583
+ """
@@ -0,0 +1,19 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2021
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
+ """
14
+ Submodule symbol exports for XX decomposition.
15
+ """
16
+
17
+ from __future__ import annotations
18
+ from .decomposer import XXDecomposer
19
+ from .embodiments import XXEmbodiments