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,202 @@
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
+ """Two-qubit XX-YY gate."""
14
+
15
+ from __future__ import annotations
16
+
17
+ import math
18
+ from cmath import exp
19
+ from math import pi
20
+ from typing import Optional
21
+
22
+ import numpy as np
23
+
24
+ from qiskit.circuit.gate import Gate
25
+ from qiskit.circuit.library.standard_gates.ry import RYGate
26
+ from qiskit.circuit.library.standard_gates.rz import RZGate
27
+ from qiskit.circuit.library.standard_gates.s import SdgGate, SGate
28
+ from qiskit.circuit.library.standard_gates.sx import SXdgGate, SXGate
29
+ from qiskit.circuit.library.standard_gates.x import CXGate
30
+ from qiskit.circuit.parameterexpression import ParameterValueType, ParameterExpression
31
+ from qiskit.circuit.quantumcircuit import QuantumCircuit
32
+ from qiskit.circuit import QuantumRegister
33
+ from qiskit._accelerate.circuit import StandardGate
34
+
35
+
36
+ class XXMinusYYGate(Gate):
37
+ r"""XX-YY interaction gate.
38
+
39
+ A 2-qubit parameterized XX-YY interaction. Its action is to induce
40
+ a coherent rotation by some angle between :math:`|00\rangle` and :math:`|11\rangle`.
41
+
42
+ **Circuit Symbol:**
43
+
44
+ .. code-block:: text
45
+
46
+ ┌───────────────┐
47
+ q_0: ┤0 ├
48
+ │ (XX-YY)(θ,β) │
49
+ q_1: ┤1 ├
50
+ └───────────────┘
51
+
52
+ **Matrix Representation:**
53
+
54
+ .. math::
55
+
56
+ \newcommand{\rotationangle}{\frac{\theta}{2}}
57
+
58
+ R_{XX-YY}(\theta, \beta) q_0, q_1 =
59
+ RZ_1(\beta) \cdot \exp\left(-i \frac{\theta}{2} \frac{XX-YY}{2}\right) \cdot RZ_1(-\beta) =
60
+ \begin{pmatrix}
61
+ \cos\left(\rotationangle\right) & 0 & 0 & -i\sin\left(\rotationangle\right)e^{-i\beta} \\
62
+ 0 & 1 & 0 & 0 \\
63
+ 0 & 0 & 1 & 0 \\
64
+ -i\sin\left(\rotationangle\right)e^{i\beta} & 0 & 0 & \cos\left(\rotationangle\right)
65
+ \end{pmatrix}
66
+ """
67
+
68
+ _standard_gate = StandardGate.XXMinusYYGate
69
+
70
+ def __init__(
71
+ self,
72
+ theta: ParameterValueType,
73
+ beta: ParameterValueType = 0,
74
+ label: Optional[str] = "(XX-YY)",
75
+ ):
76
+ """Create new XX-YY gate.
77
+
78
+ Args:
79
+ theta: The rotation angle.
80
+ beta: The phase angle.
81
+ label: The label of the gate.
82
+ """
83
+ super().__init__("xx_minus_yy", 2, [theta, beta], label=label)
84
+
85
+ def _define(self):
86
+ """
87
+ gate xx_minus_yy(theta, beta) a, b {
88
+ rz(-beta) b;
89
+ rz(-pi/2) a;
90
+ sx a;
91
+ rz(pi/2) a;
92
+ s b;
93
+ cx a, b;
94
+ ry(theta/2) a;
95
+ ry(-theta/2) b;
96
+ cx a, b;
97
+ sdg b;
98
+ rz(-pi/2) a;
99
+ sxdg a;
100
+ rz(pi/2) a;
101
+ rz(beta) b;
102
+ }
103
+ """
104
+ theta, beta = self.params
105
+ register = QuantumRegister(2, "q")
106
+ circuit = QuantumCircuit(register, name=self.name)
107
+ a, b = register
108
+ rules = [
109
+ (RZGate(-beta), [b], []),
110
+ (RZGate(-pi / 2), [a], []),
111
+ (SXGate(), [a], []),
112
+ (RZGate(pi / 2), [a], []),
113
+ (SGate(), [b], []),
114
+ (CXGate(), [a, b], []),
115
+ (RYGate(theta / 2), [a], []),
116
+ (RYGate(-theta / 2), [b], []),
117
+ (CXGate(), [a, b], []),
118
+ (SdgGate(), [b], []),
119
+ (RZGate(-pi / 2), [a], []),
120
+ (SXdgGate(), [a], []),
121
+ (RZGate(pi / 2), [a], []),
122
+ (RZGate(beta), [b], []),
123
+ ]
124
+ for instr, qargs, cargs in rules:
125
+ circuit._append(instr, qargs, cargs)
126
+
127
+ self.definition = circuit
128
+
129
+ def control(
130
+ self,
131
+ num_ctrl_qubits: int = 1,
132
+ label: str | None = None,
133
+ ctrl_state: str | int | None = None,
134
+ annotated: bool | None = None,
135
+ ):
136
+ """Return a (multi-)controlled-(XX-YY) gate.
137
+
138
+ Args:
139
+ num_ctrl_qubits: number of control qubits.
140
+ label: An optional label for the gate [Default: ``None``]
141
+ ctrl_state: control state expressed as integer,
142
+ string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
143
+ annotated: indicates whether the controlled gate should be implemented
144
+ as an annotated gate. If ``None``, this is set to ``True`` if
145
+ the gate contains free parameters, in which case it cannot
146
+ yet be synthesized.
147
+
148
+ Returns:
149
+ ControlledGate: controlled version of this gate.
150
+ """
151
+ if annotated is None:
152
+ annotated = any(isinstance(p, ParameterExpression) for p in self.params)
153
+
154
+ gate = super().control(
155
+ num_ctrl_qubits=num_ctrl_qubits,
156
+ label=label,
157
+ ctrl_state=ctrl_state,
158
+ annotated=annotated,
159
+ )
160
+ return gate
161
+
162
+ def inverse(self, annotated: bool = False):
163
+ """Inverse gate.
164
+
165
+ Args:
166
+ annotated: when set to ``True``, this is typically used to return an
167
+ :class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
168
+ :class:`.Gate`. However, for this class this argument is ignored as the inverse
169
+ of this gate is always a :class:`.XXMinusYYGate` with inverse
170
+ parameter values.
171
+
172
+ Returns:
173
+ XXMinusYYGate: inverse gate.
174
+ """
175
+ theta, beta = self.params
176
+ return XXMinusYYGate(-theta, beta)
177
+
178
+ def __array__(self, dtype=None, copy=None):
179
+ """Gate matrix."""
180
+ if copy is False:
181
+ raise ValueError("unable to avoid copy while creating an array as requested")
182
+ theta, beta = self.params
183
+ cos = math.cos(theta / 2)
184
+ sin = math.sin(theta / 2)
185
+ return np.array(
186
+ [
187
+ [cos, 0, 0, -1j * sin * exp(-1j * beta)],
188
+ [0, 1, 0, 0],
189
+ [0, 0, 1, 0],
190
+ [-1j * sin * exp(1j * beta), 0, 0, cos],
191
+ ],
192
+ dtype=dtype,
193
+ )
194
+
195
+ def power(self, exponent: float, annotated: bool = False):
196
+ theta, beta = self.params
197
+ return XXMinusYYGate(exponent * theta, beta)
198
+
199
+ def __eq__(self, other):
200
+ if isinstance(other, XXMinusYYGate):
201
+ return self._compare_parameters(other)
202
+ return False
@@ -0,0 +1,236 @@
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
+ """Two-qubit XX+YY gate."""
14
+
15
+ from __future__ import annotations
16
+
17
+ import math
18
+ from cmath import exp
19
+ from math import pi
20
+ from typing import Optional
21
+
22
+ import numpy
23
+
24
+ from qiskit.circuit.gate import Gate
25
+ from qiskit.circuit import QuantumRegister
26
+ from qiskit.circuit.parameterexpression import ParameterValueType, ParameterExpression
27
+ from qiskit._accelerate.circuit import StandardGate
28
+
29
+
30
+ class XXPlusYYGate(Gate):
31
+ r"""XX+YY interaction gate.
32
+
33
+ A 2-qubit parameterized XX+YY interaction, also known as an XY gate. Its action is to induce
34
+ a coherent rotation by some angle between :math:`|01\rangle` and :math:`|10\rangle`.
35
+
36
+ **Circuit Symbol:**
37
+
38
+ .. code-block:: text
39
+
40
+ ┌───────────────┐
41
+ q_0: ┤0 ├
42
+ │ (XX+YY)(θ,β) │
43
+ q_1: ┤1 ├
44
+ └───────────────┘
45
+
46
+ **Matrix Representation:**
47
+
48
+ .. math::
49
+
50
+ \newcommand{\rotationangle}{\frac{\theta}{2}}
51
+
52
+ R_{XX+YY}(\theta, \beta)\ q_0, q_1 =
53
+ RZ_0(-\beta) \cdot \exp\left(-i \frac{\theta}{2} \frac{XX+YY}{2}\right) \cdot RZ_0(\beta) =
54
+ \begin{pmatrix}
55
+ 1 & 0 & 0 & 0 \\
56
+ 0 & \cos\left(\rotationangle\right) & -i\sin\left(\rotationangle\right)e^{-i\beta} & 0 \\
57
+ 0 & -i\sin\left(\rotationangle\right)e^{i\beta} & \cos\left(\rotationangle\right) & 0 \\
58
+ 0 & 0 & 0 & 1
59
+ \end{pmatrix}
60
+
61
+ .. note::
62
+
63
+ In Qiskit's convention, higher qubit indices are more significant
64
+ (little endian convention). In the above example we apply the gate
65
+ on (q_0, q_1) which results in adding the (optional) phase defined
66
+ by :math:`\beta` on q_0. Instead, if we apply it on (q_1, q_0), the
67
+ phase is added on q_1. If :math:`\beta` is set to its default value
68
+ of :math:`0`, the gate is equivalent in big and little endian.
69
+
70
+ .. code-block:: text
71
+
72
+ ┌───────────────┐
73
+ q_0: ┤1 ├
74
+ │ (XX+YY)(θ,β) │
75
+ q_1: ┤0 ├
76
+ └───────────────┘
77
+
78
+ .. math::
79
+
80
+ \newcommand{\rotationangle}{\frac{\theta}{2}}
81
+
82
+ R_{XX+YY}(\theta, \beta)\ q_0, q_1 =
83
+ RZ_1(-\beta) \cdot \exp\left(-i \frac{\theta}{2} \frac{XX+YY}{2}\right) \cdot RZ_1(\beta) =
84
+ \begin{pmatrix}
85
+ 1 & 0 & 0 & 0 \\
86
+ 0 & \cos\left(\rotationangle\right) &
87
+ -i\sin\left(\rotationangle\right)e^{i\beta} & 0 \\
88
+ 0 & -i\sin\left(\rotationangle\right)e^{-i\beta} &
89
+ \cos\left(\rotationangle\right) & 0 \\
90
+ 0 & 0 & 0 & 1
91
+ \end{pmatrix}
92
+ """
93
+
94
+ _standard_gate = StandardGate.XXPlusYYGate
95
+
96
+ def __init__(
97
+ self,
98
+ theta: ParameterValueType,
99
+ beta: ParameterValueType = 0,
100
+ label: Optional[str] = "(XX+YY)",
101
+ ):
102
+ """Create new XX+YY gate.
103
+
104
+ Args:
105
+ theta: The rotation angle.
106
+ beta: The phase angle.
107
+ label: The label of the gate.
108
+ """
109
+ super().__init__("xx_plus_yy", 2, [theta, beta], label=label)
110
+
111
+ def _define(self):
112
+ """
113
+ gate xx_plus_yy(theta, beta) a, b {
114
+ rz(beta) b;
115
+ rz(-pi/2) a;
116
+ sx a;
117
+ rz(pi/2) a;
118
+ s b;
119
+ cx a, b;
120
+ ry(theta/2) a;
121
+ ry(theta/2) b;
122
+ cx a, b;
123
+ sdg b;
124
+ rz(-pi/2) a;
125
+ sxdg a;
126
+ rz(pi/2) a;
127
+ rz(-beta) b;
128
+ }
129
+ """
130
+ # pylint: disable=cyclic-import
131
+ from qiskit.circuit.quantumcircuit import QuantumCircuit
132
+ from .x import CXGate
133
+ from .s import SGate, SdgGate
134
+ from .sx import SXGate, SXdgGate
135
+ from .rz import RZGate
136
+ from .ry import RYGate
137
+
138
+ theta = self.params[0]
139
+ beta = self.params[1]
140
+ q = QuantumRegister(2, "q")
141
+ qc = QuantumCircuit(q, name=self.name)
142
+ rules = [
143
+ (RZGate(beta), [q[0]], []),
144
+ (RZGate(-pi / 2), [q[1]], []),
145
+ (SXGate(), [q[1]], []),
146
+ (RZGate(pi / 2), [q[1]], []),
147
+ (SGate(), [q[0]], []),
148
+ (CXGate(), [q[1], q[0]], []),
149
+ (RYGate(-theta / 2), [q[1]], []),
150
+ (RYGate(-theta / 2), [q[0]], []),
151
+ (CXGate(), [q[1], q[0]], []),
152
+ (SdgGate(), [q[0]], []),
153
+ (RZGate(-pi / 2), [q[1]], []),
154
+ (SXdgGate(), [q[1]], []),
155
+ (RZGate(pi / 2), [q[1]], []),
156
+ (RZGate(-beta), [q[0]], []),
157
+ ]
158
+ for instr, qargs, cargs in rules:
159
+ qc._append(instr, qargs, cargs)
160
+
161
+ self.definition = qc
162
+
163
+ def control(
164
+ self,
165
+ num_ctrl_qubits: int = 1,
166
+ label: str | None = None,
167
+ ctrl_state: str | int | None = None,
168
+ annotated: bool | None = None,
169
+ ):
170
+ """Return a (multi-)controlled-(XX+YY) gate.
171
+
172
+ Args:
173
+ num_ctrl_qubits: number of control qubits.
174
+ label: An optional label for the gate [Default: ``None``]
175
+ ctrl_state: control state expressed as integer,
176
+ string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
177
+ annotated: indicates whether the controlled gate should be implemented
178
+ as an annotated gate. If ``None``, this is set to ``True`` if
179
+ the gate contains free parameters, in which case it cannot
180
+ yet be synthesized.
181
+
182
+ Returns:
183
+ ControlledGate: controlled version of this gate.
184
+ """
185
+ if annotated is None:
186
+ annotated = any(isinstance(p, ParameterExpression) for p in self.params)
187
+
188
+ gate = super().control(
189
+ num_ctrl_qubits=num_ctrl_qubits,
190
+ label=label,
191
+ ctrl_state=ctrl_state,
192
+ annotated=annotated,
193
+ )
194
+ return gate
195
+
196
+ def inverse(self, annotated: bool = False):
197
+ """Return inverse XX+YY gate (i.e. with the negative rotation angle and same phase angle).
198
+
199
+ Args:
200
+ annotated: when set to ``True``, this is typically used to return an
201
+ :class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
202
+ :class:`.Gate`. However, for this class this argument is ignored as the inverse
203
+ of this gate is always a :class:`.XXPlusYYGate` with inverse
204
+ parameter values.
205
+
206
+ Returns:
207
+ XXPlusYYGate: inverse gate.
208
+ """
209
+ return XXPlusYYGate(-self.params[0], self.params[1])
210
+
211
+ def __array__(self, dtype=None, copy=None):
212
+ """Return a numpy.array for the XX+YY gate."""
213
+ if copy is False:
214
+ raise ValueError("unable to avoid copy while creating an array as requested")
215
+ half_theta = float(self.params[0]) / 2
216
+ beta = float(self.params[1])
217
+ cos = math.cos(half_theta)
218
+ sin = math.sin(half_theta)
219
+ return numpy.array(
220
+ [
221
+ [1, 0, 0, 0],
222
+ [0, cos, -1j * sin * exp(-1j * beta), 0],
223
+ [0, -1j * sin * exp(1j * beta), cos, 0],
224
+ [0, 0, 0, 1],
225
+ ],
226
+ dtype=dtype,
227
+ )
228
+
229
+ def power(self, exponent: float, annotated: bool = False):
230
+ theta, beta = self.params
231
+ return XXPlusYYGate(exponent * theta, beta)
232
+
233
+ def __eq__(self, other):
234
+ if isinstance(other, XXPlusYYGate):
235
+ return self._compare_parameters(other)
236
+ return False
@@ -0,0 +1,257 @@
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
+ """Y and CY gates."""
14
+
15
+ from math import pi
16
+ from typing import Optional, Union
17
+
18
+ # pylint: disable=cyclic-import
19
+ from qiskit.circuit.singleton import SingletonGate, SingletonControlledGate, stdlib_singleton_key
20
+ from qiskit.circuit._utils import with_gate_array, with_controlled_gate_array
21
+ from qiskit._accelerate.circuit import StandardGate
22
+
23
+ _Y_ARRAY = [[0, -1j], [1j, 0]]
24
+
25
+
26
+ @with_gate_array(_Y_ARRAY)
27
+ class YGate(SingletonGate):
28
+ r"""The single-qubit Pauli-Y gate (:math:`\sigma_y`).
29
+
30
+ Can be applied to a :class:`~qiskit.circuit.QuantumCircuit`
31
+ with the :meth:`~qiskit.circuit.QuantumCircuit.y` method.
32
+
33
+ **Matrix Representation:**
34
+
35
+ .. math::
36
+
37
+ Y = \begin{pmatrix}
38
+ 0 & -i \\
39
+ i & 0
40
+ \end{pmatrix}
41
+
42
+ **Circuit symbol:**
43
+
44
+ .. code-block:: text
45
+
46
+ ┌───┐
47
+ q_0: ┤ Y ├
48
+ └───┘
49
+
50
+ Equivalent to a :math:`\pi` radian rotation about the Y axis.
51
+
52
+ .. note::
53
+
54
+ A global phase difference exists between the definitions of
55
+ :math:`RY(\pi)` and :math:`Y`.
56
+
57
+ .. math::
58
+
59
+ RY(\pi) = \begin{pmatrix}
60
+ 0 & -1 \\
61
+ 1 & 0
62
+ \end{pmatrix}
63
+ = -i Y
64
+
65
+ The gate is equivalent to a bit and phase flip.
66
+
67
+ .. math::
68
+
69
+ |0\rangle \rightarrow i|1\rangle \\
70
+ |1\rangle \rightarrow -i|0\rangle
71
+ """
72
+
73
+ _standard_gate = StandardGate.YGate
74
+
75
+ def __init__(self, label: Optional[str] = None):
76
+ """Create new Y gate."""
77
+ super().__init__("y", 1, [], label=label)
78
+
79
+ _singleton_lookup_key = stdlib_singleton_key()
80
+
81
+ def _define(self):
82
+ # pylint: disable=cyclic-import
83
+ from qiskit.circuit import QuantumCircuit, QuantumRegister
84
+ from .u3 import U3Gate
85
+
86
+ q = QuantumRegister(1, "q")
87
+ qc = QuantumCircuit(q, name=self.name)
88
+ rules = [(U3Gate(pi, pi / 2, pi / 2), [q[0]], [])]
89
+ for instr, qargs, cargs in rules:
90
+ qc._append(instr, qargs, cargs)
91
+
92
+ self.definition = qc
93
+
94
+ def control(
95
+ self,
96
+ num_ctrl_qubits: int = 1,
97
+ label: Optional[str] = None,
98
+ ctrl_state: Optional[Union[str, int]] = None,
99
+ annotated: bool = False,
100
+ ):
101
+ """Return a (multi-)controlled-Y gate.
102
+
103
+ One control returns a CY gate.
104
+
105
+ Args:
106
+ num_ctrl_qubits: number of control qubits.
107
+ label: An optional label for the gate [Default: ``None``]
108
+ ctrl_state: control state expressed as integer,
109
+ string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
110
+ annotated: indicates whether the controlled gate should be implemented
111
+ as an annotated gate.
112
+
113
+ Returns:
114
+ ControlledGate: controlled version of this gate.
115
+ """
116
+ if not annotated and num_ctrl_qubits == 1:
117
+ gate = CYGate(label=label, ctrl_state=ctrl_state, _base_label=self.label)
118
+ else:
119
+ gate = super().control(
120
+ num_ctrl_qubits=num_ctrl_qubits,
121
+ label=label,
122
+ ctrl_state=ctrl_state,
123
+ annotated=annotated,
124
+ )
125
+ return gate
126
+
127
+ def inverse(self, annotated: bool = False):
128
+ r"""Return inverted Y gate (:math:`Y^{\dagger} = Y`)
129
+
130
+ Args:
131
+ annotated: when set to ``True``, this is typically used to return an
132
+ :class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
133
+ :class:`.Gate`. However, for this class this argument is ignored as this gate
134
+ is self-inverse.
135
+
136
+ Returns:
137
+ YGate: inverse gate (self-inverse).
138
+ """
139
+ return YGate() # self-inverse
140
+
141
+ def __eq__(self, other):
142
+ return isinstance(other, YGate)
143
+
144
+
145
+ @with_controlled_gate_array(_Y_ARRAY, num_ctrl_qubits=1)
146
+ class CYGate(SingletonControlledGate):
147
+ r"""Controlled-Y gate.
148
+
149
+ Can be applied to a :class:`~qiskit.circuit.QuantumCircuit`
150
+ with the :meth:`~qiskit.circuit.QuantumCircuit.cy` method.
151
+
152
+ **Circuit symbol:**
153
+
154
+ .. code-block:: text
155
+
156
+ q_0: ──■──
157
+ ┌─┴─┐
158
+ q_1: ┤ Y ├
159
+ └───┘
160
+
161
+ **Matrix representation:**
162
+
163
+ .. math::
164
+
165
+ CY\ q_0, q_1 =
166
+ I \otimes |0 \rangle\langle 0| + Y \otimes |1 \rangle\langle 1| =
167
+ \begin{pmatrix}
168
+ 1 & 0 & 0 & 0 \\
169
+ 0 & 0 & 0 & -i \\
170
+ 0 & 0 & 1 & 0 \\
171
+ 0 & i & 0 & 0
172
+ \end{pmatrix}
173
+
174
+
175
+ .. note::
176
+
177
+ In Qiskit's convention, higher qubit indices are more significant
178
+ (little endian convention). In many textbooks, controlled gates are
179
+ presented with the assumption of more significant qubits as control,
180
+ which in our case would be q_1. Thus a textbook matrix for this
181
+ gate will be:
182
+
183
+ .. code-block:: text
184
+
185
+ ┌───┐
186
+ q_0: ┤ Y ├
187
+ └─┬─┘
188
+ q_1: ──■──
189
+
190
+ .. math::
191
+
192
+ CY\ q_1, q_0 =
193
+ |0 \rangle\langle 0| \otimes I + |1 \rangle\langle 1| \otimes Y =
194
+ \begin{pmatrix}
195
+ 1 & 0 & 0 & 0 \\
196
+ 0 & 1 & 0 & 0 \\
197
+ 0 & 0 & 0 & -i \\
198
+ 0 & 0 & i & 0
199
+ \end{pmatrix}
200
+
201
+ """
202
+
203
+ _standard_gate = StandardGate.CYGate
204
+
205
+ def __init__(
206
+ self,
207
+ label: Optional[str] = None,
208
+ ctrl_state: Optional[Union[str, int]] = None,
209
+ *,
210
+ _base_label=None,
211
+ ):
212
+ """Create new CY gate."""
213
+ super().__init__(
214
+ "cy",
215
+ 2,
216
+ [],
217
+ num_ctrl_qubits=1,
218
+ label=label,
219
+ ctrl_state=ctrl_state,
220
+ base_gate=YGate(label=_base_label),
221
+ )
222
+
223
+ _singleton_lookup_key = stdlib_singleton_key(num_ctrl_qubits=1)
224
+
225
+ def _define(self):
226
+ """
227
+ gate cy a,b { sdg b; cx a,b; s b; }
228
+ """
229
+ # pylint: disable=cyclic-import
230
+ from qiskit.circuit import QuantumCircuit, QuantumRegister
231
+ from .s import SGate, SdgGate
232
+ from .x import CXGate
233
+
234
+ q = QuantumRegister(2, "q")
235
+ qc = QuantumCircuit(q, name=self.name)
236
+ rules = [(SdgGate(), [q[1]], []), (CXGate(), [q[0], q[1]], []), (SGate(), [q[1]], [])]
237
+ for instr, qargs, cargs in rules:
238
+ qc._append(instr, qargs, cargs)
239
+
240
+ self.definition = qc
241
+
242
+ def inverse(self, annotated: bool = False):
243
+ """Return inverted CY gate (itself).
244
+
245
+ Args:
246
+ annotated: when set to ``True``, this is typically used to return an
247
+ :class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
248
+ :class:`.Gate`. However, for this class this argument is ignored as this gate
249
+ is self-inverse.
250
+
251
+ Returns:
252
+ CYGate: inverse gate (self-inverse).
253
+ """
254
+ return CYGate(ctrl_state=self.ctrl_state) # self-inverse
255
+
256
+ def __eq__(self, other):
257
+ return isinstance(other, CYGate) and self.ctrl_state == other.ctrl_state