qiskit 2.1.0rc1__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 (699) hide show
  1. qiskit/VERSION.txt +1 -0
  2. qiskit/__init__.py +159 -0
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/_numpy_compat.py +73 -0
  5. qiskit/circuit/__init__.py +1335 -0
  6. qiskit/circuit/_add_control.py +338 -0
  7. qiskit/circuit/_classical_resource_map.py +154 -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/annotation.py +404 -0
  12. qiskit/circuit/barrier.py +46 -0
  13. qiskit/circuit/classical/__init__.py +41 -0
  14. qiskit/circuit/classical/expr/__init__.py +266 -0
  15. qiskit/circuit/classical/expr/constructors.py +764 -0
  16. qiskit/circuit/classical/expr/expr.py +156 -0
  17. qiskit/circuit/classical/expr/visitors.py +381 -0
  18. qiskit/circuit/classical/types/__init__.py +113 -0
  19. qiskit/circuit/classical/types/ordering.py +229 -0
  20. qiskit/circuit/classical/types/types.py +30 -0
  21. qiskit/circuit/commutation_checker.py +133 -0
  22. qiskit/circuit/commutation_library.py +20 -0
  23. qiskit/circuit/controlflow/__init__.py +59 -0
  24. qiskit/circuit/controlflow/_builder_utils.py +211 -0
  25. qiskit/circuit/controlflow/box.py +188 -0
  26. qiskit/circuit/controlflow/break_loop.py +56 -0
  27. qiskit/circuit/controlflow/builder.py +791 -0
  28. qiskit/circuit/controlflow/continue_loop.py +56 -0
  29. qiskit/circuit/controlflow/control_flow.py +94 -0
  30. qiskit/circuit/controlflow/for_loop.py +218 -0
  31. qiskit/circuit/controlflow/if_else.py +498 -0
  32. qiskit/circuit/controlflow/switch_case.py +411 -0
  33. qiskit/circuit/controlflow/while_loop.py +166 -0
  34. qiskit/circuit/controlledgate.py +274 -0
  35. qiskit/circuit/delay.py +159 -0
  36. qiskit/circuit/duration.py +80 -0
  37. qiskit/circuit/equivalence.py +94 -0
  38. qiskit/circuit/equivalence_library.py +18 -0
  39. qiskit/circuit/exceptions.py +19 -0
  40. qiskit/circuit/gate.py +261 -0
  41. qiskit/circuit/instruction.py +564 -0
  42. qiskit/circuit/instructionset.py +132 -0
  43. qiskit/circuit/library/__init__.py +984 -0
  44. qiskit/circuit/library/arithmetic/__init__.py +40 -0
  45. qiskit/circuit/library/arithmetic/adders/__init__.py +18 -0
  46. qiskit/circuit/library/arithmetic/adders/adder.py +235 -0
  47. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +123 -0
  48. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +129 -0
  49. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +95 -0
  50. qiskit/circuit/library/arithmetic/exact_reciprocal.py +131 -0
  51. qiskit/circuit/library/arithmetic/functional_pauli_rotations.py +114 -0
  52. qiskit/circuit/library/arithmetic/integer_comparator.py +200 -0
  53. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +363 -0
  54. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +243 -0
  55. qiskit/circuit/library/arithmetic/multipliers/__init__.py +17 -0
  56. qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +145 -0
  57. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +201 -0
  58. qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +108 -0
  59. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +506 -0
  60. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +395 -0
  61. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +501 -0
  62. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +389 -0
  63. qiskit/circuit/library/arithmetic/quadratic_form.py +370 -0
  64. qiskit/circuit/library/arithmetic/weighted_adder.py +428 -0
  65. qiskit/circuit/library/basis_change/__init__.py +15 -0
  66. qiskit/circuit/library/basis_change/qft.py +316 -0
  67. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  68. qiskit/circuit/library/blueprintcircuit.py +322 -0
  69. qiskit/circuit/library/boolean_logic/__init__.py +18 -0
  70. qiskit/circuit/library/boolean_logic/inner_product.py +157 -0
  71. qiskit/circuit/library/boolean_logic/quantum_and.py +204 -0
  72. qiskit/circuit/library/boolean_logic/quantum_or.py +206 -0
  73. qiskit/circuit/library/boolean_logic/quantum_xor.py +167 -0
  74. qiskit/circuit/library/data_preparation/__init__.py +57 -0
  75. qiskit/circuit/library/data_preparation/_z_feature_map.py +115 -0
  76. qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
  77. qiskit/circuit/library/data_preparation/initializer.py +107 -0
  78. qiskit/circuit/library/data_preparation/pauli_feature_map.py +656 -0
  79. qiskit/circuit/library/data_preparation/state_preparation.py +336 -0
  80. qiskit/circuit/library/fourier_checking.py +160 -0
  81. qiskit/circuit/library/generalized_gates/__init__.py +30 -0
  82. qiskit/circuit/library/generalized_gates/diagonal.py +163 -0
  83. qiskit/circuit/library/generalized_gates/gms.py +179 -0
  84. qiskit/circuit/library/generalized_gates/gr.py +219 -0
  85. qiskit/circuit/library/generalized_gates/isometry.py +370 -0
  86. qiskit/circuit/library/generalized_gates/linear_function.py +318 -0
  87. qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +143 -0
  88. qiskit/circuit/library/generalized_gates/mcmt.py +316 -0
  89. qiskit/circuit/library/generalized_gates/pauli.py +84 -0
  90. qiskit/circuit/library/generalized_gates/permutation.py +202 -0
  91. qiskit/circuit/library/generalized_gates/rv.py +96 -0
  92. qiskit/circuit/library/generalized_gates/uc.py +303 -0
  93. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +164 -0
  94. qiskit/circuit/library/generalized_gates/ucrx.py +32 -0
  95. qiskit/circuit/library/generalized_gates/ucry.py +32 -0
  96. qiskit/circuit/library/generalized_gates/ucrz.py +32 -0
  97. qiskit/circuit/library/generalized_gates/unitary.py +236 -0
  98. qiskit/circuit/library/graph_state.py +172 -0
  99. qiskit/circuit/library/grover_operator.py +583 -0
  100. qiskit/circuit/library/hamiltonian_gate.py +142 -0
  101. qiskit/circuit/library/hidden_linear_function.py +163 -0
  102. qiskit/circuit/library/iqp.py +180 -0
  103. qiskit/circuit/library/n_local/__init__.py +45 -0
  104. qiskit/circuit/library/n_local/efficient_su2.py +282 -0
  105. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +520 -0
  106. qiskit/circuit/library/n_local/excitation_preserving.py +301 -0
  107. qiskit/circuit/library/n_local/n_local.py +1478 -0
  108. qiskit/circuit/library/n_local/pauli_two_design.py +246 -0
  109. qiskit/circuit/library/n_local/qaoa_ansatz.py +367 -0
  110. qiskit/circuit/library/n_local/real_amplitudes.py +312 -0
  111. qiskit/circuit/library/n_local/two_local.py +289 -0
  112. qiskit/circuit/library/overlap.py +183 -0
  113. qiskit/circuit/library/pauli_evolution.py +202 -0
  114. qiskit/circuit/library/phase_estimation.py +177 -0
  115. qiskit/circuit/library/phase_oracle.py +239 -0
  116. qiskit/circuit/library/quantum_volume.py +179 -0
  117. qiskit/circuit/library/standard_gates/__init__.py +141 -0
  118. qiskit/circuit/library/standard_gates/dcx.py +76 -0
  119. qiskit/circuit/library/standard_gates/ecr.py +126 -0
  120. qiskit/circuit/library/standard_gates/equivalence_library.py +1936 -0
  121. qiskit/circuit/library/standard_gates/global_phase.py +83 -0
  122. qiskit/circuit/library/standard_gates/h.py +230 -0
  123. qiskit/circuit/library/standard_gates/i.py +76 -0
  124. qiskit/circuit/library/standard_gates/iswap.py +115 -0
  125. qiskit/circuit/library/standard_gates/p.py +415 -0
  126. qiskit/circuit/library/standard_gates/r.py +108 -0
  127. qiskit/circuit/library/standard_gates/rx.py +269 -0
  128. qiskit/circuit/library/standard_gates/rxx.py +165 -0
  129. qiskit/circuit/library/standard_gates/ry.py +268 -0
  130. qiskit/circuit/library/standard_gates/ryy.py +165 -0
  131. qiskit/circuit/library/standard_gates/rz.py +290 -0
  132. qiskit/circuit/library/standard_gates/rzx.py +211 -0
  133. qiskit/circuit/library/standard_gates/rzz.py +181 -0
  134. qiskit/circuit/library/standard_gates/s.py +424 -0
  135. qiskit/circuit/library/standard_gates/swap.py +268 -0
  136. qiskit/circuit/library/standard_gates/sx.py +303 -0
  137. qiskit/circuit/library/standard_gates/t.py +169 -0
  138. qiskit/circuit/library/standard_gates/u.py +379 -0
  139. qiskit/circuit/library/standard_gates/u1.py +466 -0
  140. qiskit/circuit/library/standard_gates/u2.py +145 -0
  141. qiskit/circuit/library/standard_gates/u3.py +412 -0
  142. qiskit/circuit/library/standard_gates/x.py +1335 -0
  143. qiskit/circuit/library/standard_gates/xx_minus_yy.py +164 -0
  144. qiskit/circuit/library/standard_gates/xx_plus_yy.py +197 -0
  145. qiskit/circuit/library/standard_gates/y.py +253 -0
  146. qiskit/circuit/library/standard_gates/z.py +331 -0
  147. qiskit/circuit/library/templates/__init__.py +92 -0
  148. qiskit/circuit/library/templates/clifford/__init__.py +33 -0
  149. qiskit/circuit/library/templates/clifford/clifford_2_1.py +34 -0
  150. qiskit/circuit/library/templates/clifford/clifford_2_2.py +35 -0
  151. qiskit/circuit/library/templates/clifford/clifford_2_3.py +34 -0
  152. qiskit/circuit/library/templates/clifford/clifford_2_4.py +34 -0
  153. qiskit/circuit/library/templates/clifford/clifford_3_1.py +35 -0
  154. qiskit/circuit/library/templates/clifford/clifford_4_1.py +38 -0
  155. qiskit/circuit/library/templates/clifford/clifford_4_2.py +37 -0
  156. qiskit/circuit/library/templates/clifford/clifford_4_3.py +38 -0
  157. qiskit/circuit/library/templates/clifford/clifford_4_4.py +37 -0
  158. qiskit/circuit/library/templates/clifford/clifford_5_1.py +40 -0
  159. qiskit/circuit/library/templates/clifford/clifford_6_1.py +40 -0
  160. qiskit/circuit/library/templates/clifford/clifford_6_2.py +40 -0
  161. qiskit/circuit/library/templates/clifford/clifford_6_3.py +40 -0
  162. qiskit/circuit/library/templates/clifford/clifford_6_4.py +38 -0
  163. qiskit/circuit/library/templates/clifford/clifford_6_5.py +40 -0
  164. qiskit/circuit/library/templates/clifford/clifford_8_1.py +42 -0
  165. qiskit/circuit/library/templates/clifford/clifford_8_2.py +42 -0
  166. qiskit/circuit/library/templates/clifford/clifford_8_3.py +41 -0
  167. qiskit/circuit/library/templates/nct/__init__.py +67 -0
  168. qiskit/circuit/library/templates/nct/template_nct_2a_1.py +34 -0
  169. qiskit/circuit/library/templates/nct/template_nct_2a_2.py +35 -0
  170. qiskit/circuit/library/templates/nct/template_nct_2a_3.py +37 -0
  171. qiskit/circuit/library/templates/nct/template_nct_4a_1.py +43 -0
  172. qiskit/circuit/library/templates/nct/template_nct_4a_2.py +41 -0
  173. qiskit/circuit/library/templates/nct/template_nct_4a_3.py +39 -0
  174. qiskit/circuit/library/templates/nct/template_nct_4b_1.py +41 -0
  175. qiskit/circuit/library/templates/nct/template_nct_4b_2.py +39 -0
  176. qiskit/circuit/library/templates/nct/template_nct_5a_1.py +40 -0
  177. qiskit/circuit/library/templates/nct/template_nct_5a_2.py +40 -0
  178. qiskit/circuit/library/templates/nct/template_nct_5a_3.py +40 -0
  179. qiskit/circuit/library/templates/nct/template_nct_5a_4.py +39 -0
  180. qiskit/circuit/library/templates/nct/template_nct_6a_1.py +40 -0
  181. qiskit/circuit/library/templates/nct/template_nct_6a_2.py +41 -0
  182. qiskit/circuit/library/templates/nct/template_nct_6a_3.py +41 -0
  183. qiskit/circuit/library/templates/nct/template_nct_6a_4.py +41 -0
  184. qiskit/circuit/library/templates/nct/template_nct_6b_1.py +41 -0
  185. qiskit/circuit/library/templates/nct/template_nct_6b_2.py +41 -0
  186. qiskit/circuit/library/templates/nct/template_nct_6c_1.py +41 -0
  187. qiskit/circuit/library/templates/nct/template_nct_7a_1.py +43 -0
  188. qiskit/circuit/library/templates/nct/template_nct_7b_1.py +43 -0
  189. qiskit/circuit/library/templates/nct/template_nct_7c_1.py +43 -0
  190. qiskit/circuit/library/templates/nct/template_nct_7d_1.py +43 -0
  191. qiskit/circuit/library/templates/nct/template_nct_7e_1.py +43 -0
  192. qiskit/circuit/library/templates/nct/template_nct_9a_1.py +45 -0
  193. qiskit/circuit/library/templates/nct/template_nct_9c_1.py +43 -0
  194. qiskit/circuit/library/templates/nct/template_nct_9c_10.py +44 -0
  195. qiskit/circuit/library/templates/nct/template_nct_9c_11.py +44 -0
  196. qiskit/circuit/library/templates/nct/template_nct_9c_12.py +44 -0
  197. qiskit/circuit/library/templates/nct/template_nct_9c_2.py +44 -0
  198. qiskit/circuit/library/templates/nct/template_nct_9c_3.py +44 -0
  199. qiskit/circuit/library/templates/nct/template_nct_9c_4.py +44 -0
  200. qiskit/circuit/library/templates/nct/template_nct_9c_5.py +44 -0
  201. qiskit/circuit/library/templates/nct/template_nct_9c_6.py +44 -0
  202. qiskit/circuit/library/templates/nct/template_nct_9c_7.py +44 -0
  203. qiskit/circuit/library/templates/nct/template_nct_9c_8.py +44 -0
  204. qiskit/circuit/library/templates/nct/template_nct_9c_9.py +44 -0
  205. qiskit/circuit/library/templates/nct/template_nct_9d_1.py +43 -0
  206. qiskit/circuit/library/templates/nct/template_nct_9d_10.py +44 -0
  207. qiskit/circuit/library/templates/nct/template_nct_9d_2.py +44 -0
  208. qiskit/circuit/library/templates/nct/template_nct_9d_3.py +44 -0
  209. qiskit/circuit/library/templates/nct/template_nct_9d_4.py +44 -0
  210. qiskit/circuit/library/templates/nct/template_nct_9d_5.py +44 -0
  211. qiskit/circuit/library/templates/nct/template_nct_9d_6.py +44 -0
  212. qiskit/circuit/library/templates/nct/template_nct_9d_7.py +44 -0
  213. qiskit/circuit/library/templates/nct/template_nct_9d_8.py +44 -0
  214. qiskit/circuit/library/templates/nct/template_nct_9d_9.py +44 -0
  215. qiskit/circuit/library/templates/rzx/__init__.py +25 -0
  216. qiskit/circuit/library/templates/rzx/rzx_cy.py +47 -0
  217. qiskit/circuit/library/templates/rzx/rzx_xz.py +54 -0
  218. qiskit/circuit/library/templates/rzx/rzx_yz.py +45 -0
  219. qiskit/circuit/library/templates/rzx/rzx_zz1.py +69 -0
  220. qiskit/circuit/library/templates/rzx/rzx_zz2.py +59 -0
  221. qiskit/circuit/library/templates/rzx/rzx_zz3.py +59 -0
  222. qiskit/circuit/measure.py +53 -0
  223. qiskit/circuit/operation.py +68 -0
  224. qiskit/circuit/parameter.py +188 -0
  225. qiskit/circuit/parameterexpression.py +737 -0
  226. qiskit/circuit/parametertable.py +119 -0
  227. qiskit/circuit/parametervector.py +140 -0
  228. qiskit/circuit/quantumcircuit.py +7610 -0
  229. qiskit/circuit/quantumcircuitdata.py +137 -0
  230. qiskit/circuit/random/__init__.py +50 -0
  231. qiskit/circuit/random/utils.py +755 -0
  232. qiskit/circuit/reset.py +37 -0
  233. qiskit/circuit/singleton.py +600 -0
  234. qiskit/circuit/store.py +89 -0
  235. qiskit/circuit/tools/__init__.py +16 -0
  236. qiskit/circuit/tools/pi_check.py +185 -0
  237. qiskit/circuit/twirling.py +145 -0
  238. qiskit/compiler/__init__.py +27 -0
  239. qiskit/compiler/transpiler.py +375 -0
  240. qiskit/converters/__init__.py +74 -0
  241. qiskit/converters/circuit_to_dag.py +80 -0
  242. qiskit/converters/circuit_to_dagdependency.py +49 -0
  243. qiskit/converters/circuit_to_dagdependency_v2.py +46 -0
  244. qiskit/converters/circuit_to_gate.py +107 -0
  245. qiskit/converters/circuit_to_instruction.py +142 -0
  246. qiskit/converters/dag_to_circuit.py +79 -0
  247. qiskit/converters/dag_to_dagdependency.py +54 -0
  248. qiskit/converters/dag_to_dagdependency_v2.py +43 -0
  249. qiskit/converters/dagdependency_to_circuit.py +40 -0
  250. qiskit/converters/dagdependency_to_dag.py +48 -0
  251. qiskit/dagcircuit/__init__.py +44 -0
  252. qiskit/dagcircuit/collect_blocks.py +403 -0
  253. qiskit/dagcircuit/dagcircuit.py +24 -0
  254. qiskit/dagcircuit/dagdependency.py +612 -0
  255. qiskit/dagcircuit/dagdependency_v2.py +566 -0
  256. qiskit/dagcircuit/dagdepnode.py +160 -0
  257. qiskit/dagcircuit/dagnode.py +193 -0
  258. qiskit/dagcircuit/exceptions.py +42 -0
  259. qiskit/exceptions.py +153 -0
  260. qiskit/passmanager/__init__.py +258 -0
  261. qiskit/passmanager/base_tasks.py +230 -0
  262. qiskit/passmanager/compilation_status.py +74 -0
  263. qiskit/passmanager/exceptions.py +19 -0
  264. qiskit/passmanager/flow_controllers.py +116 -0
  265. qiskit/passmanager/passmanager.py +353 -0
  266. qiskit/primitives/__init__.py +490 -0
  267. qiskit/primitives/backend_estimator_v2.py +530 -0
  268. qiskit/primitives/backend_sampler_v2.py +339 -0
  269. qiskit/primitives/base/__init__.py +20 -0
  270. qiskit/primitives/base/base_estimator.py +247 -0
  271. qiskit/primitives/base/base_primitive_job.py +78 -0
  272. qiskit/primitives/base/base_primitive_v1.py +45 -0
  273. qiskit/primitives/base/base_result_v1.py +65 -0
  274. qiskit/primitives/base/base_sampler.py +196 -0
  275. qiskit/primitives/base/estimator_result_v1.py +46 -0
  276. qiskit/primitives/base/sampler_result_v1.py +45 -0
  277. qiskit/primitives/base/validation_v1.py +250 -0
  278. qiskit/primitives/containers/__init__.py +26 -0
  279. qiskit/primitives/containers/bindings_array.py +391 -0
  280. qiskit/primitives/containers/bit_array.py +764 -0
  281. qiskit/primitives/containers/data_bin.py +172 -0
  282. qiskit/primitives/containers/estimator_pub.py +222 -0
  283. qiskit/primitives/containers/object_array.py +94 -0
  284. qiskit/primitives/containers/observables_array.py +380 -0
  285. qiskit/primitives/containers/primitive_result.py +53 -0
  286. qiskit/primitives/containers/pub_result.py +51 -0
  287. qiskit/primitives/containers/sampler_pub.py +193 -0
  288. qiskit/primitives/containers/sampler_pub_result.py +74 -0
  289. qiskit/primitives/containers/shape.py +129 -0
  290. qiskit/primitives/primitive_job.py +100 -0
  291. qiskit/primitives/statevector_estimator.py +175 -0
  292. qiskit/primitives/statevector_sampler.py +290 -0
  293. qiskit/primitives/utils.py +72 -0
  294. qiskit/providers/__init__.py +677 -0
  295. qiskit/providers/backend.py +364 -0
  296. qiskit/providers/basic_provider/__init__.py +47 -0
  297. qiskit/providers/basic_provider/basic_provider.py +121 -0
  298. qiskit/providers/basic_provider/basic_provider_job.py +65 -0
  299. qiskit/providers/basic_provider/basic_provider_tools.py +218 -0
  300. qiskit/providers/basic_provider/basic_simulator.py +693 -0
  301. qiskit/providers/basic_provider/exceptions.py +30 -0
  302. qiskit/providers/exceptions.py +33 -0
  303. qiskit/providers/fake_provider/__init__.py +69 -0
  304. qiskit/providers/fake_provider/generic_backend_v2.py +376 -0
  305. qiskit/providers/fake_provider/utils/__init__.py +15 -0
  306. qiskit/providers/job.py +147 -0
  307. qiskit/providers/jobstatus.py +30 -0
  308. qiskit/providers/options.py +273 -0
  309. qiskit/providers/providerutils.py +110 -0
  310. qiskit/qasm/libs/dummy/stdgates.inc +75 -0
  311. qiskit/qasm/libs/qelib1.inc +266 -0
  312. qiskit/qasm/libs/stdgates.inc +82 -0
  313. qiskit/qasm2/__init__.py +669 -0
  314. qiskit/qasm2/exceptions.py +27 -0
  315. qiskit/qasm2/export.py +364 -0
  316. qiskit/qasm2/parse.py +438 -0
  317. qiskit/qasm3/__init__.py +466 -0
  318. qiskit/qasm3/ast.py +796 -0
  319. qiskit/qasm3/exceptions.py +27 -0
  320. qiskit/qasm3/experimental.py +70 -0
  321. qiskit/qasm3/exporter.py +1363 -0
  322. qiskit/qasm3/printer.py +620 -0
  323. qiskit/qpy/__init__.py +2141 -0
  324. qiskit/qpy/binary_io/__init__.py +35 -0
  325. qiskit/qpy/binary_io/circuits.py +1687 -0
  326. qiskit/qpy/binary_io/parse_sympy_repr.py +126 -0
  327. qiskit/qpy/binary_io/schedules.py +288 -0
  328. qiskit/qpy/binary_io/value.py +1183 -0
  329. qiskit/qpy/common.py +361 -0
  330. qiskit/qpy/exceptions.py +53 -0
  331. qiskit/qpy/formats.py +458 -0
  332. qiskit/qpy/interface.py +384 -0
  333. qiskit/qpy/type_keys.py +415 -0
  334. qiskit/quantum_info/__init__.py +172 -0
  335. qiskit/quantum_info/analysis/__init__.py +17 -0
  336. qiskit/quantum_info/analysis/average.py +47 -0
  337. qiskit/quantum_info/analysis/distance.py +104 -0
  338. qiskit/quantum_info/analysis/make_observable.py +44 -0
  339. qiskit/quantum_info/analysis/z2_symmetries.py +484 -0
  340. qiskit/quantum_info/operators/__init__.py +29 -0
  341. qiskit/quantum_info/operators/base_operator.py +145 -0
  342. qiskit/quantum_info/operators/channel/__init__.py +29 -0
  343. qiskit/quantum_info/operators/channel/chi.py +191 -0
  344. qiskit/quantum_info/operators/channel/choi.py +218 -0
  345. qiskit/quantum_info/operators/channel/kraus.py +337 -0
  346. qiskit/quantum_info/operators/channel/ptm.py +204 -0
  347. qiskit/quantum_info/operators/channel/quantum_channel.py +348 -0
  348. qiskit/quantum_info/operators/channel/stinespring.py +296 -0
  349. qiskit/quantum_info/operators/channel/superop.py +373 -0
  350. qiskit/quantum_info/operators/channel/transformations.py +490 -0
  351. qiskit/quantum_info/operators/custom_iterator.py +48 -0
  352. qiskit/quantum_info/operators/dihedral/__init__.py +18 -0
  353. qiskit/quantum_info/operators/dihedral/dihedral.py +511 -0
  354. qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +216 -0
  355. qiskit/quantum_info/operators/dihedral/polynomial.py +313 -0
  356. qiskit/quantum_info/operators/dihedral/random.py +64 -0
  357. qiskit/quantum_info/operators/linear_op.py +25 -0
  358. qiskit/quantum_info/operators/measures.py +418 -0
  359. qiskit/quantum_info/operators/mixins/__init__.py +52 -0
  360. qiskit/quantum_info/operators/mixins/adjoint.py +52 -0
  361. qiskit/quantum_info/operators/mixins/group.py +171 -0
  362. qiskit/quantum_info/operators/mixins/linear.py +84 -0
  363. qiskit/quantum_info/operators/mixins/multiply.py +62 -0
  364. qiskit/quantum_info/operators/mixins/tolerances.py +72 -0
  365. qiskit/quantum_info/operators/op_shape.py +525 -0
  366. qiskit/quantum_info/operators/operator.py +869 -0
  367. qiskit/quantum_info/operators/operator_utils.py +76 -0
  368. qiskit/quantum_info/operators/predicates.py +183 -0
  369. qiskit/quantum_info/operators/random.py +154 -0
  370. qiskit/quantum_info/operators/scalar_op.py +254 -0
  371. qiskit/quantum_info/operators/symplectic/__init__.py +24 -0
  372. qiskit/quantum_info/operators/symplectic/base_pauli.py +719 -0
  373. qiskit/quantum_info/operators/symplectic/clifford.py +1032 -0
  374. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +584 -0
  375. qiskit/quantum_info/operators/symplectic/pauli.py +755 -0
  376. qiskit/quantum_info/operators/symplectic/pauli_list.py +1242 -0
  377. qiskit/quantum_info/operators/symplectic/pauli_utils.py +40 -0
  378. qiskit/quantum_info/operators/symplectic/random.py +117 -0
  379. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1239 -0
  380. qiskit/quantum_info/operators/utils/__init__.py +20 -0
  381. qiskit/quantum_info/operators/utils/anti_commutator.py +36 -0
  382. qiskit/quantum_info/operators/utils/commutator.py +36 -0
  383. qiskit/quantum_info/operators/utils/double_commutator.py +76 -0
  384. qiskit/quantum_info/quaternion.py +156 -0
  385. qiskit/quantum_info/random.py +26 -0
  386. qiskit/quantum_info/states/__init__.py +28 -0
  387. qiskit/quantum_info/states/densitymatrix.py +857 -0
  388. qiskit/quantum_info/states/measures.py +288 -0
  389. qiskit/quantum_info/states/quantum_state.py +503 -0
  390. qiskit/quantum_info/states/random.py +157 -0
  391. qiskit/quantum_info/states/stabilizerstate.py +805 -0
  392. qiskit/quantum_info/states/statevector.py +977 -0
  393. qiskit/quantum_info/states/utils.py +247 -0
  394. qiskit/result/__init__.py +61 -0
  395. qiskit/result/counts.py +189 -0
  396. qiskit/result/distributions/__init__.py +17 -0
  397. qiskit/result/distributions/probability.py +100 -0
  398. qiskit/result/distributions/quasi.py +154 -0
  399. qiskit/result/exceptions.py +40 -0
  400. qiskit/result/models.py +241 -0
  401. qiskit/result/postprocess.py +239 -0
  402. qiskit/result/result.py +385 -0
  403. qiskit/result/sampled_expval.py +76 -0
  404. qiskit/result/utils.py +294 -0
  405. qiskit/synthesis/__init__.py +250 -0
  406. qiskit/synthesis/arithmetic/__init__.py +18 -0
  407. qiskit/synthesis/arithmetic/adders/__init__.py +18 -0
  408. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
  409. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +107 -0
  410. qiskit/synthesis/arithmetic/adders/rv_ripple_carry_adder.py +156 -0
  411. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
  412. qiskit/synthesis/arithmetic/comparators/__init__.py +16 -0
  413. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  414. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  415. qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
  416. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +103 -0
  417. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +100 -0
  418. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  419. qiskit/synthesis/boolean/__init__.py +13 -0
  420. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  421. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  422. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  423. qiskit/synthesis/clifford/__init__.py +19 -0
  424. qiskit/synthesis/clifford/clifford_decompose_ag.py +178 -0
  425. qiskit/synthesis/clifford/clifford_decompose_bm.py +46 -0
  426. qiskit/synthesis/clifford/clifford_decompose_full.py +64 -0
  427. qiskit/synthesis/clifford/clifford_decompose_greedy.py +58 -0
  428. qiskit/synthesis/clifford/clifford_decompose_layers.py +447 -0
  429. qiskit/synthesis/cnotdihedral/__init__.py +17 -0
  430. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +52 -0
  431. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +141 -0
  432. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_two_qubits.py +266 -0
  433. qiskit/synthesis/discrete_basis/__init__.py +16 -0
  434. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +53 -0
  435. qiskit/synthesis/discrete_basis/solovay_kitaev.py +280 -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 +123 -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 +316 -0
  442. qiskit/synthesis/evolution/qdrift.py +133 -0
  443. qiskit/synthesis/evolution/suzuki_trotter.py +227 -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 +29 -0
  454. qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
  455. qiskit/synthesis/multi_controlled/mcx_synthesis.py +583 -0
  456. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +205 -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 +61 -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 +359 -0
  495. qiskit/transpiler/__init__.py +1352 -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 +263 -0
  500. qiskit/transpiler/layout.py +740 -0
  501. qiskit/transpiler/passes/__init__.py +278 -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 +197 -0
  523. qiskit/transpiler/passes/layout/disjoint_utils.py +54 -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 +525 -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 +292 -0
  532. qiskit/transpiler/passes/layout/vf2_post_layout.py +376 -0
  533. qiskit/transpiler/passes/layout/vf2_utils.py +245 -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 +251 -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_clifford_t.py +68 -0
  556. qiskit/transpiler/passes/optimization/optimize_cliffords.py +89 -0
  557. qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +71 -0
  558. qiskit/transpiler/passes/optimization/remove_diagonal_gates_before_measure.py +41 -0
  559. qiskit/transpiler/passes/optimization/remove_final_reset.py +37 -0
  560. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +70 -0
  561. qiskit/transpiler/passes/optimization/remove_reset_in_zero_state.py +37 -0
  562. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +50 -0
  563. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +63 -0
  564. qiskit/transpiler/passes/optimization/template_matching/__init__.py +19 -0
  565. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +749 -0
  566. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +452 -0
  567. qiskit/transpiler/passes/optimization/template_matching/maximal_matches.py +77 -0
  568. qiskit/transpiler/passes/optimization/template_matching/template_matching.py +370 -0
  569. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +633 -0
  570. qiskit/transpiler/passes/optimization/template_optimization.py +158 -0
  571. qiskit/transpiler/passes/routing/__init__.py +21 -0
  572. qiskit/transpiler/passes/routing/algorithms/__init__.py +33 -0
  573. qiskit/transpiler/passes/routing/algorithms/token_swapper.py +105 -0
  574. qiskit/transpiler/passes/routing/algorithms/types.py +46 -0
  575. qiskit/transpiler/passes/routing/algorithms/util.py +103 -0
  576. qiskit/transpiler/passes/routing/basic_swap.py +166 -0
  577. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/__init__.py +25 -0
  578. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_block.py +60 -0
  579. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +397 -0
  580. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/pauli_2q_evolution_commutation.py +145 -0
  581. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +306 -0
  582. qiskit/transpiler/passes/routing/layout_transformation.py +119 -0
  583. qiskit/transpiler/passes/routing/lookahead_swap.py +390 -0
  584. qiskit/transpiler/passes/routing/sabre_swap.py +465 -0
  585. qiskit/transpiler/passes/routing/star_prerouting.py +433 -0
  586. qiskit/transpiler/passes/routing/utils.py +35 -0
  587. qiskit/transpiler/passes/scheduling/__init__.py +21 -0
  588. qiskit/transpiler/passes/scheduling/alignments/__init__.py +79 -0
  589. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +70 -0
  590. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +251 -0
  591. qiskit/transpiler/passes/scheduling/padding/__init__.py +17 -0
  592. qiskit/transpiler/passes/scheduling/padding/base_padding.py +284 -0
  593. qiskit/transpiler/passes/scheduling/padding/context_aware_dynamical_decoupling.py +876 -0
  594. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +415 -0
  595. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +90 -0
  596. qiskit/transpiler/passes/scheduling/scheduling/__init__.py +17 -0
  597. qiskit/transpiler/passes/scheduling/scheduling/alap.py +93 -0
  598. qiskit/transpiler/passes/scheduling/scheduling/asap.py +100 -0
  599. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +88 -0
  600. qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
  601. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +237 -0
  602. qiskit/transpiler/passes/synthesis/__init__.py +21 -0
  603. qiskit/transpiler/passes/synthesis/aqc_plugin.py +153 -0
  604. qiskit/transpiler/passes/synthesis/clifford_unitary_synth_plugin.py +123 -0
  605. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  606. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +429 -0
  607. qiskit/transpiler/passes/synthesis/hls_plugins.py +2338 -0
  608. qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +41 -0
  609. qiskit/transpiler/passes/synthesis/plugin.py +738 -0
  610. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +318 -0
  611. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +425 -0
  612. qiskit/transpiler/passes/utils/__init__.py +32 -0
  613. qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +41 -0
  614. qiskit/transpiler/passes/utils/check_gate_direction.py +60 -0
  615. qiskit/transpiler/passes/utils/check_map.py +78 -0
  616. qiskit/transpiler/passes/utils/contains_instruction.py +45 -0
  617. qiskit/transpiler/passes/utils/control_flow.py +61 -0
  618. qiskit/transpiler/passes/utils/dag_fixed_point.py +36 -0
  619. qiskit/transpiler/passes/utils/error.py +69 -0
  620. qiskit/transpiler/passes/utils/filter_op_nodes.py +66 -0
  621. qiskit/transpiler/passes/utils/fixed_point.py +48 -0
  622. qiskit/transpiler/passes/utils/gate_direction.py +93 -0
  623. qiskit/transpiler/passes/utils/gates_basis.py +51 -0
  624. qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +163 -0
  625. qiskit/transpiler/passes/utils/minimum_point.py +118 -0
  626. qiskit/transpiler/passes/utils/remove_barriers.py +50 -0
  627. qiskit/transpiler/passes/utils/remove_final_measurements.py +121 -0
  628. qiskit/transpiler/passes/utils/unroll_forloops.py +81 -0
  629. qiskit/transpiler/passmanager.py +503 -0
  630. qiskit/transpiler/passmanager_config.py +154 -0
  631. qiskit/transpiler/preset_passmanagers/__init__.py +93 -0
  632. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +1114 -0
  633. qiskit/transpiler/preset_passmanagers/common.py +773 -0
  634. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +443 -0
  635. qiskit/transpiler/preset_passmanagers/level0.py +104 -0
  636. qiskit/transpiler/preset_passmanagers/level1.py +108 -0
  637. qiskit/transpiler/preset_passmanagers/level2.py +109 -0
  638. qiskit/transpiler/preset_passmanagers/level3.py +110 -0
  639. qiskit/transpiler/preset_passmanagers/plugin.py +346 -0
  640. qiskit/transpiler/target.py +905 -0
  641. qiskit/transpiler/timing_constraints.py +59 -0
  642. qiskit/user_config.py +266 -0
  643. qiskit/utils/__init__.py +90 -0
  644. qiskit/utils/classtools.py +146 -0
  645. qiskit/utils/deprecation.py +382 -0
  646. qiskit/utils/lazy_tester.py +363 -0
  647. qiskit/utils/optionals.py +355 -0
  648. qiskit/utils/parallel.py +318 -0
  649. qiskit/utils/units.py +146 -0
  650. qiskit/version.py +84 -0
  651. qiskit/visualization/__init__.py +290 -0
  652. qiskit/visualization/array.py +207 -0
  653. qiskit/visualization/bloch.py +778 -0
  654. qiskit/visualization/circuit/__init__.py +15 -0
  655. qiskit/visualization/circuit/_utils.py +677 -0
  656. qiskit/visualization/circuit/circuit_visualization.py +735 -0
  657. qiskit/visualization/circuit/latex.py +668 -0
  658. qiskit/visualization/circuit/matplotlib.py +2041 -0
  659. qiskit/visualization/circuit/qcstyle.py +130 -0
  660. qiskit/visualization/circuit/styles/__init__.py +13 -0
  661. qiskit/visualization/circuit/styles/bw.json +202 -0
  662. qiskit/visualization/circuit/styles/clifford.json +202 -0
  663. qiskit/visualization/circuit/styles/iqp-dark.json +214 -0
  664. qiskit/visualization/circuit/styles/iqp.json +214 -0
  665. qiskit/visualization/circuit/styles/textbook.json +202 -0
  666. qiskit/visualization/circuit/text.py +1849 -0
  667. qiskit/visualization/circuit_visualization.py +19 -0
  668. qiskit/visualization/counts_visualization.py +487 -0
  669. qiskit/visualization/dag/__init__.py +13 -0
  670. qiskit/visualization/dag/dagstyle.py +103 -0
  671. qiskit/visualization/dag/styles/__init__.py +13 -0
  672. qiskit/visualization/dag/styles/color.json +10 -0
  673. qiskit/visualization/dag/styles/plain.json +5 -0
  674. qiskit/visualization/dag_visualization.py +389 -0
  675. qiskit/visualization/exceptions.py +21 -0
  676. qiskit/visualization/gate_map.py +1424 -0
  677. qiskit/visualization/library.py +40 -0
  678. qiskit/visualization/pass_manager_visualization.py +312 -0
  679. qiskit/visualization/state_visualization.py +1546 -0
  680. qiskit/visualization/style.py +223 -0
  681. qiskit/visualization/timeline/__init__.py +21 -0
  682. qiskit/visualization/timeline/core.py +495 -0
  683. qiskit/visualization/timeline/drawings.py +260 -0
  684. qiskit/visualization/timeline/generators.py +506 -0
  685. qiskit/visualization/timeline/interface.py +444 -0
  686. qiskit/visualization/timeline/layouts.py +115 -0
  687. qiskit/visualization/timeline/plotters/__init__.py +16 -0
  688. qiskit/visualization/timeline/plotters/base_plotter.py +58 -0
  689. qiskit/visualization/timeline/plotters/matplotlib.py +195 -0
  690. qiskit/visualization/timeline/stylesheet.py +301 -0
  691. qiskit/visualization/timeline/types.py +148 -0
  692. qiskit/visualization/transition_visualization.py +369 -0
  693. qiskit/visualization/utils.py +49 -0
  694. qiskit-2.1.0rc1.dist-info/METADATA +221 -0
  695. qiskit-2.1.0rc1.dist-info/RECORD +699 -0
  696. qiskit-2.1.0rc1.dist-info/WHEEL +6 -0
  697. qiskit-2.1.0rc1.dist-info/entry_points.txt +88 -0
  698. qiskit-2.1.0rc1.dist-info/licenses/LICENSE.txt +203 -0
  699. qiskit-2.1.0rc1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,269 @@
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
+ """Rotation around the X axis."""
14
+
15
+ from __future__ import annotations
16
+
17
+ import math
18
+ from typing import Optional, Union
19
+ import numpy
20
+
21
+ from qiskit.circuit.controlledgate import ControlledGate
22
+ from qiskit.circuit.gate import Gate
23
+ from qiskit.circuit.parameterexpression import ParameterValueType
24
+ from qiskit._accelerate.circuit import StandardGate
25
+
26
+
27
+ class RXGate(Gate):
28
+ r"""Single-qubit rotation about the X axis.
29
+
30
+ Can be applied to a :class:`~qiskit.circuit.QuantumCircuit`
31
+ with the :meth:`~qiskit.circuit.QuantumCircuit.rx` method.
32
+
33
+ **Circuit symbol:**
34
+
35
+ .. code-block:: text
36
+
37
+ ┌───────┐
38
+ q_0: ┤ Rx(ϴ) ├
39
+ └───────┘
40
+
41
+ **Matrix Representation:**
42
+
43
+ .. math::
44
+
45
+ \newcommand{\rotationangle}{\frac{\theta}{2}}
46
+
47
+ RX(\theta) = \exp\left(-i \rotationangle X\right) =
48
+ \begin{pmatrix}
49
+ \cos\left(\rotationangle\right) & -i\sin\left(\rotationangle\right) \\
50
+ -i\sin\left(\rotationangle\right) & \cos\left(\rotationangle\right)
51
+ \end{pmatrix}
52
+ """
53
+
54
+ _standard_gate = StandardGate.RX
55
+
56
+ def __init__(self, theta: ParameterValueType, label: Optional[str] = None):
57
+ """Create new RX gate."""
58
+ super().__init__("rx", 1, [theta], label=label)
59
+
60
+ def _define(self):
61
+ """Default definition"""
62
+ # pylint: disable=cyclic-import
63
+ from qiskit.circuit import QuantumCircuit
64
+
65
+ # ┌────────┐
66
+ # q: ┤ R(θ,0) ├
67
+ # └────────┘
68
+
69
+ self.definition = QuantumCircuit._from_circuit_data(
70
+ StandardGate.RX._get_definition(self.params), add_regs=True, name=self.name
71
+ )
72
+
73
+ def control(
74
+ self,
75
+ num_ctrl_qubits: int = 1,
76
+ label: str | None = None,
77
+ ctrl_state: str | int | None = None,
78
+ annotated: bool | None = None,
79
+ ):
80
+ """Return a (multi-)controlled-RX gate.
81
+
82
+ Args:
83
+ num_ctrl_qubits: number of control qubits.
84
+ label: An optional label for the gate [Default: ``None``]
85
+ ctrl_state: control state expressed as integer,
86
+ string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
87
+ annotated: indicates whether the controlled gate should be implemented
88
+ as an annotated gate. If ``None``, this is set to ``True`` if
89
+ the gate contains free parameters and more than one control qubit, in which
90
+ case it cannot yet be synthesized. Otherwise it is set to ``False``.
91
+
92
+ Returns:
93
+ ControlledGate: controlled version of this gate.
94
+ """
95
+ # deliberately capture annotated in [None, False] here
96
+ if not annotated and num_ctrl_qubits == 1:
97
+ gate = CRXGate(self.params[0], label=label, ctrl_state=ctrl_state)
98
+ gate.base_gate.label = self.label
99
+ else:
100
+ gate = super().control(
101
+ num_ctrl_qubits=num_ctrl_qubits,
102
+ label=label,
103
+ ctrl_state=ctrl_state,
104
+ annotated=annotated,
105
+ )
106
+ return gate
107
+
108
+ def inverse(self, annotated: bool = False):
109
+ r"""Return inverted RX gate.
110
+
111
+ :math:`RX(\lambda)^{\dagger} = RX(-\lambda)`
112
+
113
+ Args:
114
+ annotated: when set to ``True``, this is typically used to return an
115
+ :class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
116
+ :class:`.Gate`. However, for this class this argument is ignored as the inverse
117
+ of this gate is always a :class:`.RXGate` with an inverted parameter value.
118
+
119
+ Returns:
120
+ RXGate: inverse gate.
121
+ """
122
+ return RXGate(-self.params[0])
123
+
124
+ def __array__(self, dtype=None, copy=None):
125
+ """Return a numpy.array for the RX gate."""
126
+ if copy is False:
127
+ raise ValueError("unable to avoid copy while creating an array as requested")
128
+ cos = math.cos(self.params[0] / 2)
129
+ sin = math.sin(self.params[0] / 2)
130
+ return numpy.array([[cos, -1j * sin], [-1j * sin, cos]], dtype=dtype)
131
+
132
+ def power(self, exponent: float, annotated: bool = False):
133
+ (theta,) = self.params
134
+ return RXGate(exponent * theta)
135
+
136
+ def __eq__(self, other):
137
+ if isinstance(other, RXGate):
138
+ return self._compare_parameters(other)
139
+ return False
140
+
141
+
142
+ class CRXGate(ControlledGate):
143
+ r"""Controlled-RX gate.
144
+
145
+ Can be applied to a :class:`~qiskit.circuit.QuantumCircuit`
146
+ with the :meth:`~qiskit.circuit.QuantumCircuit.crx` method.
147
+
148
+ **Circuit symbol:**
149
+
150
+ .. code-block:: text
151
+
152
+ q_0: ────■────
153
+ ┌───┴───┐
154
+ q_1: ┤ Rx(ϴ) ├
155
+ └───────┘
156
+
157
+ **Matrix representation:**
158
+
159
+ .. math::
160
+
161
+ \newcommand{\rotationangle}{\frac{\theta}{2}}
162
+
163
+ CRX(\theta)\ q_0, q_1 =
164
+ I \otimes |0\rangle\langle 0| + RX(\theta) \otimes |1\rangle\langle 1| =
165
+ \begin{pmatrix}
166
+ 1 & 0 & 0 & 0 \\
167
+ 0 & \cos\left(\rotationangle\right) & 0 & -i\sin\left(\rotationangle\right) \\
168
+ 0 & 0 & 1 & 0 \\
169
+ 0 & -i\sin\left(\rotationangle\right) & 0 & \cos\left(\rotationangle\right)
170
+ \end{pmatrix}
171
+
172
+ .. note::
173
+
174
+ In Qiskit's convention, higher qubit indices are more significant
175
+ (little endian convention). In many textbooks, controlled gates are
176
+ presented with the assumption of more significant qubits as control,
177
+ which in our case would be q_1. Thus a textbook matrix for this
178
+ gate will be:
179
+
180
+ .. code-block:: text
181
+
182
+ ┌───────┐
183
+ q_0: ┤ Rx(ϴ) ├
184
+ └───┬───┘
185
+ q_1: ────■────
186
+
187
+ .. math::
188
+
189
+ \newcommand{\rotationangle}{\frac{\theta}{2}}
190
+
191
+ CRX(\theta)\ q_1, q_0 =
192
+ |0\rangle\langle0| \otimes I + |1\rangle\langle1| \otimes RX(\theta) =
193
+ \begin{pmatrix}
194
+ 1 & 0 & 0 & 0 \\
195
+ 0 & 1 & 0 & 0 \\
196
+ 0 & 0 & \cos\left(\rotationangle\right) & -i\sin\left(\rotationangle\right) \\
197
+ 0 & 0 & -i\sin\left(\rotationangle\right) & \cos\left(\rotationangle\right)
198
+ \end{pmatrix}
199
+ """
200
+
201
+ _standard_gate = StandardGate.CRX
202
+
203
+ def __init__(
204
+ self,
205
+ theta: ParameterValueType,
206
+ label: Optional[str] = None,
207
+ ctrl_state: Optional[Union[str, int]] = None,
208
+ *,
209
+ _base_label=None,
210
+ ):
211
+ """Create new CRX gate."""
212
+ super().__init__(
213
+ "crx",
214
+ 2,
215
+ [theta],
216
+ num_ctrl_qubits=1,
217
+ label=label,
218
+ ctrl_state=ctrl_state,
219
+ base_gate=RXGate(theta, label=_base_label),
220
+ )
221
+
222
+ def _define(self):
223
+ """Default definition"""
224
+ # pylint: disable=cyclic-import
225
+ from qiskit.circuit import QuantumCircuit
226
+
227
+ # q_0: ───────■────────────────────■──────────────────────
228
+ # ┌───┐┌─┴─┐┌──────────────┐┌─┴─┐┌───────────┐┌─────┐
229
+ # q_1: ┤ S ├┤ X ├┤ Ry((-0.5)*θ) ├┤ X ├┤ Ry(0.5*θ) ├┤ Sdg ├
230
+ # └───┘└───┘└──────────────┘└───┘└───────────┘└─────┘
231
+
232
+ self.definition = QuantumCircuit._from_circuit_data(
233
+ StandardGate.CRX._get_definition(self.params), add_regs=True, name=self.name
234
+ )
235
+
236
+ def inverse(self, annotated: bool = False):
237
+ """Return inverse CRX gate (i.e. with the negative rotation angle).
238
+
239
+ Args:
240
+ annotated: when set to ``True``, this is typically used to return an
241
+ :class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
242
+ :class:`.Gate`. However, for this class this argument is ignored as the inverse
243
+ of this gate is always a :class:`.CRXGate` with an inverted parameter value.
244
+
245
+ Returns:
246
+ CRXGate: inverse gate.
247
+ """
248
+ return CRXGate(-self.params[0], ctrl_state=self.ctrl_state)
249
+
250
+ def __array__(self, dtype=None, copy=None):
251
+ """Return a numpy.array for the CRX gate."""
252
+ if copy is False:
253
+ raise ValueError("unable to avoid copy while creating an array as requested")
254
+ half_theta = float(self.params[0]) / 2
255
+ cos = math.cos(half_theta)
256
+ isin = 1j * math.sin(half_theta)
257
+ if self.ctrl_state:
258
+ return numpy.array(
259
+ [[1, 0, 0, 0], [0, cos, 0, -isin], [0, 0, 1, 0], [0, -isin, 0, cos]], dtype=dtype
260
+ )
261
+ else:
262
+ return numpy.array(
263
+ [[cos, 0, -isin, 0], [0, 1, 0, 0], [-isin, 0, cos, 0], [0, 0, 0, 1]], dtype=dtype
264
+ )
265
+
266
+ def __eq__(self, other):
267
+ if isinstance(other, CRXGate):
268
+ return self._compare_parameters(other) and self.ctrl_state == other.ctrl_state
269
+ return False
@@ -0,0 +1,165 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2017, 2019.
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-rotation gate."""
14
+
15
+ from __future__ import annotations
16
+
17
+ import math
18
+ from typing import Optional
19
+ import numpy
20
+ from qiskit.circuit.gate import Gate
21
+ from qiskit.circuit.parameterexpression import ParameterValueType, ParameterExpression
22
+ from qiskit._accelerate.circuit import StandardGate
23
+
24
+
25
+ class RXXGate(Gate):
26
+ r"""A parametric 2-qubit :math:`X \otimes X` interaction (rotation about XX).
27
+
28
+ This gate is symmetric, and is maximally entangling at :math:`\theta = \pi/2`.
29
+
30
+ Can be applied to a :class:`~qiskit.circuit.QuantumCircuit`
31
+ with the :meth:`~qiskit.circuit.QuantumCircuit.rxx` method.
32
+
33
+ **Circuit Symbol:**
34
+
35
+ .. code-block:: text
36
+
37
+ ┌─────────┐
38
+ q_0: ┤1 ├
39
+ │ Rxx(ϴ) │
40
+ q_1: ┤0 ├
41
+ └─────────┘
42
+
43
+ **Matrix Representation:**
44
+
45
+ .. math::
46
+
47
+ \newcommand{\rotationangle}{\frac{\theta}{2}}
48
+
49
+ R_{XX}(\theta) = \exp\left(-i \rotationangle X{\otimes}X\right) =
50
+ \begin{pmatrix}
51
+ \cos\left(\rotationangle\right) & 0 & 0 & -i\sin\left(\rotationangle\right) \\
52
+ 0 & \cos\left(\rotationangle\right) & -i\sin\left(\rotationangle\right) & 0 \\
53
+ 0 & -i\sin\left(\rotationangle\right) & \cos\left(\rotationangle\right) & 0 \\
54
+ -i\sin\left(\rotationangle\right) & 0 & 0 & \cos\left(\rotationangle\right)
55
+ \end{pmatrix}
56
+
57
+ **Examples:**
58
+
59
+ .. math::
60
+
61
+ R_{XX}(\theta = 0) = I
62
+
63
+ .. math::
64
+
65
+ R_{XX}(\theta = \pi) = -i X \otimes X
66
+
67
+ .. math::
68
+
69
+ R_{XX}\left(\theta = \frac{\pi}{2}\right) = \frac{1}{\sqrt{2}}
70
+ \begin{pmatrix}
71
+ 1 & 0 & 0 & -i \\
72
+ 0 & 1 & -i & 0 \\
73
+ 0 & -i & 1 & 0 \\
74
+ -i & 0 & 0 & 1
75
+ \end{pmatrix}
76
+ """
77
+
78
+ _standard_gate = StandardGate.RXX
79
+
80
+ def __init__(self, theta: ParameterValueType, label: Optional[str] = None):
81
+ """Create new RXX gate."""
82
+ super().__init__("rxx", 2, [theta], label=label)
83
+
84
+ def _define(self):
85
+ """Default definition"""
86
+ # pylint: disable=cyclic-import
87
+ from qiskit.circuit import QuantumCircuit
88
+
89
+ # ┌───┐ ┌───┐
90
+ # q_0: ┤ H ├──■─────────────■──┤ H ├
91
+ # ├───┤┌─┴─┐┌───────┐┌─┴─┐├───┤
92
+ # q_1: ┤ H ├┤ X ├┤ Rz(0) ├┤ X ├┤ H ├
93
+ # └───┘└───┘└───────┘└───┘└───┘
94
+
95
+ self.definition = QuantumCircuit._from_circuit_data(
96
+ StandardGate.RXX._get_definition(self.params), add_regs=True, name=self.name
97
+ )
98
+
99
+ def control(
100
+ self,
101
+ num_ctrl_qubits: int = 1,
102
+ label: str | None = None,
103
+ ctrl_state: str | int | None = None,
104
+ annotated: bool | None = None,
105
+ ):
106
+ """Return a (multi-)controlled-RXX gate.
107
+
108
+ Args:
109
+ num_ctrl_qubits: number of control qubits.
110
+ label: An optional label for the gate [Default: ``None``]
111
+ ctrl_state: control state expressed as integer,
112
+ string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
113
+ annotated: indicates whether the controlled gate should be implemented
114
+ as an annotated gate. If ``None``, this is set to ``True`` if
115
+ the gate contains free parameters, in which case it cannot
116
+ yet be synthesized.
117
+
118
+ Returns:
119
+ ControlledGate: controlled version of this gate.
120
+ """
121
+ if annotated is None:
122
+ annotated = any(isinstance(p, ParameterExpression) for p in self.params)
123
+
124
+ gate = super().control(
125
+ num_ctrl_qubits=num_ctrl_qubits,
126
+ label=label,
127
+ ctrl_state=ctrl_state,
128
+ annotated=annotated,
129
+ )
130
+ return gate
131
+
132
+ def inverse(self, annotated: bool = False):
133
+ """Return inverse RXX gate (i.e. with the negative rotation angle).
134
+
135
+ Args:
136
+ annotated: when set to ``True``, this is typically used to return an
137
+ :class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
138
+ :class:`.Gate`. However, for this class this argument is ignored as the inverse
139
+ of this gate is always a :class:`.RXXGate` with an inverted parameter value.
140
+
141
+ Returns:
142
+ RXXGate: inverse gate.
143
+ """
144
+ return RXXGate(-self.params[0])
145
+
146
+ def __array__(self, dtype=None, copy=None):
147
+ """Return a Numpy.array for the RXX gate."""
148
+ if copy is False:
149
+ raise ValueError("unable to avoid copy while creating an array as requested")
150
+ theta2 = float(self.params[0]) / 2
151
+ cos = math.cos(theta2)
152
+ isin = 1j * math.sin(theta2)
153
+ return numpy.array(
154
+ [[cos, 0, 0, -isin], [0, cos, -isin, 0], [0, -isin, cos, 0], [-isin, 0, 0, cos]],
155
+ dtype=dtype,
156
+ )
157
+
158
+ def power(self, exponent: float, annotated: bool = False):
159
+ (theta,) = self.params
160
+ return RXXGate(exponent * theta)
161
+
162
+ def __eq__(self, other):
163
+ if isinstance(other, RXXGate):
164
+ return self._compare_parameters(other)
165
+ return False
@@ -0,0 +1,268 @@
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
+ """Rotation around the Y axis."""
14
+
15
+ from __future__ import annotations
16
+
17
+ import math
18
+ from typing import Optional, Union
19
+ import numpy
20
+ from qiskit.circuit.controlledgate import ControlledGate
21
+ from qiskit.circuit.gate import Gate
22
+ from qiskit.circuit.parameterexpression import ParameterValueType
23
+ from qiskit._accelerate.circuit import StandardGate
24
+
25
+
26
+ class RYGate(Gate):
27
+ r"""Single-qubit rotation about the Y axis.
28
+
29
+ Can be applied to a :class:`~qiskit.circuit.QuantumCircuit`
30
+ with the :meth:`~qiskit.circuit.QuantumCircuit.ry` method.
31
+
32
+ **Circuit symbol:**
33
+
34
+ .. code-block:: text
35
+
36
+ ┌───────┐
37
+ q_0: ┤ Ry(ϴ) ├
38
+ └───────┘
39
+
40
+ **Matrix Representation:**
41
+
42
+ .. math::
43
+
44
+ \newcommand{\rotationangle}{\frac{\theta}{2}}
45
+
46
+ RY(\theta) = \exp\left(-i \rotationangle Y\right) =
47
+ \begin{pmatrix}
48
+ \cos\left(\rotationangle\right) & -\sin\left(\rotationangle\right) \\
49
+ \sin\left(\rotationangle\right) & \cos\left(\rotationangle\right)
50
+ \end{pmatrix}
51
+ """
52
+
53
+ _standard_gate = StandardGate.RY
54
+
55
+ def __init__(self, theta: ParameterValueType, label: Optional[str] = None):
56
+ """Create new RY gate."""
57
+ super().__init__("ry", 1, [theta], label=label)
58
+
59
+ def _define(self):
60
+ """Default definition"""
61
+ # pylint: disable=cyclic-import
62
+ from qiskit.circuit import QuantumCircuit
63
+
64
+ # ┌──────────┐
65
+ # q: ┤ R(θ,π/2) ├
66
+ # └──────────┘
67
+
68
+ self.definition = QuantumCircuit._from_circuit_data(
69
+ StandardGate.RY._get_definition(self.params), add_regs=True, name=self.name
70
+ )
71
+
72
+ def control(
73
+ self,
74
+ num_ctrl_qubits: int = 1,
75
+ label: str | None = None,
76
+ ctrl_state: str | int | None = None,
77
+ annotated: bool | None = None,
78
+ ):
79
+ """Return a (multi-)controlled-RY gate.
80
+
81
+ Args:
82
+ num_ctrl_qubits: number of control qubits.
83
+ label: An optional label for the gate [Default: ``None``]
84
+ ctrl_state: control state expressed as integer,
85
+ string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
86
+ annotated: indicates whether the controlled gate should be implemented
87
+ as an annotated gate. If ``None``, this is set to ``True`` if
88
+ the gate contains free parameters and more than one control qubit, in which
89
+ case it cannot yet be synthesized. Otherwise it is set to ``False``.
90
+
91
+ Returns:
92
+ ControlledGate: controlled version of this gate.
93
+ """
94
+ # deliberately capture annotated in [None, False] here
95
+ if not annotated and num_ctrl_qubits == 1:
96
+ gate = CRYGate(self.params[0], label=label, ctrl_state=ctrl_state)
97
+ gate.base_gate.label = self.label
98
+ else:
99
+ gate = super().control(
100
+ num_ctrl_qubits=num_ctrl_qubits,
101
+ label=label,
102
+ ctrl_state=ctrl_state,
103
+ annotated=annotated,
104
+ )
105
+ return gate
106
+
107
+ def inverse(self, annotated: bool = False):
108
+ r"""Return inverse RY gate.
109
+
110
+ :math:`RY(\lambda)^{\dagger} = RY(-\lambda)`
111
+
112
+ Args:
113
+ annotated: when set to ``True``, this is typically used to return an
114
+ :class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
115
+ :class:`.Gate`. However, for this class this argument is ignored as the inverse
116
+ of this gate is always a :class:`.RYGate` with an inverted parameter value.
117
+
118
+ Returns:
119
+ RYGate: inverse gate.
120
+ """
121
+ return RYGate(-self.params[0])
122
+
123
+ def __array__(self, dtype=None, copy=None):
124
+ """Return a numpy.array for the RY gate."""
125
+ if copy is False:
126
+ raise ValueError("unable to avoid copy while creating an array as requested")
127
+ cos = math.cos(self.params[0] / 2)
128
+ sin = math.sin(self.params[0] / 2)
129
+ return numpy.array([[cos, -sin], [sin, cos]], dtype=dtype)
130
+
131
+ def power(self, exponent: float, annotated: bool = False):
132
+ (theta,) = self.params
133
+ return RYGate(exponent * theta)
134
+
135
+ def __eq__(self, other):
136
+ if isinstance(other, RYGate):
137
+ return self._compare_parameters(other)
138
+ return False
139
+
140
+
141
+ class CRYGate(ControlledGate):
142
+ r"""Controlled-RY gate.
143
+
144
+ Can be applied to a :class:`~qiskit.circuit.QuantumCircuit`
145
+ with the :meth:`~qiskit.circuit.QuantumCircuit.cry` method.
146
+
147
+ **Circuit symbol:**
148
+
149
+ .. code-block:: text
150
+
151
+ q_0: ────■────
152
+ ┌───┴───┐
153
+ q_1: ┤ Ry(ϴ) ├
154
+ └───────┘
155
+
156
+ **Matrix representation:**
157
+
158
+ .. math::
159
+
160
+ \newcommand{\rotationangle}{\frac{\theta}{2}}
161
+
162
+ CRY(\theta)\ q_0, q_1 =
163
+ I \otimes |0\rangle\langle 0| + RY(\theta) \otimes |1\rangle\langle 1| =
164
+ \begin{pmatrix}
165
+ 1 & 0 & 0 & 0 \\
166
+ 0 & \cos\left(\rotationangle\right) & 0 & -\sin\left(\rotationangle\right) \\
167
+ 0 & 0 & 1 & 0 \\
168
+ 0 & \sin\left(\rotationangle\right) & 0 & \cos\left(\rotationangle\right)
169
+ \end{pmatrix}
170
+
171
+ .. note::
172
+
173
+ In Qiskit's convention, higher qubit indices are more significant
174
+ (little endian convention). In many textbooks, controlled gates are
175
+ presented with the assumption of more significant qubits as control,
176
+ which in our case would be q_1. Thus a textbook matrix for this
177
+ gate will be:
178
+
179
+ .. code-block:: text
180
+
181
+ ┌───────┐
182
+ q_0: ┤ Ry(ϴ) ├
183
+ └───┬───┘
184
+ q_1: ────■────
185
+
186
+ .. math::
187
+
188
+ \newcommand{\rotationangle}{\frac{\theta}{2}}
189
+
190
+ CRY(\theta)\ q_1, q_0 =
191
+ |0\rangle\langle 0| \otimes I + |1\rangle\langle 1| \otimes RY(\theta) =
192
+ \begin{pmatrix}
193
+ 1 & 0 & 0 & 0 \\
194
+ 0 & 1 & 0 & 0 \\
195
+ 0 & 0 & \cos\left(\rotationangle\right) & -\sin\left(\rotationangle\right) \\
196
+ 0 & 0 & \sin\left(\rotationangle\right) & \cos\left(\rotationangle\right)
197
+ \end{pmatrix}
198
+ """
199
+
200
+ _standard_gate = StandardGate.CRY
201
+
202
+ def __init__(
203
+ self,
204
+ theta: ParameterValueType,
205
+ label: Optional[str] = None,
206
+ ctrl_state: Optional[Union[str, int]] = None,
207
+ *,
208
+ _base_label=None,
209
+ ):
210
+ """Create new CRY gate."""
211
+ super().__init__(
212
+ "cry",
213
+ 2,
214
+ [theta],
215
+ num_ctrl_qubits=1,
216
+ label=label,
217
+ ctrl_state=ctrl_state,
218
+ base_gate=RYGate(theta, label=_base_label),
219
+ )
220
+
221
+ def _define(self):
222
+ """Default definition"""
223
+ # pylint: disable=cyclic-import
224
+ from qiskit.circuit import QuantumCircuit
225
+
226
+ # q_0: ─────────────■────────────────■──
227
+ # ┌─────────┐┌─┴─┐┌──────────┐┌─┴─┐
228
+ # q_1: ┤ Ry(θ/2) ├┤ X ├┤ Ry(-θ/2) ├┤ X ├
229
+ # └─────────┘└───┘└──────────┘└───┘
230
+
231
+ self.definition = QuantumCircuit._from_circuit_data(
232
+ StandardGate.CRY._get_definition(self.params), add_regs=True, name=self.name
233
+ )
234
+
235
+ def inverse(self, annotated: bool = False):
236
+ """Return inverse CRY gate (i.e. with the negative rotation angle)
237
+
238
+ Args:
239
+ annotated: when set to ``True``, this is typically used to return an
240
+ :class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
241
+ :class:`.Gate`. However, for this class this argument is ignored as the inverse
242
+ of this gate is always a :class:`.CRYGate` with an inverted parameter value.
243
+
244
+ Returns:
245
+ CRYGate: inverse gate.
246
+ ."""
247
+ return CRYGate(-self.params[0], ctrl_state=self.ctrl_state)
248
+
249
+ def __array__(self, dtype=None, copy=None):
250
+ """Return a numpy.array for the CRY gate."""
251
+ if copy is False:
252
+ raise ValueError("unable to avoid copy while creating an array as requested")
253
+ half_theta = float(self.params[0]) / 2
254
+ cos = math.cos(half_theta)
255
+ sin = math.sin(half_theta)
256
+ if self.ctrl_state:
257
+ return numpy.array(
258
+ [[1, 0, 0, 0], [0, cos, 0, -sin], [0, 0, 1, 0], [0, sin, 0, cos]], dtype=dtype
259
+ )
260
+ else:
261
+ return numpy.array(
262
+ [[cos, 0, -sin, 0], [0, 1, 0, 0], [sin, 0, cos, 0], [0, 0, 0, 1]], dtype=dtype
263
+ )
264
+
265
+ def __eq__(self, other):
266
+ if isinstance(other, CRYGate):
267
+ return self._compare_parameters(other) and self.ctrl_state == other.ctrl_state
268
+ return False