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,984 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2017, 2020.
4
+ #
5
+ # This code is licensed under the Apache License, Version 2.0. You may
6
+ # obtain a copy of this license in the LICENSE.txt file in the root directory
7
+ # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
+ #
9
+ # Any modifications or derivative works of this code must retain this
10
+ # copyright notice, and modified files need to carry a notice indicating
11
+ # that they have been altered from the originals.
12
+
13
+
14
+ r"""
15
+ ===============================================
16
+ Circuit Library (:mod:`qiskit.circuit.library`)
17
+ ===============================================
18
+
19
+ .. currentmodule:: qiskit.circuit.library
20
+
21
+ The circuit library is a collection of valuable circuits and building blocks. We call these valuable
22
+ for different reasons. For instance, they can be used as building blocks for algorithms, serve as
23
+ benchmarks, or they are circuits conjectured to be difficult to simulate classically.
24
+
25
+ Elements in the circuit library are either :class:`.QuantumCircuit`\ s or
26
+ :class:`~.circuit.Instruction`\ s, allowing them to be easily investigated or plugged into other
27
+ circuits. This enables fast prototyping and circuit design at higher levels of abstraction.
28
+
29
+ For example:
30
+
31
+ .. plot::
32
+ :alt: A circuit implementing a Suzuki-Trotter expansion of a Hamiltonian evolution.
33
+ :include-source:
34
+
35
+ from qiskit.circuit import QuantumCircuit
36
+ from qiskit.circuit.library import PauliEvolutionGate
37
+ from qiskit.quantum_info import SparsePauliOp
38
+
39
+ hamiltonian = SparsePauliOp(["ZZI", "IZZ", "IXI"], coeffs=[1, 1, -1])
40
+ gate = PauliEvolutionGate(hamiltonian)
41
+
42
+ circuit = QuantumCircuit(hamiltonian.num_qubits)
43
+ circuit.append(gate, circuit.qubits)
44
+
45
+ circuit.draw("mpl")
46
+
47
+ This library is organized in different sections:
48
+
49
+ * :ref:`Standard gates <standard-gates>`
50
+ * :ref:`Standard directives <standard-directives>`
51
+ * :ref:`Standard operations <standard-operations>`
52
+ * :ref:`Generalized gates <generalized-gates>`
53
+ * :ref:`Arithmetic operations <arithmetic>`
54
+ * :ref:`Basis changes <basis-change>`
55
+ * :ref:`Boolean logic <boolean-logic>`
56
+ * :ref:`Data encoding <data-encoding>`
57
+ * :ref:`Data preparation <data-preparation>`
58
+ * :ref:`Particular operations <particular>`
59
+ * :ref:`N-local circuits <n-local>`
60
+ * :ref:`Oracles <oracles>`
61
+ * :ref:`Template circuits <template>`
62
+
63
+ We distinguish into different categories of operations:
64
+
65
+ Standard gates
66
+ These are fundamental quantum gates, a subset of which typically forms a basis gate
67
+ set on a quantum computer. These are unitary operations represented as :class:`.Gate`.
68
+ The library also provides standard compiler directives (a :class:`.Barrier`) and non-unitary
69
+ operations (like :class:`.Measure`).
70
+
71
+ Abstract operations
72
+ This category includes operations that are defined by a mathematical action, but can be implemented
73
+ with different decompositions. For example, a multi-controlled :class:`.XGate` flips the target
74
+ qubit if all control qubits are :math:`|1\rangle`, and there are a variety of concrete circuits
75
+ implementing this operation using lower-level gates. Such abstract operations are represented as
76
+ :class:`.Gate` or :class:`~.circuit.Instruction`. This allows building the circuit without choosing
77
+ a concrete implementation of each block and, finally, let the compiler (or you as user) choose the
78
+ optimal decomposition. For example:
79
+
80
+ .. plot::
81
+ :alt: A circuit with a multi-controlled X gate.
82
+ :include-source:
83
+
84
+ from qiskit.circuit.library import MCXGate
85
+ mcx = MCXGate(4)
86
+
87
+ from qiskit import QuantumCircuit
88
+ circuit = QuantumCircuit(5)
89
+ circuit.append(mcx, [0, 1, 4, 2, 3])
90
+ circuit.draw("mpl")
91
+
92
+ For circuits with abstract operations, the circuit context is taken into account during
93
+ transpilation. For example, if idle qubits are available, they can be used to obtain a shallower
94
+ circuit::
95
+
96
+ from qiskit import transpile
97
+
98
+ small_circuit = QuantumCircuit(5) # here we have no idle qubits
99
+ small_circuit.append(mcx, [0, 1, 4, 2, 3])
100
+ small_tqc = transpile(small_circuit, basis_gates=["u", "cx"])
101
+ print("No aux:", small_tqc.count_ops())
102
+
103
+ large_circuit = QuantumCircuit(10) # now we will have 5 idle qubits
104
+ large_circuit.append(mcx, [0, 1, 4, 2, 3])
105
+ large_tqc = transpile(large_circuit, basis_gates=["u", "cx"])
106
+ print("With aux:", large_tqc.count_ops())
107
+
108
+ Which prints:
109
+
110
+ .. parsed-literal::
111
+
112
+ No aux: OrderedDict([('u', 41), ('cx', 36)])
113
+ With aux: OrderedDict([('u', 24), ('cx', 18)])
114
+
115
+ Structural operations
116
+ These operations have a unique decomposition. As the compiler does not need to reason about
117
+ them on a higher level, they are implemented as functions that return a :class:`.QuantumCircuit`
118
+ object. For example:
119
+
120
+ .. plot::
121
+ :alt: The real amplitudes ansatz circuit.
122
+ :include-source:
123
+
124
+ from qiskit.circuit.library import real_amplitudes
125
+
126
+ ansatz = real_amplitudes(5, entanglement="pairwise")
127
+ ansatz.draw("mpl")
128
+
129
+
130
+ .. _standard-gates:
131
+
132
+ Standard gates
133
+ ==============
134
+
135
+ These operations are reversible unitary gates and they all subclass
136
+ :class:`~qiskit.circuit.Gate`. As a consequence, they all have the methods
137
+ :meth:`~qiskit.circuit.Gate.to_matrix`, :meth:`~qiskit.circuit.Gate.power`,
138
+ and :meth:`~qiskit.circuit.Gate.control`, which we can generally only apply to unitary operations.
139
+
140
+ For example:
141
+
142
+ .. plot::
143
+ :alt: The X gate and the matrix, power, and control methods.
144
+ :include-source:
145
+ :nofigs:
146
+
147
+ from qiskit.circuit.library import XGate
148
+ gate = XGate()
149
+ print(gate.to_matrix()) # X gate
150
+ print(gate.power(1/2).to_matrix()) # √X gate -- see also the SXGate
151
+ print(gate.control(1).to_matrix()) # CX (controlled X) gate
152
+
153
+ .. code-block:: text
154
+
155
+ [[0.+0.j 1.+0.j]
156
+ [1.+0.j 0.+0.j]]
157
+ [[0.5+0.5j 0.5-0.5j]
158
+ [0.5-0.5j 0.5+0.5j]]
159
+ [[1.+0.j 0.+0.j 0.+0.j 0.+0.j]
160
+ [0.+0.j 0.+0.j 0.+0.j 1.+0.j]
161
+ [0.+0.j 0.+0.j 1.+0.j 0.+0.j]
162
+ [0.+0.j 1.+0.j 0.+0.j 0.+0.j]]
163
+
164
+
165
+ The function :func:`.get_standard_gate_name_mapping` allows you to see the available standard gates
166
+ and operations.
167
+
168
+ .. autofunction:: get_standard_gate_name_mapping
169
+
170
+ 1-qubit standard gates
171
+ ----------------------
172
+
173
+ .. autosummary::
174
+ :toctree: ../stubs/
175
+
176
+ HGate
177
+ IGate
178
+ PhaseGate
179
+ RGate
180
+ RXGate
181
+ RYGate
182
+ RZGate
183
+ SGate
184
+ SdgGate
185
+ SXGate
186
+ SXdgGate
187
+ TGate
188
+ TdgGate
189
+ UGate
190
+ U1Gate
191
+ U2Gate
192
+ U3Gate
193
+ XGate
194
+ YGate
195
+ ZGate
196
+
197
+ 2-qubit standard gates
198
+ ----------------------
199
+
200
+ .. autosummary::
201
+ :toctree: ../stubs/
202
+
203
+ CHGate
204
+ CPhaseGate
205
+ CRXGate
206
+ CRYGate
207
+ CRZGate
208
+ CSGate
209
+ CSdgGate
210
+ CSXGate
211
+ CUGate
212
+ CU1Gate
213
+ CU3Gate
214
+ CXGate
215
+ CYGate
216
+ CZGate
217
+ DCXGate
218
+ ECRGate
219
+ iSwapGate
220
+ RXXGate
221
+ RYYGate
222
+ RZXGate
223
+ RZZGate
224
+ SwapGate
225
+ XXMinusYYGate
226
+ XXPlusYYGate
227
+
228
+ 3+ qubit standard gates
229
+ -----------------------
230
+
231
+ .. autosummary::
232
+ :toctree: ../stubs/
233
+
234
+ C3SXGate
235
+ C3XGate
236
+ C4XGate
237
+ CCXGate
238
+ CCZGate
239
+ CSwapGate
240
+ RCCXGate
241
+ RC3XGate
242
+
243
+ Global standard gates
244
+ ---------------------
245
+
246
+ The following gate is global and does not take any qubit arguments.
247
+
248
+ .. autosummary::
249
+ :toctree: ../stubs/
250
+
251
+ GlobalPhaseGate
252
+
253
+
254
+ .. _standard-directives:
255
+
256
+ Standard Directives
257
+ ===================
258
+
259
+ Directives are operations to the quantum stack that are meant to be interpreted by the backend or
260
+ the transpiler. In general, the transpiler or backend might optionally ignore them if there is no
261
+ implementation for them.
262
+
263
+ * :class:`~qiskit.circuit.Barrier`
264
+
265
+
266
+ .. _standard-operations:
267
+
268
+ Standard Operations
269
+ ===================
270
+
271
+ Operations are non-reversible changes in the quantum state of the circuit.
272
+
273
+ * :class:`~qiskit.circuit.Measure`
274
+ * :class:`~qiskit.circuit.Reset`
275
+
276
+
277
+ .. _generalized-gates:
278
+
279
+ Generalized Gates
280
+ =================
281
+
282
+ This module extends the standard gates with a broader collection of basic gates. This includes
283
+ gates that are variadic, meaning that the number of qubits depends on the input.
284
+ For example::
285
+
286
+ from qiskit.circuit.library import DiagonalGate
287
+
288
+ diagonal = DiagonalGate([1, 1j])
289
+ print(diagonal.num_qubits)
290
+
291
+ diagonal = DiagonalGate([1, 1, 1, -1])
292
+ print(diagonal.num_qubits)
293
+
294
+ which prints:
295
+
296
+ .. code-block:: text
297
+
298
+ 1
299
+ 2
300
+
301
+ .. autosummary::
302
+ :toctree: ../stubs/
303
+
304
+ DiagonalGate
305
+ PermutationGate
306
+ MCMTGate
307
+ MCPhaseGate
308
+ MCXGate
309
+ MSGate
310
+ RVGate
311
+ PauliGate
312
+ LinearFunction
313
+ Isometry
314
+ UnitaryGate
315
+ UCGate
316
+ UCPauliRotGate
317
+ UCRXGate
318
+ UCRYGate
319
+ UCRZGate
320
+
321
+ The above objects derive :class:`.Gate` or :class:`~.circuit.Instruction`, which allows the
322
+ compiler to reason about them on an abstract level. We therefore suggest using these instead
323
+ of the following, which derive :class:`.QuantumCircuit` and are eagerly constructed.
324
+
325
+ .. autosummary::
326
+ :toctree: ../stubs/
327
+ :template: autosummary/class_no_inherited_members.rst
328
+
329
+ Diagonal
330
+ MCMT
331
+ MCMTVChain
332
+ MCXGrayCode
333
+ MCXRecursive
334
+ MCXVChain
335
+ Permutation
336
+ GMS
337
+ GR
338
+ GRX
339
+ GRY
340
+ GRZ
341
+
342
+ .. _boolean-logic:
343
+
344
+ Boolean Logic
345
+ =============
346
+
347
+ These :class:`.Gate`\ s implement boolean logic operations, such as the logical
348
+ ``or`` of a set of qubit states.
349
+
350
+ .. autosummary::
351
+ :toctree: ../stubs/
352
+
353
+ AndGate
354
+ OrGate
355
+ BitwiseXorGate
356
+ InnerProductGate
357
+
358
+ The above objects derive :class:`.Gate` (or return this type), which allows the
359
+ compiler to reason about them on an abstract level. We therefore suggest using these instead
360
+ of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
361
+
362
+ .. autosummary::
363
+ :toctree: ../stubs/
364
+ :template: autosummary/class_no_inherited_members.rst
365
+
366
+ AND
367
+ OR
368
+ XOR
369
+ InnerProduct
370
+
371
+
372
+ A random bitwise ``xor`` circuit can be directly generated using:
373
+
374
+ .. autosummary::
375
+ :toctree: ../stubs/
376
+
377
+ random_bitwise_xor
378
+
379
+ .. _basis-change:
380
+
381
+ Basis Change
382
+ ============
383
+
384
+ These gates perform basis transformations of the qubit states. For example,
385
+ in the case of the Quantum Fourier Transform (QFT), it transforms between
386
+ the computational basis and the Fourier basis.
387
+
388
+ .. autosummary::
389
+ :toctree: ../stubs/
390
+
391
+ QFTGate
392
+
393
+ The above object derives :class:`.Gate`, which allows the
394
+ compiler to reason about it on an abstract level. We therefore suggest using this instead
395
+ of the following which derives :class:`.QuantumCircuit` and is eagerly constructed.
396
+
397
+ .. autosummary::
398
+ :toctree: ../stubs/
399
+ :template: autosummary/class_no_inherited_members.rst
400
+
401
+ QFT
402
+
403
+ .. _arithmetic:
404
+
405
+ Arithmetic
406
+ ==========
407
+
408
+ These gates and circuits perform classical arithmetic, such as addition or multiplication.
409
+
410
+ Adders
411
+ ------
412
+
413
+ Adders compute the sum of two :math:`n`-qubit registers, that is
414
+
415
+ .. math::
416
+
417
+ |a\rangle_n |b\rangle_n \mapsto |a\rangle_n |a + b\rangle_{t},
418
+
419
+ where the size :math:`t` of the output register depends on the type of adder used.
420
+
421
+ .. autosummary::
422
+ :toctree: ../stubs/
423
+
424
+ ModularAdderGate
425
+ HalfAdderGate
426
+ FullAdderGate
427
+
428
+ The above objects derive :class:`.Gate`, which allows the
429
+ compiler to reason about them on an abstract level. We therefore suggest using these instead
430
+ of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
431
+
432
+ .. autosummary::
433
+ :toctree: ../stubs/
434
+ :template: autosummary/class_no_inherited_members.rst
435
+
436
+ DraperQFTAdder
437
+ CDKMRippleCarryAdder
438
+ VBERippleCarryAdder
439
+
440
+ Multipliers
441
+ -----------
442
+
443
+ Multipliers compute the product of two :math:`n`-qubit registers, that is
444
+
445
+ .. math::
446
+
447
+ |a\rangle_n |b\rangle_n |0\rangle_{t} \mapsto |a\rangle_n |b\rangle_n |a \cdot b\rangle_t,
448
+
449
+ where :math:`t` is the number of bits used to represent the result.
450
+
451
+ .. autosummary::
452
+ :toctree: ../stubs/
453
+
454
+ MultiplierGate
455
+
456
+ The above object derives :class:`.Gate`, which allows the
457
+ compiler to reason about it on an abstract level. We therefore suggest using this instead
458
+ of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
459
+
460
+ .. autosummary::
461
+ :toctree: ../stubs/
462
+ :template: autosummary/class_no_inherited_members.rst
463
+
464
+ HRSCumulativeMultiplier
465
+ RGQFTMultiplier
466
+
467
+ Amplitude Functions
468
+ -------------------
469
+
470
+ An amplitude function approximates a function :math:`f: \{0, ..., 2^n - 1\} \rightarrow [0, 1]`
471
+ applied on the amplitudes of :math:`n` qubits. See the class docstring for more detailed information.
472
+
473
+ .. autosummary::
474
+ :toctree: ../stubs/
475
+
476
+ LinearAmplitudeFunctionGate
477
+
478
+ The above object derives :class:`.Gate`, which allows the
479
+ compiler to reason about it on an abstract level. We therefore suggest using this instead
480
+ of the following which derives :class:`.QuantumCircuit` and is eagerly constructed.
481
+
482
+ .. autosummary::
483
+ :toctree: ../stubs/
484
+ :template: autosummary/class_no_inherited_members.rst
485
+
486
+ LinearAmplitudeFunction
487
+
488
+ Functional Pauli Rotations
489
+ --------------------------
490
+
491
+ Functional Pauli rotations implement operations of the form
492
+
493
+ .. math::
494
+
495
+ |x\rangle |0\rangle \mapsto \cos(f(x))|x\rangle|0\rangle + \sin(f(x))|x\rangle|1\rangle
496
+
497
+ using Pauli-:math:`Y` rotations for different types of functions :math:`f`, such as linear,
498
+ polynomial, or a piecewise version of these. They are similar to the amplitude functions above, but
499
+ without pre- and post-processing for the domain and image of the target function.
500
+
501
+ .. autosummary::
502
+ :toctree: ../stubs/
503
+
504
+ LinearPauliRotationsGate
505
+ PolynomialPauliRotationsGate
506
+ PiecewiseLinearPauliRotationsGate
507
+ PiecewisePolynomialPauliRotationsGate
508
+ PiecewiseChebyshevGate
509
+
510
+ The above objects derive :class:`.Gate`, which allows the
511
+ compiler to reason about them on an abstract level. We therefore suggest using these instead
512
+ of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
513
+
514
+ .. autosummary::
515
+ :toctree: ../stubs/
516
+ :template: autosummary/class_no_inherited_members.rst
517
+
518
+ FunctionalPauliRotations
519
+ LinearPauliRotations
520
+ PolynomialPauliRotations
521
+ PiecewiseLinearPauliRotations
522
+ PiecewisePolynomialPauliRotations
523
+ PiecewiseChebyshev
524
+
525
+
526
+ Other arithmetic functions
527
+ --------------------------
528
+
529
+ Here we list additional arithmetic circuits. See the individual class docstrings for more details.
530
+
531
+ .. autosummary::
532
+ :toctree: ../stubs/
533
+
534
+ ExactReciprocalGate
535
+ IntegerComparatorGate
536
+ QuadraticFormGate
537
+ WeightedSumGate
538
+
539
+ The above objects derive :class:`.Gate`, which allows the
540
+ compiler to reason about them on an abstract level. We therefore suggest using these instead
541
+ of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
542
+
543
+ .. autosummary::
544
+ :toctree: ../stubs/
545
+ :template: autosummary/class_no_inherited_members.rst
546
+
547
+ ExactReciprocal
548
+ IntegerComparator
549
+ QuadraticForm
550
+ WeightedAdder
551
+
552
+ .. _particular:
553
+
554
+ Particular Quantum Circuits
555
+ ===========================
556
+
557
+ The following gates and quantum circuits define specific operations of interest:
558
+
559
+ .. autosummary::
560
+ :toctree: ../stubs/
561
+
562
+ fourier_checking
563
+ hidden_linear_function
564
+ iqp
565
+ random_iqp
566
+ quantum_volume
567
+ phase_estimation
568
+ grover_operator
569
+ unitary_overlap
570
+ GraphStateGate
571
+ PauliEvolutionGate
572
+ HamiltonianGate
573
+
574
+ Below we provide the same operations as classes deriving :class:`.QuantumCircuit`. For better
575
+ runtime and compiler performance, however, we suggest using above functions and gates.
576
+
577
+ .. autosummary::
578
+ :toctree: ../stubs/
579
+ :template: autosummary/class_no_inherited_members.rst
580
+
581
+ FourierChecking
582
+ GraphState
583
+ HiddenLinearFunction
584
+ IQP
585
+ QuantumVolume
586
+ PhaseEstimation
587
+ GroverOperator
588
+ UnitaryOverlap
589
+
590
+ .. _n-local:
591
+
592
+ N-local circuits
593
+ ================
594
+
595
+ The following functions return a parameterized :class:`.QuantumCircuit` to use as ansatz in
596
+ a broad set of variational quantum algorithms.
597
+
598
+ For example, we can build a variational circuit
599
+
600
+ .. plot::
601
+ :alt: The efficient SU2 ansatz circuit...
602
+ :context:
603
+
604
+ from qiskit.circuit.library import efficient_su2
605
+
606
+ num_qubits = 4
607
+ ansatz = efficient_su2(num_qubits, entanglement="pairwise")
608
+ ansatz.draw("mpl")
609
+
610
+ and combine it with
611
+
612
+ .. plot::
613
+ :alt: ... combined with the ZZ feature map.
614
+ :include-source:
615
+ :context:
616
+
617
+ from qiskit.circuit.library import zz_feature_map
618
+
619
+ circuit = zz_feature_map(num_qubits)
620
+ circuit.barrier()
621
+ circuit.compose(ansatz, inplace=True)
622
+
623
+ circuit.draw("mpl")
624
+
625
+ to obtain a circuit for variational quantum classification.
626
+
627
+ The following functions all construct variational circuits and are optimized for a fast
628
+ construction:
629
+
630
+ .. autosummary::
631
+ :toctree: ../stubs/
632
+
633
+ n_local
634
+ efficient_su2
635
+ real_amplitudes
636
+ pauli_two_design
637
+ excitation_preserving
638
+ qaoa_ansatz
639
+ hamiltonian_variational_ansatz
640
+ evolved_operator_ansatz
641
+
642
+ While we suggest using the above functions, we also continue supporting the following
643
+ :class:`.BlueprintCircuit`, which wrap the circuits into a block
644
+ and allow for inplace mutations of the circuits:
645
+
646
+ .. autosummary::
647
+ :toctree: ../stubs/
648
+ :template: autosummary/class_no_inherited_members.rst
649
+
650
+ NLocal
651
+ TwoLocal
652
+ PauliTwoDesign
653
+ RealAmplitudes
654
+ EfficientSU2
655
+ EvolvedOperatorAnsatz
656
+ ExcitationPreserving
657
+ QAOAAnsatz
658
+
659
+
660
+ .. _data-encoding:
661
+
662
+ Data encoding circuits
663
+ ======================
664
+
665
+ The following functions return a parameterized :class:`.QuantumCircuit` to use as data
666
+ encoding circuits in a series of variational quantum algorithms:
667
+
668
+ .. autosummary::
669
+ :toctree: ../stubs/
670
+
671
+ pauli_feature_map
672
+ z_feature_map
673
+ zz_feature_map
674
+
675
+ While we suggest using the above functions, we also continue supporting the following
676
+ :class:`.BlueprintCircuit`, which wrap the circuits into a block
677
+ and allow for inplace mutations of the circuits:
678
+
679
+ .. autosummary::
680
+ :toctree: ../stubs/
681
+ :template: autosummary/class_no_inherited_members.rst
682
+
683
+ PauliFeatureMap
684
+ ZFeatureMap
685
+ ZZFeatureMap
686
+
687
+
688
+ .. _data-preparation:
689
+
690
+ Data preparation circuits
691
+ =========================
692
+
693
+ The following operations are used for state preparation:
694
+
695
+ .. autosummary::
696
+ :toctree: ../stubs/
697
+
698
+ StatePreparation
699
+ Initialize
700
+
701
+ .. _oracles:
702
+
703
+ Oracles
704
+ =======
705
+
706
+ An "oracle" can refer to a variety of black-box operations on quantum states. Here, we consider
707
+ oracles implementing boolean functions :math:`f: \{0, ..., 2^n - 1\} \rightarrow \{0, 1\}` via
708
+ phase-flips
709
+
710
+ .. math::
711
+
712
+ |x\rangle_n \mapsto (-1)^{f(x)} |x\rangle_n,
713
+
714
+ or bit-flips
715
+
716
+ .. math::
717
+
718
+ |x\rangle_n |b\rangle \mapsto |x\rangle_n |b \oplus f(x)\rangle.
719
+
720
+ These are implemented in
721
+
722
+ .. autosummary::
723
+ :toctree: ../stubs/
724
+
725
+ PhaseOracleGate
726
+ BitFlipOracleGate
727
+
728
+ and an important building block for Grover's algorithm (see :func:`.grover_operator`).
729
+
730
+ In addition to the :class:`.Gate`-based implementation we also support the
731
+ :class:`.QuantumCircuit`-version of the phase flip oracle
732
+
733
+ .. autosummary::
734
+ :toctree: ../stubs/
735
+ :template: autosummary/class_no_inherited_members.rst
736
+
737
+ PhaseOracle
738
+
739
+
740
+ .. _template:
741
+
742
+ Template circuits
743
+ =================
744
+
745
+ Templates are functions that return circuits that compute the identity. They are used at
746
+ circuit optimization where matching part of the template allows the compiler
747
+ to replace the match with the inverse of the remainder from the template.
748
+
749
+ In this example, the identity constant in a template is checked:
750
+
751
+ .. plot::
752
+ :alt: A Toffoli template circuit.
753
+ :include-source:
754
+ :nofigs:
755
+
756
+ from qiskit.circuit.library.templates import template_nct_4b_1
757
+ from qiskit.quantum_info import Operator
758
+ import numpy as np
759
+
760
+ template = template_nct_4b_1()
761
+
762
+ identity = np.identity(2 ** len(template.qubits), dtype=complex)
763
+ data = Operator(template).data
764
+ np.allclose(data, identity) # True, template_nct_4b_1 is the identity
765
+
766
+ NCT (Not-CNOT-Toffoli) template circuits
767
+ ----------------------------------------
768
+
769
+ Template circuits for :class:`~qiskit.circuit.library.XGate`,
770
+ :class:`~qiskit.circuit.library.CXGate`,
771
+ and :class:`~qiskit.circuit.library.CCXGate` (Toffoli) gates.
772
+
773
+ **Reference:**
774
+ Maslov, D. and Dueck, G. W. and Miller, D. M.,
775
+ Techniques for the synthesis of reversible Toffoli networks, 2007
776
+ http://dx.doi.org/10.1145/1278349.1278355
777
+
778
+ .. currentmodule:: qiskit.circuit.library.templates.nct
779
+ .. autofunction:: template_nct_2a_1
780
+ .. autofunction:: template_nct_2a_2
781
+ .. autofunction:: template_nct_2a_3
782
+ .. autofunction:: template_nct_4a_1
783
+ .. autofunction:: template_nct_4a_2
784
+ .. autofunction:: template_nct_4a_3
785
+ .. autofunction:: template_nct_4b_1
786
+ .. autofunction:: template_nct_4b_2
787
+ .. autofunction:: template_nct_5a_1
788
+ .. autofunction:: template_nct_5a_2
789
+ .. autofunction:: template_nct_5a_3
790
+ .. autofunction:: template_nct_5a_4
791
+ .. autofunction:: template_nct_6a_1
792
+ .. autofunction:: template_nct_6a_2
793
+ .. autofunction:: template_nct_6a_3
794
+ .. autofunction:: template_nct_6a_4
795
+ .. autofunction:: template_nct_6b_1
796
+ .. autofunction:: template_nct_6b_2
797
+ .. autofunction:: template_nct_6c_1
798
+ .. autofunction:: template_nct_7a_1
799
+ .. autofunction:: template_nct_7b_1
800
+ .. autofunction:: template_nct_7c_1
801
+ .. autofunction:: template_nct_7d_1
802
+ .. autofunction:: template_nct_7e_1
803
+ .. autofunction:: template_nct_9a_1
804
+ .. autofunction:: template_nct_9c_1
805
+ .. autofunction:: template_nct_9c_2
806
+ .. autofunction:: template_nct_9c_3
807
+ .. autofunction:: template_nct_9c_4
808
+ .. autofunction:: template_nct_9c_5
809
+ .. autofunction:: template_nct_9c_6
810
+ .. autofunction:: template_nct_9c_7
811
+ .. autofunction:: template_nct_9c_8
812
+ .. autofunction:: template_nct_9c_9
813
+ .. autofunction:: template_nct_9c_10
814
+ .. autofunction:: template_nct_9c_11
815
+ .. autofunction:: template_nct_9c_12
816
+ .. autofunction:: template_nct_9d_1
817
+ .. autofunction:: template_nct_9d_2
818
+ .. autofunction:: template_nct_9d_3
819
+ .. autofunction:: template_nct_9d_4
820
+ .. autofunction:: template_nct_9d_5
821
+ .. autofunction:: template_nct_9d_6
822
+ .. autofunction:: template_nct_9d_7
823
+ .. autofunction:: template_nct_9d_8
824
+ .. autofunction:: template_nct_9d_9
825
+ .. autofunction:: template_nct_9d_10
826
+ .. currentmodule:: qiskit.circuit.library
827
+
828
+ Clifford template circuits
829
+ --------------------------
830
+
831
+ Template circuits over Clifford gates.
832
+
833
+ .. autofunction:: clifford_2_1
834
+ .. autofunction:: clifford_2_2
835
+ .. autofunction:: clifford_2_3
836
+ .. autofunction:: clifford_2_4
837
+ .. autofunction:: clifford_3_1
838
+ .. autofunction:: clifford_4_1
839
+ .. autofunction:: clifford_4_2
840
+ .. autofunction:: clifford_4_3
841
+ .. autofunction:: clifford_4_4
842
+ .. autofunction:: clifford_5_1
843
+ .. autofunction:: clifford_6_1
844
+ .. autofunction:: clifford_6_2
845
+ .. autofunction:: clifford_6_3
846
+ .. autofunction:: clifford_6_4
847
+ .. autofunction:: clifford_6_5
848
+ .. autofunction:: clifford_8_1
849
+ .. autofunction:: clifford_8_2
850
+ .. autofunction:: clifford_8_3
851
+
852
+ RZXGate template circuits
853
+ -------------------------
854
+
855
+ Template circuits with :class:`~qiskit.circuit.library.RZXGate`.
856
+
857
+ .. autofunction:: rzx_yz
858
+ .. autofunction:: rzx_xz
859
+ .. autofunction:: rzx_cy
860
+ .. autofunction:: rzx_zz1
861
+ .. autofunction:: rzx_zz2
862
+ .. autofunction:: rzx_zz3
863
+
864
+ """
865
+
866
+ from .standard_gates import *
867
+ from .templates import *
868
+ from ..barrier import Barrier
869
+ from ..measure import Measure
870
+ from ..reset import Reset
871
+
872
+
873
+ from .blueprintcircuit import BlueprintCircuit
874
+ from .generalized_gates import (
875
+ Diagonal,
876
+ DiagonalGate,
877
+ MCMT,
878
+ MCMTVChain,
879
+ Permutation,
880
+ PermutationGate,
881
+ GMS,
882
+ MCMTGate,
883
+ MSGate,
884
+ GR,
885
+ GRX,
886
+ GRY,
887
+ GRZ,
888
+ RVGate,
889
+ PauliGate,
890
+ LinearFunction,
891
+ Isometry,
892
+ UnitaryGate,
893
+ UCGate,
894
+ UCPauliRotGate,
895
+ UCRXGate,
896
+ UCRYGate,
897
+ UCRZGate,
898
+ )
899
+ from .pauli_evolution import PauliEvolutionGate
900
+ from .hamiltonian_gate import HamiltonianGate
901
+ from .boolean_logic import (
902
+ AND,
903
+ AndGate,
904
+ OR,
905
+ OrGate,
906
+ XOR,
907
+ BitwiseXorGate,
908
+ random_bitwise_xor,
909
+ InnerProduct,
910
+ InnerProductGate,
911
+ )
912
+ from .basis_change import QFT, QFTGate
913
+ from .arithmetic import (
914
+ ModularAdderGate,
915
+ HalfAdderGate,
916
+ FullAdderGate,
917
+ MultiplierGate,
918
+ FunctionalPauliRotations,
919
+ LinearPauliRotations,
920
+ LinearPauliRotationsGate,
921
+ PiecewiseLinearPauliRotations,
922
+ PiecewiseLinearPauliRotationsGate,
923
+ PiecewisePolynomialPauliRotations,
924
+ PiecewisePolynomialPauliRotationsGate,
925
+ PolynomialPauliRotations,
926
+ PolynomialPauliRotationsGate,
927
+ IntegerComparator,
928
+ IntegerComparatorGate,
929
+ WeightedAdder,
930
+ WeightedSumGate,
931
+ QuadraticForm,
932
+ QuadraticFormGate,
933
+ LinearAmplitudeFunction,
934
+ LinearAmplitudeFunctionGate,
935
+ VBERippleCarryAdder,
936
+ CDKMRippleCarryAdder,
937
+ DraperQFTAdder,
938
+ PiecewiseChebyshev,
939
+ PiecewiseChebyshevGate,
940
+ HRSCumulativeMultiplier,
941
+ RGQFTMultiplier,
942
+ ExactReciprocal,
943
+ ExactReciprocalGate,
944
+ )
945
+
946
+ from .n_local import (
947
+ n_local,
948
+ NLocal,
949
+ TwoLocal,
950
+ pauli_two_design,
951
+ PauliTwoDesign,
952
+ real_amplitudes,
953
+ RealAmplitudes,
954
+ efficient_su2,
955
+ EfficientSU2,
956
+ hamiltonian_variational_ansatz,
957
+ evolved_operator_ansatz,
958
+ EvolvedOperatorAnsatz,
959
+ excitation_preserving,
960
+ ExcitationPreserving,
961
+ qaoa_ansatz,
962
+ QAOAAnsatz,
963
+ )
964
+ from .data_preparation import (
965
+ z_feature_map,
966
+ zz_feature_map,
967
+ pauli_feature_map,
968
+ PauliFeatureMap,
969
+ ZFeatureMap,
970
+ ZZFeatureMap,
971
+ StatePreparation,
972
+ Initialize,
973
+ )
974
+ from .quantum_volume import QuantumVolume, quantum_volume
975
+ from .fourier_checking import FourierChecking, fourier_checking
976
+ from .graph_state import GraphState, GraphStateGate
977
+ from .hidden_linear_function import HiddenLinearFunction, hidden_linear_function
978
+ from .iqp import IQP, iqp, random_iqp
979
+ from .phase_estimation import PhaseEstimation, phase_estimation
980
+ from .grover_operator import GroverOperator, grover_operator
981
+ from .phase_oracle import PhaseOracle, PhaseOracleGate
982
+ from .bit_flip_oracle import BitFlipOracleGate
983
+ from .overlap import UnitaryOverlap, unitary_overlap
984
+ from .standard_gates import get_standard_gate_name_mapping