qiskit 2.0.3__cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (690) hide show
  1. qiskit/VERSION.txt +1 -0
  2. qiskit/__init__.py +141 -0
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/_numpy_compat.py +73 -0
  5. qiskit/circuit/__init__.py +1343 -0
  6. qiskit/circuit/_add_control.py +312 -0
  7. qiskit/circuit/_classical_resource_map.py +150 -0
  8. qiskit/circuit/_standard_gates_commutations.py +3849 -0
  9. qiskit/circuit/_utils.py +167 -0
  10. qiskit/circuit/annotated_operation.py +279 -0
  11. qiskit/circuit/barrier.py +46 -0
  12. qiskit/circuit/classical/__init__.py +41 -0
  13. qiskit/circuit/classical/expr/__init__.py +266 -0
  14. qiskit/circuit/classical/expr/constructors.py +764 -0
  15. qiskit/circuit/classical/expr/expr.py +498 -0
  16. qiskit/circuit/classical/expr/visitors.py +375 -0
  17. qiskit/circuit/classical/types/__init__.py +113 -0
  18. qiskit/circuit/classical/types/ordering.py +229 -0
  19. qiskit/circuit/classical/types/types.py +153 -0
  20. qiskit/circuit/commutation_checker.py +133 -0
  21. qiskit/circuit/commutation_library.py +20 -0
  22. qiskit/circuit/controlflow/__init__.py +59 -0
  23. qiskit/circuit/controlflow/_builder_utils.py +211 -0
  24. qiskit/circuit/controlflow/box.py +163 -0
  25. qiskit/circuit/controlflow/break_loop.py +56 -0
  26. qiskit/circuit/controlflow/builder.py +791 -0
  27. qiskit/circuit/controlflow/continue_loop.py +56 -0
  28. qiskit/circuit/controlflow/control_flow.py +94 -0
  29. qiskit/circuit/controlflow/for_loop.py +218 -0
  30. qiskit/circuit/controlflow/if_else.py +498 -0
  31. qiskit/circuit/controlflow/switch_case.py +411 -0
  32. qiskit/circuit/controlflow/while_loop.py +166 -0
  33. qiskit/circuit/controlledgate.py +274 -0
  34. qiskit/circuit/delay.py +157 -0
  35. qiskit/circuit/duration.py +80 -0
  36. qiskit/circuit/equivalence.py +94 -0
  37. qiskit/circuit/equivalence_library.py +18 -0
  38. qiskit/circuit/exceptions.py +19 -0
  39. qiskit/circuit/gate.py +261 -0
  40. qiskit/circuit/instruction.py +564 -0
  41. qiskit/circuit/instructionset.py +132 -0
  42. qiskit/circuit/library/__init__.py +984 -0
  43. qiskit/circuit/library/arithmetic/__init__.py +40 -0
  44. qiskit/circuit/library/arithmetic/adders/__init__.py +18 -0
  45. qiskit/circuit/library/arithmetic/adders/adder.py +235 -0
  46. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +123 -0
  47. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +129 -0
  48. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +95 -0
  49. qiskit/circuit/library/arithmetic/exact_reciprocal.py +131 -0
  50. qiskit/circuit/library/arithmetic/functional_pauli_rotations.py +114 -0
  51. qiskit/circuit/library/arithmetic/integer_comparator.py +200 -0
  52. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +363 -0
  53. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +243 -0
  54. qiskit/circuit/library/arithmetic/multipliers/__init__.py +17 -0
  55. qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +145 -0
  56. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +201 -0
  57. qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +108 -0
  58. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +502 -0
  59. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +387 -0
  60. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +493 -0
  61. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +389 -0
  62. qiskit/circuit/library/arithmetic/quadratic_form.py +364 -0
  63. qiskit/circuit/library/arithmetic/weighted_adder.py +409 -0
  64. qiskit/circuit/library/basis_change/__init__.py +15 -0
  65. qiskit/circuit/library/basis_change/qft.py +316 -0
  66. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  67. qiskit/circuit/library/blueprintcircuit.py +316 -0
  68. qiskit/circuit/library/boolean_logic/__init__.py +18 -0
  69. qiskit/circuit/library/boolean_logic/inner_product.py +157 -0
  70. qiskit/circuit/library/boolean_logic/quantum_and.py +204 -0
  71. qiskit/circuit/library/boolean_logic/quantum_or.py +206 -0
  72. qiskit/circuit/library/boolean_logic/quantum_xor.py +167 -0
  73. qiskit/circuit/library/data_preparation/__init__.py +57 -0
  74. qiskit/circuit/library/data_preparation/_z_feature_map.py +115 -0
  75. qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
  76. qiskit/circuit/library/data_preparation/initializer.py +107 -0
  77. qiskit/circuit/library/data_preparation/pauli_feature_map.py +656 -0
  78. qiskit/circuit/library/data_preparation/state_preparation.py +336 -0
  79. qiskit/circuit/library/fourier_checking.py +160 -0
  80. qiskit/circuit/library/generalized_gates/__init__.py +30 -0
  81. qiskit/circuit/library/generalized_gates/diagonal.py +159 -0
  82. qiskit/circuit/library/generalized_gates/gms.py +175 -0
  83. qiskit/circuit/library/generalized_gates/gr.py +219 -0
  84. qiskit/circuit/library/generalized_gates/isometry.py +370 -0
  85. qiskit/circuit/library/generalized_gates/linear_function.py +318 -0
  86. qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +143 -0
  87. qiskit/circuit/library/generalized_gates/mcmt.py +316 -0
  88. qiskit/circuit/library/generalized_gates/pauli.py +84 -0
  89. qiskit/circuit/library/generalized_gates/permutation.py +198 -0
  90. qiskit/circuit/library/generalized_gates/rv.py +96 -0
  91. qiskit/circuit/library/generalized_gates/uc.py +303 -0
  92. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +164 -0
  93. qiskit/circuit/library/generalized_gates/ucrx.py +32 -0
  94. qiskit/circuit/library/generalized_gates/ucry.py +32 -0
  95. qiskit/circuit/library/generalized_gates/ucrz.py +32 -0
  96. qiskit/circuit/library/generalized_gates/unitary.py +217 -0
  97. qiskit/circuit/library/graph_state.py +172 -0
  98. qiskit/circuit/library/grover_operator.py +583 -0
  99. qiskit/circuit/library/hamiltonian_gate.py +142 -0
  100. qiskit/circuit/library/hidden_linear_function.py +163 -0
  101. qiskit/circuit/library/iqp.py +180 -0
  102. qiskit/circuit/library/n_local/__init__.py +45 -0
  103. qiskit/circuit/library/n_local/efficient_su2.py +282 -0
  104. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +520 -0
  105. qiskit/circuit/library/n_local/excitation_preserving.py +303 -0
  106. qiskit/circuit/library/n_local/n_local.py +1477 -0
  107. qiskit/circuit/library/n_local/pauli_two_design.py +246 -0
  108. qiskit/circuit/library/n_local/qaoa_ansatz.py +367 -0
  109. qiskit/circuit/library/n_local/real_amplitudes.py +312 -0
  110. qiskit/circuit/library/n_local/two_local.py +289 -0
  111. qiskit/circuit/library/overlap.py +183 -0
  112. qiskit/circuit/library/pauli_evolution.py +201 -0
  113. qiskit/circuit/library/phase_estimation.py +177 -0
  114. qiskit/circuit/library/phase_oracle.py +239 -0
  115. qiskit/circuit/library/quantum_volume.py +180 -0
  116. qiskit/circuit/library/standard_gates/__init__.py +141 -0
  117. qiskit/circuit/library/standard_gates/dcx.py +77 -0
  118. qiskit/circuit/library/standard_gates/ecr.py +129 -0
  119. qiskit/circuit/library/standard_gates/equivalence_library.py +1800 -0
  120. qiskit/circuit/library/standard_gates/global_phase.py +84 -0
  121. qiskit/circuit/library/standard_gates/h.py +253 -0
  122. qiskit/circuit/library/standard_gates/i.py +76 -0
  123. qiskit/circuit/library/standard_gates/iswap.py +133 -0
  124. qiskit/circuit/library/standard_gates/p.py +422 -0
  125. qiskit/circuit/library/standard_gates/r.py +114 -0
  126. qiskit/circuit/library/standard_gates/rx.py +293 -0
  127. qiskit/circuit/library/standard_gates/rxx.py +180 -0
  128. qiskit/circuit/library/standard_gates/ry.py +286 -0
  129. qiskit/circuit/library/standard_gates/ryy.py +180 -0
  130. qiskit/circuit/library/standard_gates/rz.py +307 -0
  131. qiskit/circuit/library/standard_gates/rzx.py +226 -0
  132. qiskit/circuit/library/standard_gates/rzz.py +193 -0
  133. qiskit/circuit/library/standard_gates/s.py +419 -0
  134. qiskit/circuit/library/standard_gates/swap.py +281 -0
  135. qiskit/circuit/library/standard_gates/sx.py +310 -0
  136. qiskit/circuit/library/standard_gates/t.py +178 -0
  137. qiskit/circuit/library/standard_gates/u.py +395 -0
  138. qiskit/circuit/library/standard_gates/u1.py +490 -0
  139. qiskit/circuit/library/standard_gates/u2.py +145 -0
  140. qiskit/circuit/library/standard_gates/u3.py +428 -0
  141. qiskit/circuit/library/standard_gates/x.py +1481 -0
  142. qiskit/circuit/library/standard_gates/xx_minus_yy.py +202 -0
  143. qiskit/circuit/library/standard_gates/xx_plus_yy.py +236 -0
  144. qiskit/circuit/library/standard_gates/y.py +257 -0
  145. qiskit/circuit/library/standard_gates/z.py +338 -0
  146. qiskit/circuit/library/templates/__init__.py +92 -0
  147. qiskit/circuit/library/templates/clifford/__init__.py +33 -0
  148. qiskit/circuit/library/templates/clifford/clifford_2_1.py +34 -0
  149. qiskit/circuit/library/templates/clifford/clifford_2_2.py +35 -0
  150. qiskit/circuit/library/templates/clifford/clifford_2_3.py +34 -0
  151. qiskit/circuit/library/templates/clifford/clifford_2_4.py +34 -0
  152. qiskit/circuit/library/templates/clifford/clifford_3_1.py +35 -0
  153. qiskit/circuit/library/templates/clifford/clifford_4_1.py +38 -0
  154. qiskit/circuit/library/templates/clifford/clifford_4_2.py +37 -0
  155. qiskit/circuit/library/templates/clifford/clifford_4_3.py +38 -0
  156. qiskit/circuit/library/templates/clifford/clifford_4_4.py +37 -0
  157. qiskit/circuit/library/templates/clifford/clifford_5_1.py +40 -0
  158. qiskit/circuit/library/templates/clifford/clifford_6_1.py +40 -0
  159. qiskit/circuit/library/templates/clifford/clifford_6_2.py +40 -0
  160. qiskit/circuit/library/templates/clifford/clifford_6_3.py +40 -0
  161. qiskit/circuit/library/templates/clifford/clifford_6_4.py +38 -0
  162. qiskit/circuit/library/templates/clifford/clifford_6_5.py +40 -0
  163. qiskit/circuit/library/templates/clifford/clifford_8_1.py +42 -0
  164. qiskit/circuit/library/templates/clifford/clifford_8_2.py +42 -0
  165. qiskit/circuit/library/templates/clifford/clifford_8_3.py +41 -0
  166. qiskit/circuit/library/templates/nct/__init__.py +67 -0
  167. qiskit/circuit/library/templates/nct/template_nct_2a_1.py +34 -0
  168. qiskit/circuit/library/templates/nct/template_nct_2a_2.py +35 -0
  169. qiskit/circuit/library/templates/nct/template_nct_2a_3.py +37 -0
  170. qiskit/circuit/library/templates/nct/template_nct_4a_1.py +43 -0
  171. qiskit/circuit/library/templates/nct/template_nct_4a_2.py +41 -0
  172. qiskit/circuit/library/templates/nct/template_nct_4a_3.py +39 -0
  173. qiskit/circuit/library/templates/nct/template_nct_4b_1.py +41 -0
  174. qiskit/circuit/library/templates/nct/template_nct_4b_2.py +39 -0
  175. qiskit/circuit/library/templates/nct/template_nct_5a_1.py +40 -0
  176. qiskit/circuit/library/templates/nct/template_nct_5a_2.py +40 -0
  177. qiskit/circuit/library/templates/nct/template_nct_5a_3.py +40 -0
  178. qiskit/circuit/library/templates/nct/template_nct_5a_4.py +39 -0
  179. qiskit/circuit/library/templates/nct/template_nct_6a_1.py +40 -0
  180. qiskit/circuit/library/templates/nct/template_nct_6a_2.py +41 -0
  181. qiskit/circuit/library/templates/nct/template_nct_6a_3.py +41 -0
  182. qiskit/circuit/library/templates/nct/template_nct_6a_4.py +41 -0
  183. qiskit/circuit/library/templates/nct/template_nct_6b_1.py +41 -0
  184. qiskit/circuit/library/templates/nct/template_nct_6b_2.py +41 -0
  185. qiskit/circuit/library/templates/nct/template_nct_6c_1.py +41 -0
  186. qiskit/circuit/library/templates/nct/template_nct_7a_1.py +43 -0
  187. qiskit/circuit/library/templates/nct/template_nct_7b_1.py +43 -0
  188. qiskit/circuit/library/templates/nct/template_nct_7c_1.py +43 -0
  189. qiskit/circuit/library/templates/nct/template_nct_7d_1.py +43 -0
  190. qiskit/circuit/library/templates/nct/template_nct_7e_1.py +43 -0
  191. qiskit/circuit/library/templates/nct/template_nct_9a_1.py +45 -0
  192. qiskit/circuit/library/templates/nct/template_nct_9c_1.py +43 -0
  193. qiskit/circuit/library/templates/nct/template_nct_9c_10.py +44 -0
  194. qiskit/circuit/library/templates/nct/template_nct_9c_11.py +44 -0
  195. qiskit/circuit/library/templates/nct/template_nct_9c_12.py +44 -0
  196. qiskit/circuit/library/templates/nct/template_nct_9c_2.py +44 -0
  197. qiskit/circuit/library/templates/nct/template_nct_9c_3.py +44 -0
  198. qiskit/circuit/library/templates/nct/template_nct_9c_4.py +44 -0
  199. qiskit/circuit/library/templates/nct/template_nct_9c_5.py +44 -0
  200. qiskit/circuit/library/templates/nct/template_nct_9c_6.py +44 -0
  201. qiskit/circuit/library/templates/nct/template_nct_9c_7.py +44 -0
  202. qiskit/circuit/library/templates/nct/template_nct_9c_8.py +44 -0
  203. qiskit/circuit/library/templates/nct/template_nct_9c_9.py +44 -0
  204. qiskit/circuit/library/templates/nct/template_nct_9d_1.py +43 -0
  205. qiskit/circuit/library/templates/nct/template_nct_9d_10.py +44 -0
  206. qiskit/circuit/library/templates/nct/template_nct_9d_2.py +44 -0
  207. qiskit/circuit/library/templates/nct/template_nct_9d_3.py +44 -0
  208. qiskit/circuit/library/templates/nct/template_nct_9d_4.py +44 -0
  209. qiskit/circuit/library/templates/nct/template_nct_9d_5.py +44 -0
  210. qiskit/circuit/library/templates/nct/template_nct_9d_6.py +44 -0
  211. qiskit/circuit/library/templates/nct/template_nct_9d_7.py +44 -0
  212. qiskit/circuit/library/templates/nct/template_nct_9d_8.py +44 -0
  213. qiskit/circuit/library/templates/nct/template_nct_9d_9.py +44 -0
  214. qiskit/circuit/library/templates/rzx/__init__.py +25 -0
  215. qiskit/circuit/library/templates/rzx/rzx_cy.py +47 -0
  216. qiskit/circuit/library/templates/rzx/rzx_xz.py +54 -0
  217. qiskit/circuit/library/templates/rzx/rzx_yz.py +45 -0
  218. qiskit/circuit/library/templates/rzx/rzx_zz1.py +69 -0
  219. qiskit/circuit/library/templates/rzx/rzx_zz2.py +59 -0
  220. qiskit/circuit/library/templates/rzx/rzx_zz3.py +59 -0
  221. qiskit/circuit/measure.py +53 -0
  222. qiskit/circuit/operation.py +68 -0
  223. qiskit/circuit/parameter.py +179 -0
  224. qiskit/circuit/parameterexpression.py +703 -0
  225. qiskit/circuit/parametertable.py +119 -0
  226. qiskit/circuit/parametervector.py +140 -0
  227. qiskit/circuit/quantumcircuit.py +7540 -0
  228. qiskit/circuit/quantumcircuitdata.py +136 -0
  229. qiskit/circuit/random/__init__.py +15 -0
  230. qiskit/circuit/random/utils.py +366 -0
  231. qiskit/circuit/reset.py +37 -0
  232. qiskit/circuit/singleton.py +600 -0
  233. qiskit/circuit/store.py +89 -0
  234. qiskit/circuit/tools/__init__.py +16 -0
  235. qiskit/circuit/tools/pi_check.py +193 -0
  236. qiskit/circuit/twirling.py +145 -0
  237. qiskit/compiler/__init__.py +27 -0
  238. qiskit/compiler/transpiler.py +375 -0
  239. qiskit/converters/__init__.py +74 -0
  240. qiskit/converters/circuit_to_dag.py +80 -0
  241. qiskit/converters/circuit_to_dagdependency.py +49 -0
  242. qiskit/converters/circuit_to_dagdependency_v2.py +46 -0
  243. qiskit/converters/circuit_to_gate.py +107 -0
  244. qiskit/converters/circuit_to_instruction.py +142 -0
  245. qiskit/converters/dag_to_circuit.py +79 -0
  246. qiskit/converters/dag_to_dagdependency.py +54 -0
  247. qiskit/converters/dag_to_dagdependency_v2.py +43 -0
  248. qiskit/converters/dagdependency_to_circuit.py +40 -0
  249. qiskit/converters/dagdependency_to_dag.py +48 -0
  250. qiskit/dagcircuit/__init__.py +55 -0
  251. qiskit/dagcircuit/collect_blocks.py +407 -0
  252. qiskit/dagcircuit/dagcircuit.py +24 -0
  253. qiskit/dagcircuit/dagdependency.py +612 -0
  254. qiskit/dagcircuit/dagdependency_v2.py +566 -0
  255. qiskit/dagcircuit/dagdepnode.py +160 -0
  256. qiskit/dagcircuit/dagnode.py +188 -0
  257. qiskit/dagcircuit/exceptions.py +42 -0
  258. qiskit/exceptions.py +153 -0
  259. qiskit/passmanager/__init__.py +258 -0
  260. qiskit/passmanager/base_tasks.py +230 -0
  261. qiskit/passmanager/compilation_status.py +74 -0
  262. qiskit/passmanager/exceptions.py +19 -0
  263. qiskit/passmanager/flow_controllers.py +116 -0
  264. qiskit/passmanager/passmanager.py +353 -0
  265. qiskit/primitives/__init__.py +490 -0
  266. qiskit/primitives/backend_estimator_v2.py +530 -0
  267. qiskit/primitives/backend_sampler_v2.py +339 -0
  268. qiskit/primitives/base/__init__.py +20 -0
  269. qiskit/primitives/base/base_estimator.py +247 -0
  270. qiskit/primitives/base/base_primitive_job.py +78 -0
  271. qiskit/primitives/base/base_primitive_v1.py +45 -0
  272. qiskit/primitives/base/base_result_v1.py +65 -0
  273. qiskit/primitives/base/base_sampler.py +196 -0
  274. qiskit/primitives/base/estimator_result_v1.py +46 -0
  275. qiskit/primitives/base/sampler_result_v1.py +45 -0
  276. qiskit/primitives/base/validation_v1.py +250 -0
  277. qiskit/primitives/containers/__init__.py +26 -0
  278. qiskit/primitives/containers/bindings_array.py +391 -0
  279. qiskit/primitives/containers/bit_array.py +764 -0
  280. qiskit/primitives/containers/data_bin.py +175 -0
  281. qiskit/primitives/containers/estimator_pub.py +222 -0
  282. qiskit/primitives/containers/object_array.py +94 -0
  283. qiskit/primitives/containers/observables_array.py +296 -0
  284. qiskit/primitives/containers/primitive_result.py +53 -0
  285. qiskit/primitives/containers/pub_result.py +51 -0
  286. qiskit/primitives/containers/sampler_pub.py +193 -0
  287. qiskit/primitives/containers/sampler_pub_result.py +74 -0
  288. qiskit/primitives/containers/shape.py +129 -0
  289. qiskit/primitives/primitive_job.py +81 -0
  290. qiskit/primitives/statevector_estimator.py +175 -0
  291. qiskit/primitives/statevector_sampler.py +290 -0
  292. qiskit/primitives/utils.py +72 -0
  293. qiskit/providers/__init__.py +677 -0
  294. qiskit/providers/backend.py +364 -0
  295. qiskit/providers/basic_provider/__init__.py +47 -0
  296. qiskit/providers/basic_provider/basic_provider.py +121 -0
  297. qiskit/providers/basic_provider/basic_provider_job.py +65 -0
  298. qiskit/providers/basic_provider/basic_provider_tools.py +218 -0
  299. qiskit/providers/basic_provider/basic_simulator.py +693 -0
  300. qiskit/providers/basic_provider/exceptions.py +30 -0
  301. qiskit/providers/exceptions.py +33 -0
  302. qiskit/providers/fake_provider/__init__.py +69 -0
  303. qiskit/providers/fake_provider/generic_backend_v2.py +374 -0
  304. qiskit/providers/fake_provider/utils/__init__.py +15 -0
  305. qiskit/providers/job.py +147 -0
  306. qiskit/providers/jobstatus.py +30 -0
  307. qiskit/providers/options.py +273 -0
  308. qiskit/providers/providerutils.py +110 -0
  309. qiskit/qasm/libs/dummy/stdgates.inc +75 -0
  310. qiskit/qasm/libs/qelib1.inc +266 -0
  311. qiskit/qasm/libs/stdgates.inc +82 -0
  312. qiskit/qasm2/__init__.py +669 -0
  313. qiskit/qasm2/exceptions.py +27 -0
  314. qiskit/qasm2/export.py +364 -0
  315. qiskit/qasm2/parse.py +438 -0
  316. qiskit/qasm3/__init__.py +372 -0
  317. qiskit/qasm3/ast.py +782 -0
  318. qiskit/qasm3/exceptions.py +27 -0
  319. qiskit/qasm3/experimental.py +70 -0
  320. qiskit/qasm3/exporter.py +1340 -0
  321. qiskit/qasm3/printer.py +608 -0
  322. qiskit/qpy/__init__.py +1965 -0
  323. qiskit/qpy/binary_io/__init__.py +35 -0
  324. qiskit/qpy/binary_io/circuits.py +1455 -0
  325. qiskit/qpy/binary_io/parse_sympy_repr.py +121 -0
  326. qiskit/qpy/binary_io/schedules.py +308 -0
  327. qiskit/qpy/binary_io/value.py +1165 -0
  328. qiskit/qpy/common.py +353 -0
  329. qiskit/qpy/exceptions.py +53 -0
  330. qiskit/qpy/formats.py +442 -0
  331. qiskit/qpy/interface.py +344 -0
  332. qiskit/qpy/type_keys.py +409 -0
  333. qiskit/quantum_info/__init__.py +162 -0
  334. qiskit/quantum_info/analysis/__init__.py +17 -0
  335. qiskit/quantum_info/analysis/average.py +47 -0
  336. qiskit/quantum_info/analysis/distance.py +104 -0
  337. qiskit/quantum_info/analysis/make_observable.py +44 -0
  338. qiskit/quantum_info/analysis/z2_symmetries.py +484 -0
  339. qiskit/quantum_info/operators/__init__.py +28 -0
  340. qiskit/quantum_info/operators/base_operator.py +145 -0
  341. qiskit/quantum_info/operators/channel/__init__.py +29 -0
  342. qiskit/quantum_info/operators/channel/chi.py +191 -0
  343. qiskit/quantum_info/operators/channel/choi.py +218 -0
  344. qiskit/quantum_info/operators/channel/kraus.py +337 -0
  345. qiskit/quantum_info/operators/channel/ptm.py +204 -0
  346. qiskit/quantum_info/operators/channel/quantum_channel.py +348 -0
  347. qiskit/quantum_info/operators/channel/stinespring.py +296 -0
  348. qiskit/quantum_info/operators/channel/superop.py +373 -0
  349. qiskit/quantum_info/operators/channel/transformations.py +490 -0
  350. qiskit/quantum_info/operators/custom_iterator.py +48 -0
  351. qiskit/quantum_info/operators/dihedral/__init__.py +18 -0
  352. qiskit/quantum_info/operators/dihedral/dihedral.py +511 -0
  353. qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +216 -0
  354. qiskit/quantum_info/operators/dihedral/polynomial.py +313 -0
  355. qiskit/quantum_info/operators/dihedral/random.py +64 -0
  356. qiskit/quantum_info/operators/linear_op.py +25 -0
  357. qiskit/quantum_info/operators/measures.py +418 -0
  358. qiskit/quantum_info/operators/mixins/__init__.py +52 -0
  359. qiskit/quantum_info/operators/mixins/adjoint.py +52 -0
  360. qiskit/quantum_info/operators/mixins/group.py +171 -0
  361. qiskit/quantum_info/operators/mixins/linear.py +84 -0
  362. qiskit/quantum_info/operators/mixins/multiply.py +62 -0
  363. qiskit/quantum_info/operators/mixins/tolerances.py +72 -0
  364. qiskit/quantum_info/operators/op_shape.py +525 -0
  365. qiskit/quantum_info/operators/operator.py +869 -0
  366. qiskit/quantum_info/operators/operator_utils.py +76 -0
  367. qiskit/quantum_info/operators/predicates.py +183 -0
  368. qiskit/quantum_info/operators/random.py +154 -0
  369. qiskit/quantum_info/operators/scalar_op.py +254 -0
  370. qiskit/quantum_info/operators/symplectic/__init__.py +23 -0
  371. qiskit/quantum_info/operators/symplectic/base_pauli.py +719 -0
  372. qiskit/quantum_info/operators/symplectic/clifford.py +1032 -0
  373. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +558 -0
  374. qiskit/quantum_info/operators/symplectic/pauli.py +755 -0
  375. qiskit/quantum_info/operators/symplectic/pauli_list.py +1242 -0
  376. qiskit/quantum_info/operators/symplectic/pauli_utils.py +40 -0
  377. qiskit/quantum_info/operators/symplectic/random.py +117 -0
  378. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1239 -0
  379. qiskit/quantum_info/operators/utils/__init__.py +20 -0
  380. qiskit/quantum_info/operators/utils/anti_commutator.py +36 -0
  381. qiskit/quantum_info/operators/utils/commutator.py +36 -0
  382. qiskit/quantum_info/operators/utils/double_commutator.py +76 -0
  383. qiskit/quantum_info/quaternion.py +156 -0
  384. qiskit/quantum_info/random.py +26 -0
  385. qiskit/quantum_info/states/__init__.py +28 -0
  386. qiskit/quantum_info/states/densitymatrix.py +857 -0
  387. qiskit/quantum_info/states/measures.py +288 -0
  388. qiskit/quantum_info/states/quantum_state.py +503 -0
  389. qiskit/quantum_info/states/random.py +157 -0
  390. qiskit/quantum_info/states/stabilizerstate.py +805 -0
  391. qiskit/quantum_info/states/statevector.py +977 -0
  392. qiskit/quantum_info/states/utils.py +247 -0
  393. qiskit/result/__init__.py +61 -0
  394. qiskit/result/counts.py +189 -0
  395. qiskit/result/distributions/__init__.py +17 -0
  396. qiskit/result/distributions/probability.py +100 -0
  397. qiskit/result/distributions/quasi.py +154 -0
  398. qiskit/result/exceptions.py +40 -0
  399. qiskit/result/models.py +241 -0
  400. qiskit/result/postprocess.py +239 -0
  401. qiskit/result/result.py +385 -0
  402. qiskit/result/sampled_expval.py +74 -0
  403. qiskit/result/utils.py +294 -0
  404. qiskit/synthesis/__init__.py +240 -0
  405. qiskit/synthesis/arithmetic/__init__.py +18 -0
  406. qiskit/synthesis/arithmetic/adders/__init__.py +17 -0
  407. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
  408. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +103 -0
  409. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
  410. qiskit/synthesis/arithmetic/comparators/__init__.py +16 -0
  411. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  412. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  413. qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
  414. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +103 -0
  415. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +100 -0
  416. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  417. qiskit/synthesis/boolean/__init__.py +13 -0
  418. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  419. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  420. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  421. qiskit/synthesis/clifford/__init__.py +19 -0
  422. qiskit/synthesis/clifford/clifford_decompose_ag.py +178 -0
  423. qiskit/synthesis/clifford/clifford_decompose_bm.py +46 -0
  424. qiskit/synthesis/clifford/clifford_decompose_full.py +64 -0
  425. qiskit/synthesis/clifford/clifford_decompose_greedy.py +58 -0
  426. qiskit/synthesis/clifford/clifford_decompose_layers.py +447 -0
  427. qiskit/synthesis/cnotdihedral/__init__.py +17 -0
  428. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +52 -0
  429. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +141 -0
  430. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_two_qubits.py +266 -0
  431. qiskit/synthesis/discrete_basis/__init__.py +16 -0
  432. qiskit/synthesis/discrete_basis/commutator_decompose.py +265 -0
  433. qiskit/synthesis/discrete_basis/gate_sequence.py +421 -0
  434. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +165 -0
  435. qiskit/synthesis/discrete_basis/solovay_kitaev.py +240 -0
  436. qiskit/synthesis/evolution/__init__.py +21 -0
  437. qiskit/synthesis/evolution/evolution_synthesis.py +48 -0
  438. qiskit/synthesis/evolution/lie_trotter.py +120 -0
  439. qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
  440. qiskit/synthesis/evolution/pauli_network.py +80 -0
  441. qiskit/synthesis/evolution/product_formula.py +313 -0
  442. qiskit/synthesis/evolution/qdrift.py +130 -0
  443. qiskit/synthesis/evolution/suzuki_trotter.py +224 -0
  444. qiskit/synthesis/linear/__init__.py +26 -0
  445. qiskit/synthesis/linear/cnot_synth.py +69 -0
  446. qiskit/synthesis/linear/linear_circuits_utils.py +128 -0
  447. qiskit/synthesis/linear/linear_depth_lnn.py +61 -0
  448. qiskit/synthesis/linear/linear_matrix_utils.py +27 -0
  449. qiskit/synthesis/linear_phase/__init__.py +17 -0
  450. qiskit/synthesis/linear_phase/cnot_phase_synth.py +206 -0
  451. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +61 -0
  452. qiskit/synthesis/linear_phase/cz_depth_lnn.py +58 -0
  453. qiskit/synthesis/multi_controlled/__init__.py +25 -0
  454. qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
  455. qiskit/synthesis/multi_controlled/mcx_synthesis.py +359 -0
  456. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  457. qiskit/synthesis/one_qubit/__init__.py +15 -0
  458. qiskit/synthesis/one_qubit/one_qubit_decompose.py +288 -0
  459. qiskit/synthesis/permutation/__init__.py +18 -0
  460. qiskit/synthesis/permutation/permutation_full.py +78 -0
  461. qiskit/synthesis/permutation/permutation_lnn.py +54 -0
  462. qiskit/synthesis/permutation/permutation_reverse_lnn.py +93 -0
  463. qiskit/synthesis/permutation/permutation_utils.py +16 -0
  464. qiskit/synthesis/qft/__init__.py +16 -0
  465. qiskit/synthesis/qft/qft_decompose_full.py +97 -0
  466. qiskit/synthesis/qft/qft_decompose_lnn.py +79 -0
  467. qiskit/synthesis/stabilizer/__init__.py +16 -0
  468. qiskit/synthesis/stabilizer/stabilizer_circuit.py +149 -0
  469. qiskit/synthesis/stabilizer/stabilizer_decompose.py +194 -0
  470. qiskit/synthesis/two_qubit/__init__.py +20 -0
  471. qiskit/synthesis/two_qubit/local_invariance.py +63 -0
  472. qiskit/synthesis/two_qubit/two_qubit_decompose.py +583 -0
  473. qiskit/synthesis/two_qubit/xx_decompose/__init__.py +19 -0
  474. qiskit/synthesis/two_qubit/xx_decompose/circuits.py +300 -0
  475. qiskit/synthesis/two_qubit/xx_decompose/decomposer.py +324 -0
  476. qiskit/synthesis/two_qubit/xx_decompose/embodiments.py +163 -0
  477. qiskit/synthesis/two_qubit/xx_decompose/paths.py +412 -0
  478. qiskit/synthesis/two_qubit/xx_decompose/polytopes.py +262 -0
  479. qiskit/synthesis/two_qubit/xx_decompose/utilities.py +40 -0
  480. qiskit/synthesis/two_qubit/xx_decompose/weyl.py +133 -0
  481. qiskit/synthesis/unitary/__init__.py +13 -0
  482. qiskit/synthesis/unitary/aqc/__init__.py +177 -0
  483. qiskit/synthesis/unitary/aqc/approximate.py +116 -0
  484. qiskit/synthesis/unitary/aqc/aqc.py +175 -0
  485. qiskit/synthesis/unitary/aqc/cnot_structures.py +300 -0
  486. qiskit/synthesis/unitary/aqc/cnot_unit_circuit.py +103 -0
  487. qiskit/synthesis/unitary/aqc/cnot_unit_objective.py +299 -0
  488. qiskit/synthesis/unitary/aqc/elementary_operations.py +108 -0
  489. qiskit/synthesis/unitary/aqc/fast_gradient/__init__.py +164 -0
  490. qiskit/synthesis/unitary/aqc/fast_gradient/fast_grad_utils.py +237 -0
  491. qiskit/synthesis/unitary/aqc/fast_gradient/fast_gradient.py +226 -0
  492. qiskit/synthesis/unitary/aqc/fast_gradient/layer.py +370 -0
  493. qiskit/synthesis/unitary/aqc/fast_gradient/pmatrix.py +312 -0
  494. qiskit/synthesis/unitary/qsd.py +288 -0
  495. qiskit/transpiler/__init__.py +1345 -0
  496. qiskit/transpiler/basepasses.py +190 -0
  497. qiskit/transpiler/coupling.py +500 -0
  498. qiskit/transpiler/exceptions.py +59 -0
  499. qiskit/transpiler/instruction_durations.py +281 -0
  500. qiskit/transpiler/layout.py +740 -0
  501. qiskit/transpiler/passes/__init__.py +276 -0
  502. qiskit/transpiler/passes/analysis/__init__.py +23 -0
  503. qiskit/transpiler/passes/analysis/count_ops.py +30 -0
  504. qiskit/transpiler/passes/analysis/count_ops_longest_path.py +26 -0
  505. qiskit/transpiler/passes/analysis/dag_longest_path.py +24 -0
  506. qiskit/transpiler/passes/analysis/depth.py +33 -0
  507. qiskit/transpiler/passes/analysis/num_qubits.py +26 -0
  508. qiskit/transpiler/passes/analysis/num_tensor_factors.py +26 -0
  509. qiskit/transpiler/passes/analysis/resource_estimation.py +41 -0
  510. qiskit/transpiler/passes/analysis/size.py +36 -0
  511. qiskit/transpiler/passes/analysis/width.py +27 -0
  512. qiskit/transpiler/passes/basis/__init__.py +19 -0
  513. qiskit/transpiler/passes/basis/basis_translator.py +138 -0
  514. qiskit/transpiler/passes/basis/decompose.py +137 -0
  515. qiskit/transpiler/passes/basis/translate_parameterized.py +175 -0
  516. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +84 -0
  517. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +110 -0
  518. qiskit/transpiler/passes/layout/__init__.py +26 -0
  519. qiskit/transpiler/passes/layout/_csp_custom_solver.py +65 -0
  520. qiskit/transpiler/passes/layout/apply_layout.py +128 -0
  521. qiskit/transpiler/passes/layout/csp_layout.py +132 -0
  522. qiskit/transpiler/passes/layout/dense_layout.py +177 -0
  523. qiskit/transpiler/passes/layout/disjoint_utils.py +219 -0
  524. qiskit/transpiler/passes/layout/enlarge_with_ancilla.py +49 -0
  525. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +116 -0
  526. qiskit/transpiler/passes/layout/layout_2q_distance.py +77 -0
  527. qiskit/transpiler/passes/layout/sabre_layout.py +506 -0
  528. qiskit/transpiler/passes/layout/sabre_pre_layout.py +225 -0
  529. qiskit/transpiler/passes/layout/set_layout.py +69 -0
  530. qiskit/transpiler/passes/layout/trivial_layout.py +66 -0
  531. qiskit/transpiler/passes/layout/vf2_layout.py +256 -0
  532. qiskit/transpiler/passes/layout/vf2_post_layout.py +376 -0
  533. qiskit/transpiler/passes/layout/vf2_utils.py +235 -0
  534. qiskit/transpiler/passes/optimization/__init__.py +42 -0
  535. qiskit/transpiler/passes/optimization/_gate_extension.py +80 -0
  536. qiskit/transpiler/passes/optimization/collect_1q_runs.py +31 -0
  537. qiskit/transpiler/passes/optimization/collect_2q_blocks.py +35 -0
  538. qiskit/transpiler/passes/optimization/collect_and_collapse.py +117 -0
  539. qiskit/transpiler/passes/optimization/collect_cliffords.py +109 -0
  540. qiskit/transpiler/passes/optimization/collect_linear_functions.py +85 -0
  541. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +242 -0
  542. qiskit/transpiler/passes/optimization/commutation_analysis.py +44 -0
  543. qiskit/transpiler/passes/optimization/commutative_cancellation.py +82 -0
  544. qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +140 -0
  545. qiskit/transpiler/passes/optimization/consolidate_blocks.py +176 -0
  546. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  547. qiskit/transpiler/passes/optimization/elide_permutations.py +91 -0
  548. qiskit/transpiler/passes/optimization/hoare_opt.py +420 -0
  549. qiskit/transpiler/passes/optimization/inverse_cancellation.py +95 -0
  550. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  551. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +267 -0
  552. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +250 -0
  553. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +384 -0
  554. qiskit/transpiler/passes/optimization/optimize_annotated.py +449 -0
  555. qiskit/transpiler/passes/optimization/optimize_cliffords.py +89 -0
  556. qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +71 -0
  557. qiskit/transpiler/passes/optimization/remove_diagonal_gates_before_measure.py +41 -0
  558. qiskit/transpiler/passes/optimization/remove_final_reset.py +37 -0
  559. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +70 -0
  560. qiskit/transpiler/passes/optimization/remove_reset_in_zero_state.py +37 -0
  561. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +50 -0
  562. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +63 -0
  563. qiskit/transpiler/passes/optimization/template_matching/__init__.py +19 -0
  564. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +749 -0
  565. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +452 -0
  566. qiskit/transpiler/passes/optimization/template_matching/maximal_matches.py +77 -0
  567. qiskit/transpiler/passes/optimization/template_matching/template_matching.py +370 -0
  568. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +639 -0
  569. qiskit/transpiler/passes/optimization/template_optimization.py +158 -0
  570. qiskit/transpiler/passes/routing/__init__.py +21 -0
  571. qiskit/transpiler/passes/routing/algorithms/__init__.py +33 -0
  572. qiskit/transpiler/passes/routing/algorithms/token_swapper.py +105 -0
  573. qiskit/transpiler/passes/routing/algorithms/types.py +46 -0
  574. qiskit/transpiler/passes/routing/algorithms/util.py +103 -0
  575. qiskit/transpiler/passes/routing/basic_swap.py +166 -0
  576. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/__init__.py +25 -0
  577. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_block.py +60 -0
  578. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +397 -0
  579. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/pauli_2q_evolution_commutation.py +145 -0
  580. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +306 -0
  581. qiskit/transpiler/passes/routing/layout_transformation.py +119 -0
  582. qiskit/transpiler/passes/routing/lookahead_swap.py +390 -0
  583. qiskit/transpiler/passes/routing/sabre_swap.py +463 -0
  584. qiskit/transpiler/passes/routing/star_prerouting.py +408 -0
  585. qiskit/transpiler/passes/routing/utils.py +35 -0
  586. qiskit/transpiler/passes/scheduling/__init__.py +21 -0
  587. qiskit/transpiler/passes/scheduling/alignments/__init__.py +79 -0
  588. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +70 -0
  589. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +251 -0
  590. qiskit/transpiler/passes/scheduling/padding/__init__.py +16 -0
  591. qiskit/transpiler/passes/scheduling/padding/base_padding.py +284 -0
  592. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +415 -0
  593. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +90 -0
  594. qiskit/transpiler/passes/scheduling/scheduling/__init__.py +17 -0
  595. qiskit/transpiler/passes/scheduling/scheduling/alap.py +93 -0
  596. qiskit/transpiler/passes/scheduling/scheduling/asap.py +100 -0
  597. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +88 -0
  598. qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
  599. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +237 -0
  600. qiskit/transpiler/passes/synthesis/__init__.py +20 -0
  601. qiskit/transpiler/passes/synthesis/aqc_plugin.py +153 -0
  602. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  603. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +429 -0
  604. qiskit/transpiler/passes/synthesis/hls_plugins.py +1963 -0
  605. qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +41 -0
  606. qiskit/transpiler/passes/synthesis/plugin.py +738 -0
  607. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +313 -0
  608. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +425 -0
  609. qiskit/transpiler/passes/utils/__init__.py +32 -0
  610. qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +41 -0
  611. qiskit/transpiler/passes/utils/check_gate_direction.py +60 -0
  612. qiskit/transpiler/passes/utils/check_map.py +78 -0
  613. qiskit/transpiler/passes/utils/contains_instruction.py +45 -0
  614. qiskit/transpiler/passes/utils/control_flow.py +61 -0
  615. qiskit/transpiler/passes/utils/dag_fixed_point.py +36 -0
  616. qiskit/transpiler/passes/utils/error.py +69 -0
  617. qiskit/transpiler/passes/utils/filter_op_nodes.py +66 -0
  618. qiskit/transpiler/passes/utils/fixed_point.py +48 -0
  619. qiskit/transpiler/passes/utils/gate_direction.py +93 -0
  620. qiskit/transpiler/passes/utils/gates_basis.py +51 -0
  621. qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +163 -0
  622. qiskit/transpiler/passes/utils/minimum_point.py +118 -0
  623. qiskit/transpiler/passes/utils/remove_barriers.py +50 -0
  624. qiskit/transpiler/passes/utils/remove_final_measurements.py +121 -0
  625. qiskit/transpiler/passes/utils/unroll_forloops.py +81 -0
  626. qiskit/transpiler/passmanager.py +503 -0
  627. qiskit/transpiler/passmanager_config.py +151 -0
  628. qiskit/transpiler/preset_passmanagers/__init__.py +93 -0
  629. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +993 -0
  630. qiskit/transpiler/preset_passmanagers/common.py +672 -0
  631. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +437 -0
  632. qiskit/transpiler/preset_passmanagers/level0.py +104 -0
  633. qiskit/transpiler/preset_passmanagers/level1.py +108 -0
  634. qiskit/transpiler/preset_passmanagers/level2.py +109 -0
  635. qiskit/transpiler/preset_passmanagers/level3.py +110 -0
  636. qiskit/transpiler/preset_passmanagers/plugin.py +346 -0
  637. qiskit/transpiler/target.py +905 -0
  638. qiskit/transpiler/timing_constraints.py +59 -0
  639. qiskit/user_config.py +266 -0
  640. qiskit/utils/__init__.py +90 -0
  641. qiskit/utils/classtools.py +146 -0
  642. qiskit/utils/deprecation.py +382 -0
  643. qiskit/utils/lazy_tester.py +363 -0
  644. qiskit/utils/optionals.py +354 -0
  645. qiskit/utils/parallel.py +318 -0
  646. qiskit/utils/units.py +146 -0
  647. qiskit/version.py +84 -0
  648. qiskit/visualization/__init__.py +290 -0
  649. qiskit/visualization/array.py +207 -0
  650. qiskit/visualization/bloch.py +778 -0
  651. qiskit/visualization/circuit/__init__.py +15 -0
  652. qiskit/visualization/circuit/_utils.py +675 -0
  653. qiskit/visualization/circuit/circuit_visualization.py +735 -0
  654. qiskit/visualization/circuit/latex.py +661 -0
  655. qiskit/visualization/circuit/matplotlib.py +2019 -0
  656. qiskit/visualization/circuit/qcstyle.py +278 -0
  657. qiskit/visualization/circuit/styles/__init__.py +13 -0
  658. qiskit/visualization/circuit/styles/bw.json +202 -0
  659. qiskit/visualization/circuit/styles/clifford.json +202 -0
  660. qiskit/visualization/circuit/styles/iqp-dark.json +214 -0
  661. qiskit/visualization/circuit/styles/iqp.json +214 -0
  662. qiskit/visualization/circuit/styles/textbook.json +202 -0
  663. qiskit/visualization/circuit/text.py +1849 -0
  664. qiskit/visualization/circuit_visualization.py +19 -0
  665. qiskit/visualization/counts_visualization.py +487 -0
  666. qiskit/visualization/dag_visualization.py +318 -0
  667. qiskit/visualization/exceptions.py +21 -0
  668. qiskit/visualization/gate_map.py +1424 -0
  669. qiskit/visualization/library.py +40 -0
  670. qiskit/visualization/pass_manager_visualization.py +312 -0
  671. qiskit/visualization/state_visualization.py +1546 -0
  672. qiskit/visualization/timeline/__init__.py +21 -0
  673. qiskit/visualization/timeline/core.py +495 -0
  674. qiskit/visualization/timeline/drawings.py +260 -0
  675. qiskit/visualization/timeline/generators.py +506 -0
  676. qiskit/visualization/timeline/interface.py +444 -0
  677. qiskit/visualization/timeline/layouts.py +115 -0
  678. qiskit/visualization/timeline/plotters/__init__.py +16 -0
  679. qiskit/visualization/timeline/plotters/base_plotter.py +58 -0
  680. qiskit/visualization/timeline/plotters/matplotlib.py +195 -0
  681. qiskit/visualization/timeline/stylesheet.py +301 -0
  682. qiskit/visualization/timeline/types.py +148 -0
  683. qiskit/visualization/transition_visualization.py +369 -0
  684. qiskit/visualization/utils.py +49 -0
  685. qiskit-2.0.3.dist-info/METADATA +220 -0
  686. qiskit-2.0.3.dist-info/RECORD +690 -0
  687. qiskit-2.0.3.dist-info/WHEEL +6 -0
  688. qiskit-2.0.3.dist-info/entry_points.txt +82 -0
  689. qiskit-2.0.3.dist-info/licenses/LICENSE.txt +203 -0
  690. qiskit-2.0.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,993 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2022.
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
+ """Built-in transpiler stage plugins for preset pass managers."""
14
+
15
+ import os
16
+
17
+ from qiskit.transpiler.passes.optimization.split_2q_unitaries import Split2QUnitaries
18
+ from qiskit.transpiler.passmanager import PassManager
19
+ from qiskit.transpiler.exceptions import TranspilerError
20
+ from qiskit.transpiler.passes import BasicSwap
21
+ from qiskit.transpiler.passes import LookaheadSwap
22
+ from qiskit.transpiler.passes import SabreSwap
23
+ from qiskit.transpiler.passes import Error
24
+ from qiskit.transpiler.passes import SetLayout
25
+ from qiskit.transpiler.passes import VF2Layout
26
+ from qiskit.transpiler.passes import SabreLayout
27
+ from qiskit.transpiler.passes import DenseLayout
28
+ from qiskit.transpiler.passes import TrivialLayout
29
+ from qiskit.transpiler.passes import CheckMap
30
+ from qiskit.transpiler.passes import BarrierBeforeFinalMeasurements
31
+ from qiskit.transpiler.passes import ElidePermutations
32
+ from qiskit.transpiler.passes import RemoveDiagonalGatesBeforeMeasure
33
+ from qiskit.transpiler.preset_passmanagers import common
34
+ from qiskit.transpiler.preset_passmanagers.plugin import (
35
+ PassManagerStagePlugin,
36
+ PassManagerStagePluginManager,
37
+ )
38
+ from qiskit.transpiler.passes.optimization import (
39
+ Optimize1qGatesDecomposition,
40
+ CommutativeCancellation,
41
+ ConsolidateBlocks,
42
+ InverseCancellation,
43
+ RemoveIdentityEquivalent,
44
+ ContractIdleWiresInControlFlow,
45
+ )
46
+ from qiskit.transpiler.passes import Depth, Size, FixedPoint, MinimumPoint
47
+ from qiskit.transpiler.passes.utils.gates_basis import GatesInBasis
48
+ from qiskit.transpiler.passes.synthesis.unitary_synthesis import UnitarySynthesis
49
+ from qiskit.passmanager.flow_controllers import ConditionalController, DoWhileController
50
+ from qiskit.transpiler.timing_constraints import TimingConstraints
51
+ from qiskit.transpiler.passes.layout.vf2_layout import VF2LayoutStopReason
52
+ from qiskit.circuit.library.standard_gates import (
53
+ CXGate,
54
+ ECRGate,
55
+ CZGate,
56
+ XGate,
57
+ YGate,
58
+ ZGate,
59
+ TGate,
60
+ TdgGate,
61
+ SwapGate,
62
+ SGate,
63
+ SdgGate,
64
+ HGate,
65
+ CYGate,
66
+ SXGate,
67
+ SXdgGate,
68
+ )
69
+ from qiskit.utils import default_num_processes
70
+ from qiskit import user_config
71
+
72
+ CONFIG = user_config.get_config()
73
+
74
+ _discrete_skipped_ops = {
75
+ "delay",
76
+ "reset",
77
+ "measure",
78
+ "switch_case",
79
+ "if_else",
80
+ "for_loop",
81
+ "while_loop",
82
+ }
83
+
84
+
85
+ class DefaultInitPassManager(PassManagerStagePlugin):
86
+ """Plugin class for default init stage."""
87
+
88
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
89
+ if optimization_level == 0:
90
+ init = None
91
+ if (
92
+ pass_manager_config.initial_layout
93
+ or pass_manager_config.coupling_map
94
+ or (
95
+ pass_manager_config.target is not None
96
+ and pass_manager_config.target.build_coupling_map() is not None
97
+ )
98
+ ):
99
+ init = common.generate_unroll_3q(
100
+ pass_manager_config.target,
101
+ pass_manager_config.basis_gates,
102
+ pass_manager_config.approximation_degree,
103
+ pass_manager_config.unitary_synthesis_method,
104
+ pass_manager_config.unitary_synthesis_plugin_config,
105
+ pass_manager_config.hls_config,
106
+ pass_manager_config.qubits_initially_zero,
107
+ )
108
+ elif optimization_level == 1:
109
+ init = PassManager()
110
+ if (
111
+ pass_manager_config.initial_layout
112
+ or pass_manager_config.coupling_map
113
+ or (
114
+ pass_manager_config.target is not None
115
+ and pass_manager_config.target.build_coupling_map() is not None
116
+ )
117
+ ):
118
+ init += common.generate_unroll_3q(
119
+ pass_manager_config.target,
120
+ pass_manager_config.basis_gates,
121
+ pass_manager_config.approximation_degree,
122
+ pass_manager_config.unitary_synthesis_method,
123
+ pass_manager_config.unitary_synthesis_plugin_config,
124
+ pass_manager_config.hls_config,
125
+ pass_manager_config.qubits_initially_zero,
126
+ )
127
+ init.append(
128
+ [
129
+ InverseCancellation(
130
+ [
131
+ CXGate(),
132
+ ECRGate(),
133
+ CZGate(),
134
+ CYGate(),
135
+ XGate(),
136
+ YGate(),
137
+ ZGate(),
138
+ HGate(),
139
+ SwapGate(),
140
+ (TGate(), TdgGate()),
141
+ (SGate(), SdgGate()),
142
+ (SXGate(), SXdgGate()),
143
+ ]
144
+ ),
145
+ ContractIdleWiresInControlFlow(),
146
+ ]
147
+ )
148
+
149
+ elif optimization_level in {2, 3}:
150
+ init = common.generate_unroll_3q(
151
+ pass_manager_config.target,
152
+ pass_manager_config.basis_gates,
153
+ pass_manager_config.approximation_degree,
154
+ pass_manager_config.unitary_synthesis_method,
155
+ pass_manager_config.unitary_synthesis_plugin_config,
156
+ pass_manager_config.hls_config,
157
+ pass_manager_config.qubits_initially_zero,
158
+ )
159
+ if pass_manager_config.routing_method != "none":
160
+ init.append(ElidePermutations())
161
+ init.append(
162
+ [
163
+ RemoveDiagonalGatesBeforeMeasure(),
164
+ # Target not set on RemoveIdentityEquivalent because we haven't applied a Layout
165
+ # yet so doing anything relative to an error rate in the target is not valid.
166
+ RemoveIdentityEquivalent(
167
+ approximation_degree=pass_manager_config.approximation_degree
168
+ ),
169
+ InverseCancellation(
170
+ [
171
+ CXGate(),
172
+ ECRGate(),
173
+ CZGate(),
174
+ CYGate(),
175
+ XGate(),
176
+ YGate(),
177
+ ZGate(),
178
+ HGate(),
179
+ SwapGate(),
180
+ (TGate(), TdgGate()),
181
+ (SGate(), SdgGate()),
182
+ (SXGate(), SXdgGate()),
183
+ ]
184
+ ),
185
+ ContractIdleWiresInControlFlow(),
186
+ ]
187
+ )
188
+ init.append(CommutativeCancellation())
189
+ init.append(ConsolidateBlocks())
190
+ # If approximation degree is None that indicates a request to approximate up to the
191
+ # error rates in the target. However, in the init stage we don't yet know the target
192
+ # qubits being used to figure out the fidelity so just use the default fidelity parameter
193
+ # in this case.
194
+ split_2q_unitaries_swap = False
195
+ if pass_manager_config.routing_method != "none":
196
+ split_2q_unitaries_swap = True
197
+ if pass_manager_config.approximation_degree is not None:
198
+ init.append(
199
+ Split2QUnitaries(
200
+ pass_manager_config.approximation_degree, split_swap=split_2q_unitaries_swap
201
+ )
202
+ )
203
+ else:
204
+ init.append(Split2QUnitaries(split_swap=split_2q_unitaries_swap))
205
+ else:
206
+ raise TranspilerError(f"Invalid optimization level {optimization_level}")
207
+ return init
208
+
209
+
210
+ class DefaultTranslationPassManager(PassManagerStagePlugin):
211
+ """Plugin class for the default-method translation stage."""
212
+
213
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
214
+ # For now, this is just a wrapper around the `BasisTranslator`. It might expand in the
215
+ # future if we want to change the default method to do more context-aware switching, or to
216
+ # start transitioning the default method without breaking the semantics of the default
217
+ # string referring to the `BasisTranslator`.
218
+ return BasisTranslatorPassManager().pass_manager(pass_manager_config, optimization_level)
219
+
220
+
221
+ class BasisTranslatorPassManager(PassManagerStagePlugin):
222
+ """Plugin class for translation stage with :class:`~.BasisTranslator`"""
223
+
224
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
225
+ return common.generate_translation_passmanager(
226
+ pass_manager_config.target,
227
+ basis_gates=pass_manager_config.basis_gates,
228
+ method="translator",
229
+ approximation_degree=pass_manager_config.approximation_degree,
230
+ coupling_map=pass_manager_config.coupling_map,
231
+ unitary_synthesis_method=pass_manager_config.unitary_synthesis_method,
232
+ unitary_synthesis_plugin_config=pass_manager_config.unitary_synthesis_plugin_config,
233
+ hls_config=pass_manager_config.hls_config,
234
+ qubits_initially_zero=pass_manager_config.qubits_initially_zero,
235
+ )
236
+
237
+
238
+ class UnitarySynthesisPassManager(PassManagerStagePlugin):
239
+ """Plugin class for translation stage with :class:`~.UnitarySynthesis`"""
240
+
241
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
242
+ return common.generate_translation_passmanager(
243
+ pass_manager_config.target,
244
+ basis_gates=pass_manager_config.basis_gates,
245
+ method="synthesis",
246
+ approximation_degree=pass_manager_config.approximation_degree,
247
+ coupling_map=pass_manager_config.coupling_map,
248
+ unitary_synthesis_method=pass_manager_config.unitary_synthesis_method,
249
+ unitary_synthesis_plugin_config=pass_manager_config.unitary_synthesis_plugin_config,
250
+ hls_config=pass_manager_config.hls_config,
251
+ qubits_initially_zero=pass_manager_config.qubits_initially_zero,
252
+ )
253
+
254
+
255
+ class DefaultRoutingPassManager(PassManagerStagePlugin):
256
+ """Plugin class for the "default" routing stage implementation."""
257
+
258
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
259
+ # The Sabre-based PM is the default implementation currently, but semantically the "default"
260
+ # plugin has more scope to change its logic than one called "sabre". In practice, we don't
261
+ # run the actually `SabreSwap` logic from this pass most of the time, because we do that
262
+ # during default layout; we're looking for the VF2PostLayout stuff mostly.
263
+ return SabreSwapPassManager().pass_manager(pass_manager_config, optimization_level)
264
+
265
+
266
+ class BasicSwapPassManager(PassManagerStagePlugin):
267
+ """Plugin class for routing stage with :class:`~.BasicSwap`"""
268
+
269
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
270
+ """Build routing stage PassManager."""
271
+ target = pass_manager_config.target
272
+ coupling_map = pass_manager_config.coupling_map
273
+ if target is None:
274
+ routing_pass = BasicSwap(coupling_map)
275
+ else:
276
+ routing_pass = BasicSwap(target)
277
+
278
+ vf2_call_limit, vf2_max_trials = common.get_vf2_limits(
279
+ optimization_level,
280
+ pass_manager_config.layout_method,
281
+ pass_manager_config.initial_layout,
282
+ )
283
+ if optimization_level == 0:
284
+ return common.generate_routing_passmanager(
285
+ routing_pass,
286
+ target,
287
+ coupling_map=coupling_map,
288
+ seed_transpiler=-1,
289
+ use_barrier_before_measurement=True,
290
+ )
291
+ if optimization_level == 1:
292
+ return common.generate_routing_passmanager(
293
+ routing_pass,
294
+ target,
295
+ coupling_map,
296
+ vf2_call_limit=vf2_call_limit,
297
+ vf2_max_trials=vf2_max_trials,
298
+ seed_transpiler=-1,
299
+ check_trivial=True,
300
+ use_barrier_before_measurement=True,
301
+ )
302
+ if optimization_level == 2:
303
+ return common.generate_routing_passmanager(
304
+ routing_pass,
305
+ target,
306
+ coupling_map=coupling_map,
307
+ vf2_call_limit=vf2_call_limit,
308
+ vf2_max_trials=vf2_max_trials,
309
+ seed_transpiler=-1,
310
+ use_barrier_before_measurement=True,
311
+ )
312
+ if optimization_level == 3:
313
+ return common.generate_routing_passmanager(
314
+ routing_pass,
315
+ target,
316
+ coupling_map=coupling_map,
317
+ vf2_call_limit=vf2_call_limit,
318
+ vf2_max_trials=vf2_max_trials,
319
+ seed_transpiler=-1,
320
+ use_barrier_before_measurement=True,
321
+ )
322
+ raise TranspilerError(f"Invalid optimization level specified: {optimization_level}")
323
+
324
+
325
+ class LookaheadSwapPassManager(PassManagerStagePlugin):
326
+ """Plugin class for routing stage with :class:`~.LookaheadSwap`"""
327
+
328
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
329
+ """Build routing stage PassManager."""
330
+ target = pass_manager_config.target
331
+ coupling_map = pass_manager_config.coupling_map
332
+ coupling_map_routing = target
333
+ if coupling_map_routing is None:
334
+ coupling_map_routing = coupling_map
335
+ vf2_call_limit, vf2_max_trials = common.get_vf2_limits(
336
+ optimization_level,
337
+ pass_manager_config.layout_method,
338
+ pass_manager_config.initial_layout,
339
+ )
340
+ if optimization_level == 0:
341
+ routing_pass = LookaheadSwap(coupling_map_routing, search_depth=2, search_width=2)
342
+ return common.generate_routing_passmanager(
343
+ routing_pass,
344
+ target,
345
+ coupling_map=coupling_map,
346
+ seed_transpiler=-1,
347
+ use_barrier_before_measurement=True,
348
+ )
349
+ if optimization_level == 1:
350
+ routing_pass = LookaheadSwap(coupling_map_routing, search_depth=4, search_width=4)
351
+ return common.generate_routing_passmanager(
352
+ routing_pass,
353
+ target,
354
+ coupling_map,
355
+ vf2_call_limit=vf2_call_limit,
356
+ vf2_max_trials=vf2_max_trials,
357
+ seed_transpiler=-1,
358
+ check_trivial=True,
359
+ use_barrier_before_measurement=True,
360
+ )
361
+ if optimization_level == 2:
362
+ routing_pass = LookaheadSwap(coupling_map_routing, search_depth=5, search_width=6)
363
+ return common.generate_routing_passmanager(
364
+ routing_pass,
365
+ target,
366
+ coupling_map=coupling_map,
367
+ vf2_call_limit=vf2_call_limit,
368
+ vf2_max_trials=vf2_max_trials,
369
+ seed_transpiler=-1,
370
+ use_barrier_before_measurement=True,
371
+ )
372
+ if optimization_level == 3:
373
+ routing_pass = LookaheadSwap(coupling_map_routing, search_depth=5, search_width=6)
374
+ return common.generate_routing_passmanager(
375
+ routing_pass,
376
+ target,
377
+ coupling_map=coupling_map,
378
+ vf2_call_limit=vf2_call_limit,
379
+ vf2_max_trials=vf2_max_trials,
380
+ seed_transpiler=-1,
381
+ use_barrier_before_measurement=True,
382
+ )
383
+ raise TranspilerError(f"Invalid optimization level specified: {optimization_level}")
384
+
385
+
386
+ class SabreSwapPassManager(PassManagerStagePlugin):
387
+ """Plugin class for routing stage with :class:`~.SabreSwap`"""
388
+
389
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
390
+ """Build routing stage PassManager."""
391
+ seed_transpiler = pass_manager_config.seed_transpiler
392
+ target = pass_manager_config.target
393
+ coupling_map = pass_manager_config.coupling_map
394
+ coupling_map_routing = target
395
+ if coupling_map_routing is None:
396
+ coupling_map_routing = coupling_map
397
+ vf2_call_limit, vf2_max_trials = common.get_vf2_limits(
398
+ optimization_level,
399
+ pass_manager_config.layout_method,
400
+ pass_manager_config.initial_layout,
401
+ )
402
+ if optimization_level == 0:
403
+ trial_count = _get_trial_count(5)
404
+ routing_pass = SabreSwap(
405
+ coupling_map_routing,
406
+ heuristic="basic",
407
+ seed=seed_transpiler,
408
+ trials=trial_count,
409
+ )
410
+ return common.generate_routing_passmanager(
411
+ routing_pass,
412
+ target,
413
+ coupling_map=coupling_map,
414
+ seed_transpiler=-1,
415
+ use_barrier_before_measurement=True,
416
+ )
417
+ if optimization_level == 1:
418
+ trial_count = _get_trial_count(5)
419
+ routing_pass = SabreSwap(
420
+ coupling_map_routing,
421
+ heuristic="decay",
422
+ seed=seed_transpiler,
423
+ trials=trial_count,
424
+ )
425
+ return common.generate_routing_passmanager(
426
+ routing_pass,
427
+ target,
428
+ coupling_map,
429
+ vf2_call_limit=vf2_call_limit,
430
+ vf2_max_trials=vf2_max_trials,
431
+ seed_transpiler=-1,
432
+ check_trivial=True,
433
+ use_barrier_before_measurement=True,
434
+ )
435
+ if optimization_level == 2:
436
+ trial_count = _get_trial_count(20)
437
+
438
+ routing_pass = SabreSwap(
439
+ coupling_map_routing,
440
+ heuristic="decay",
441
+ seed=seed_transpiler,
442
+ trials=trial_count,
443
+ )
444
+ return common.generate_routing_passmanager(
445
+ routing_pass,
446
+ target,
447
+ coupling_map=coupling_map,
448
+ vf2_call_limit=vf2_call_limit,
449
+ vf2_max_trials=vf2_max_trials,
450
+ seed_transpiler=-1,
451
+ use_barrier_before_measurement=True,
452
+ )
453
+ if optimization_level == 3:
454
+ trial_count = _get_trial_count(20)
455
+ routing_pass = SabreSwap(
456
+ coupling_map_routing,
457
+ heuristic="decay",
458
+ seed=seed_transpiler,
459
+ trials=trial_count,
460
+ )
461
+ return common.generate_routing_passmanager(
462
+ routing_pass,
463
+ target,
464
+ coupling_map=coupling_map,
465
+ vf2_call_limit=vf2_call_limit,
466
+ vf2_max_trials=vf2_max_trials,
467
+ seed_transpiler=-1,
468
+ use_barrier_before_measurement=True,
469
+ )
470
+ raise TranspilerError(f"Invalid optimization level specified: {optimization_level}")
471
+
472
+
473
+ class NoneRoutingPassManager(PassManagerStagePlugin):
474
+ """Plugin class for routing stage with error on routing."""
475
+
476
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
477
+ """Build routing stage PassManager."""
478
+ target = pass_manager_config.target
479
+ coupling_map = pass_manager_config.coupling_map
480
+ routing_pass = Error(
481
+ msg="No routing method selected, but circuit is not routed to device. "
482
+ "CheckMap Error: {check_map_msg}",
483
+ action="raise",
484
+ )
485
+ return common.generate_routing_passmanager(
486
+ routing_pass,
487
+ target,
488
+ coupling_map=coupling_map,
489
+ seed_transpiler=-1,
490
+ use_barrier_before_measurement=True,
491
+ )
492
+
493
+
494
+ class OptimizationPassManager(PassManagerStagePlugin):
495
+ """Plugin class for optimization stage"""
496
+
497
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
498
+ """Build pass manager for optimization stage."""
499
+ # Obtain the translation method required for this pass to work
500
+ translation_method = pass_manager_config.translation_method or "default"
501
+ optimization = PassManager()
502
+ if optimization_level != 0:
503
+ plugin_manager = PassManagerStagePluginManager()
504
+ _depth_check = [Depth(recurse=True), FixedPoint("depth")]
505
+ _size_check = [Size(recurse=True), FixedPoint("size")]
506
+ # Minimum point check for optimization level 3.
507
+ _minimum_point_check = [
508
+ Depth(recurse=True),
509
+ Size(recurse=True),
510
+ MinimumPoint(["depth", "size"], "optimization_loop"),
511
+ ]
512
+
513
+ def _opt_control(property_set):
514
+ return (not property_set["depth_fixed_point"]) or (
515
+ not property_set["size_fixed_point"]
516
+ )
517
+
518
+ translation = plugin_manager.get_passmanager_stage(
519
+ "translation",
520
+ translation_method,
521
+ pass_manager_config,
522
+ optimization_level=optimization_level,
523
+ )
524
+
525
+ # Basic steps for optimization level 1:
526
+ # 1. Optimize1qGatesDecomposition
527
+ # 2. InverseCancellation
528
+ if optimization_level == 1:
529
+
530
+ _opt = [
531
+ Optimize1qGatesDecomposition(
532
+ basis=pass_manager_config.basis_gates, target=pass_manager_config.target
533
+ ),
534
+ InverseCancellation(
535
+ [
536
+ CXGate(),
537
+ ECRGate(),
538
+ CZGate(),
539
+ CYGate(),
540
+ XGate(),
541
+ YGate(),
542
+ ZGate(),
543
+ HGate(),
544
+ SwapGate(),
545
+ (TGate(), TdgGate()),
546
+ (SGate(), SdgGate()),
547
+ (SXGate(), SXdgGate()),
548
+ ]
549
+ ),
550
+ ContractIdleWiresInControlFlow(),
551
+ ]
552
+
553
+ # Basic steps for optimization level 2:
554
+ # 1. RemoveIdentityEquivalent
555
+ # 2. Optimize1qGatesDecomposition
556
+ # 3. CommutativeCancellation
557
+ elif optimization_level == 2:
558
+ _opt = [
559
+ RemoveIdentityEquivalent(
560
+ approximation_degree=pass_manager_config.approximation_degree,
561
+ target=pass_manager_config.target,
562
+ ),
563
+ Optimize1qGatesDecomposition(
564
+ basis=pass_manager_config.basis_gates, target=pass_manager_config.target
565
+ ),
566
+ CommutativeCancellation(target=pass_manager_config.target),
567
+ ContractIdleWiresInControlFlow(),
568
+ ]
569
+
570
+ # Basic steps for optimization level 3:
571
+ # 1. ConsolidateBlocks
572
+ # 2. UnitarySynthesis
573
+ # 3. RemoveIdentityEquivalent
574
+ # 4. Optimize1qGatesDecomposition
575
+ # 5. CommutativeCancellation
576
+ elif optimization_level == 3:
577
+ _opt = [
578
+ ConsolidateBlocks(
579
+ basis_gates=pass_manager_config.basis_gates,
580
+ target=pass_manager_config.target,
581
+ approximation_degree=pass_manager_config.approximation_degree,
582
+ ),
583
+ UnitarySynthesis(
584
+ pass_manager_config.basis_gates,
585
+ approximation_degree=pass_manager_config.approximation_degree,
586
+ coupling_map=pass_manager_config.coupling_map,
587
+ method=pass_manager_config.unitary_synthesis_method,
588
+ plugin_config=pass_manager_config.unitary_synthesis_plugin_config,
589
+ target=pass_manager_config.target,
590
+ ),
591
+ RemoveIdentityEquivalent(
592
+ approximation_degree=pass_manager_config.approximation_degree,
593
+ target=pass_manager_config.target,
594
+ ),
595
+ Optimize1qGatesDecomposition(
596
+ basis=pass_manager_config.basis_gates, target=pass_manager_config.target
597
+ ),
598
+ CommutativeCancellation(target=pass_manager_config.target),
599
+ ContractIdleWiresInControlFlow(),
600
+ ]
601
+
602
+ def _opt_control(property_set):
603
+ return not property_set["optimization_loop_minimum_point"]
604
+
605
+ else:
606
+ raise TranspilerError(f"Invalid optimization_level: {optimization_level}")
607
+
608
+ unroll = translation.to_flow_controller()
609
+
610
+ # Build nested flow controllers
611
+ def _unroll_condition(property_set):
612
+ return not property_set["all_gates_in_basis"]
613
+
614
+ # Check if any gate is not in the basis, and if so, run unroll/translation passes
615
+ _unroll_if_out_of_basis = [
616
+ GatesInBasis(pass_manager_config.basis_gates, target=pass_manager_config.target),
617
+ ConditionalController(unroll, condition=_unroll_condition),
618
+ ]
619
+
620
+ if optimization_level == 3:
621
+ optimization.append(_minimum_point_check)
622
+ elif optimization_level == 2:
623
+ optimization.append(
624
+ [
625
+ ConsolidateBlocks(
626
+ basis_gates=pass_manager_config.basis_gates,
627
+ target=pass_manager_config.target,
628
+ approximation_degree=pass_manager_config.approximation_degree,
629
+ ),
630
+ UnitarySynthesis(
631
+ pass_manager_config.basis_gates,
632
+ approximation_degree=pass_manager_config.approximation_degree,
633
+ coupling_map=pass_manager_config.coupling_map,
634
+ method=pass_manager_config.unitary_synthesis_method,
635
+ plugin_config=pass_manager_config.unitary_synthesis_plugin_config,
636
+ target=pass_manager_config.target,
637
+ ),
638
+ ]
639
+ )
640
+ optimization.append(_depth_check + _size_check)
641
+ else:
642
+ optimization.append(_depth_check + _size_check)
643
+ opt_loop = (
644
+ _opt + _unroll_if_out_of_basis + _minimum_point_check
645
+ if optimization_level == 3
646
+ else _opt + _unroll_if_out_of_basis + _depth_check + _size_check
647
+ )
648
+ optimization.append(DoWhileController(opt_loop, do_while=_opt_control))
649
+ return optimization
650
+ else:
651
+ return None
652
+
653
+
654
+ class AlapSchedulingPassManager(PassManagerStagePlugin):
655
+ """Plugin class for alap scheduling stage."""
656
+
657
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
658
+ """Build scheduling stage PassManager"""
659
+
660
+ instruction_durations = pass_manager_config.instruction_durations
661
+ scheduling_method = pass_manager_config.scheduling_method
662
+ timing_constraints = pass_manager_config.timing_constraints
663
+ target = pass_manager_config.target
664
+
665
+ return common.generate_scheduling(
666
+ instruction_durations, scheduling_method, timing_constraints, target
667
+ )
668
+
669
+
670
+ class AsapSchedulingPassManager(PassManagerStagePlugin):
671
+ """Plugin class for alap scheduling stage."""
672
+
673
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
674
+ """Build scheduling stage PassManager"""
675
+
676
+ instruction_durations = pass_manager_config.instruction_durations
677
+ scheduling_method = pass_manager_config.scheduling_method
678
+ timing_constraints = pass_manager_config.timing_constraints
679
+ target = pass_manager_config.target
680
+
681
+ return common.generate_scheduling(
682
+ instruction_durations, scheduling_method, timing_constraints, target
683
+ )
684
+
685
+
686
+ class DefaultSchedulingPassManager(PassManagerStagePlugin):
687
+ """Plugin class for alap scheduling stage."""
688
+
689
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
690
+ """Build scheduling stage PassManager"""
691
+
692
+ instruction_durations = pass_manager_config.instruction_durations
693
+ scheduling_method = None
694
+ timing_constraints = pass_manager_config.timing_constraints or TimingConstraints()
695
+ target = pass_manager_config.target
696
+
697
+ return common.generate_scheduling(
698
+ instruction_durations, scheduling_method, timing_constraints, target
699
+ )
700
+
701
+
702
+ class DefaultLayoutPassManager(PassManagerStagePlugin):
703
+ """Plugin class for default layout stage."""
704
+
705
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
706
+ _given_layout = SetLayout(pass_manager_config.initial_layout)
707
+
708
+ def _choose_layout_condition(property_set):
709
+ return not property_set["layout"]
710
+
711
+ def _layout_not_perfect(property_set):
712
+ """Return ``True`` if the first attempt at layout has been checked and found to be
713
+ imperfect. In this case, perfection means "does not require any swap routing"."""
714
+ return property_set["is_swap_mapped"] is not None and not property_set["is_swap_mapped"]
715
+
716
+ def _vf2_match_not_found(property_set):
717
+ # If a layout hasn't been set by the time we run vf2 layout we need to
718
+ # run layout
719
+ if property_set["layout"] is None:
720
+ return True
721
+ # if VF2 layout stopped for any reason other than solution found we need
722
+ # to run layout since VF2 didn't converge.
723
+ return (
724
+ property_set["VF2Layout_stop_reason"] is not None
725
+ and property_set["VF2Layout_stop_reason"] is not VF2LayoutStopReason.SOLUTION_FOUND
726
+ )
727
+
728
+ def _swap_mapped(property_set):
729
+ return property_set["final_layout"] is None
730
+
731
+ if pass_manager_config.target is None:
732
+ coupling_map = pass_manager_config.coupling_map
733
+ else:
734
+ coupling_map = pass_manager_config.target
735
+
736
+ layout = PassManager()
737
+ layout.append(_given_layout)
738
+ if optimization_level == 0:
739
+ layout.append(
740
+ ConditionalController(
741
+ TrivialLayout(coupling_map), condition=_choose_layout_condition
742
+ )
743
+ )
744
+ layout += common.generate_embed_passmanager(coupling_map)
745
+ return layout
746
+ elif optimization_level == 1:
747
+ layout.append(
748
+ ConditionalController(
749
+ [TrivialLayout(coupling_map), CheckMap(coupling_map)],
750
+ condition=_choose_layout_condition,
751
+ )
752
+ )
753
+ choose_layout_1 = VF2Layout(
754
+ coupling_map=pass_manager_config.coupling_map,
755
+ seed=-1,
756
+ call_limit=int(5e4), # Set call limit to ~100ms with rustworkx 0.10.2
757
+ target=pass_manager_config.target,
758
+ max_trials=2500, # Limits layout scoring to < 600ms on ~400 qubit devices
759
+ )
760
+ layout.append(ConditionalController(choose_layout_1, condition=_layout_not_perfect))
761
+
762
+ trial_count = _get_trial_count(5)
763
+
764
+ choose_layout_2 = SabreLayout(
765
+ coupling_map,
766
+ max_iterations=2,
767
+ seed=pass_manager_config.seed_transpiler,
768
+ swap_trials=trial_count,
769
+ layout_trials=trial_count,
770
+ skip_routing=pass_manager_config.routing_method not in (None, "default", "sabre"),
771
+ )
772
+ layout.append(
773
+ ConditionalController(
774
+ [
775
+ BarrierBeforeFinalMeasurements(
776
+ "qiskit.transpiler.internal.routing.protection.barrier"
777
+ ),
778
+ choose_layout_2,
779
+ ],
780
+ condition=_vf2_match_not_found,
781
+ )
782
+ )
783
+ elif optimization_level == 2:
784
+ choose_layout_0 = VF2Layout(
785
+ coupling_map=pass_manager_config.coupling_map,
786
+ seed=-1,
787
+ call_limit=int(5e6), # Set call limit to ~10s with rustworkx 0.10.2
788
+ target=pass_manager_config.target,
789
+ max_trials=2500, # Limits layout scoring to < 600ms on ~400 qubit devices
790
+ )
791
+ layout.append(
792
+ ConditionalController(choose_layout_0, condition=_choose_layout_condition)
793
+ )
794
+
795
+ trial_count = _get_trial_count(20)
796
+
797
+ choose_layout_1 = SabreLayout(
798
+ coupling_map,
799
+ max_iterations=2,
800
+ seed=pass_manager_config.seed_transpiler,
801
+ swap_trials=trial_count,
802
+ layout_trials=trial_count,
803
+ skip_routing=pass_manager_config.routing_method not in (None, "default", "sabre"),
804
+ )
805
+ layout.append(
806
+ ConditionalController(
807
+ [
808
+ BarrierBeforeFinalMeasurements(
809
+ "qiskit.transpiler.internal.routing.protection.barrier"
810
+ ),
811
+ choose_layout_1,
812
+ ],
813
+ condition=_vf2_match_not_found,
814
+ )
815
+ )
816
+ elif optimization_level == 3:
817
+ choose_layout_0 = VF2Layout(
818
+ coupling_map=pass_manager_config.coupling_map,
819
+ seed=-1,
820
+ call_limit=int(3e7), # Set call limit to ~60s with rustworkx 0.10.2
821
+ target=pass_manager_config.target,
822
+ max_trials=250000, # Limits layout scoring to < 60s on ~400 qubit devices
823
+ )
824
+ layout.append(
825
+ ConditionalController(choose_layout_0, condition=_choose_layout_condition)
826
+ )
827
+
828
+ trial_count = _get_trial_count(20)
829
+
830
+ choose_layout_1 = SabreLayout(
831
+ coupling_map,
832
+ max_iterations=4,
833
+ seed=pass_manager_config.seed_transpiler,
834
+ swap_trials=trial_count,
835
+ layout_trials=trial_count,
836
+ skip_routing=pass_manager_config.routing_method not in (None, "default", "sabre"),
837
+ )
838
+ layout.append(
839
+ ConditionalController(
840
+ [
841
+ BarrierBeforeFinalMeasurements(
842
+ "qiskit.transpiler.internal.routing.protection.barrier"
843
+ ),
844
+ choose_layout_1,
845
+ ],
846
+ condition=_vf2_match_not_found,
847
+ )
848
+ )
849
+ else:
850
+ raise TranspilerError(f"Invalid optimization level: {optimization_level}")
851
+
852
+ embed = common.generate_embed_passmanager(coupling_map)
853
+ layout.append(ConditionalController(embed.to_flow_controller(), condition=_swap_mapped))
854
+ return layout
855
+
856
+
857
+ class TrivialLayoutPassManager(PassManagerStagePlugin):
858
+ """Plugin class for trivial layout stage."""
859
+
860
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
861
+ _given_layout = SetLayout(pass_manager_config.initial_layout)
862
+
863
+ def _choose_layout_condition(property_set):
864
+ return not property_set["layout"]
865
+
866
+ if pass_manager_config.target is None:
867
+ coupling_map = pass_manager_config.coupling_map
868
+ else:
869
+ coupling_map = pass_manager_config.target
870
+
871
+ layout = PassManager()
872
+ layout.append(_given_layout)
873
+ layout.append(
874
+ ConditionalController(TrivialLayout(coupling_map), condition=_choose_layout_condition)
875
+ )
876
+ layout += common.generate_embed_passmanager(coupling_map)
877
+ return layout
878
+
879
+
880
+ class DenseLayoutPassManager(PassManagerStagePlugin):
881
+ """Plugin class for dense layout stage."""
882
+
883
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
884
+ _given_layout = SetLayout(pass_manager_config.initial_layout)
885
+
886
+ def _choose_layout_condition(property_set):
887
+ return not property_set["layout"]
888
+
889
+ if pass_manager_config.target is None:
890
+ coupling_map = pass_manager_config.coupling_map
891
+ else:
892
+ coupling_map = pass_manager_config.target
893
+
894
+ layout = PassManager()
895
+ layout.append(_given_layout)
896
+ layout.append(
897
+ ConditionalController(
898
+ DenseLayout(
899
+ coupling_map=pass_manager_config.coupling_map,
900
+ target=pass_manager_config.target,
901
+ ),
902
+ condition=_choose_layout_condition,
903
+ )
904
+ )
905
+ layout += common.generate_embed_passmanager(coupling_map)
906
+ return layout
907
+
908
+
909
+ class SabreLayoutPassManager(PassManagerStagePlugin):
910
+ """Plugin class for sabre layout stage."""
911
+
912
+ def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
913
+ _given_layout = SetLayout(pass_manager_config.initial_layout)
914
+
915
+ def _choose_layout_condition(property_set):
916
+ return not property_set["layout"]
917
+
918
+ def _swap_mapped(property_set):
919
+ return property_set["final_layout"] is None
920
+
921
+ if pass_manager_config.target is None:
922
+ coupling_map = pass_manager_config.coupling_map
923
+ else:
924
+ coupling_map = pass_manager_config.target
925
+
926
+ layout = PassManager()
927
+ layout.append(_given_layout)
928
+ if optimization_level == 0:
929
+ trial_count = _get_trial_count(5)
930
+
931
+ layout_pass = SabreLayout(
932
+ coupling_map,
933
+ max_iterations=1,
934
+ seed=pass_manager_config.seed_transpiler,
935
+ swap_trials=trial_count,
936
+ layout_trials=trial_count,
937
+ skip_routing=pass_manager_config.routing_method not in (None, "default", "sabre"),
938
+ )
939
+ elif optimization_level == 1:
940
+ trial_count = _get_trial_count(5)
941
+
942
+ layout_pass = SabreLayout(
943
+ coupling_map,
944
+ max_iterations=2,
945
+ seed=pass_manager_config.seed_transpiler,
946
+ swap_trials=trial_count,
947
+ layout_trials=trial_count,
948
+ skip_routing=pass_manager_config.routing_method not in (None, "default", "sabre"),
949
+ )
950
+ elif optimization_level == 2:
951
+ trial_count = _get_trial_count(20)
952
+
953
+ layout_pass = SabreLayout(
954
+ coupling_map,
955
+ max_iterations=2,
956
+ seed=pass_manager_config.seed_transpiler,
957
+ swap_trials=trial_count,
958
+ layout_trials=trial_count,
959
+ skip_routing=pass_manager_config.routing_method not in (None, "default", "sabre"),
960
+ )
961
+ elif optimization_level == 3:
962
+ trial_count = _get_trial_count(20)
963
+
964
+ layout_pass = SabreLayout(
965
+ coupling_map,
966
+ max_iterations=4,
967
+ seed=pass_manager_config.seed_transpiler,
968
+ swap_trials=trial_count,
969
+ layout_trials=trial_count,
970
+ skip_routing=pass_manager_config.routing_method not in (None, "default", "sabre"),
971
+ )
972
+ else:
973
+ raise TranspilerError(f"Invalid optimization level: {optimization_level}")
974
+ layout.append(
975
+ ConditionalController(
976
+ [
977
+ BarrierBeforeFinalMeasurements(
978
+ "qiskit.transpiler.internal.routing.protection.barrier"
979
+ ),
980
+ layout_pass,
981
+ ],
982
+ condition=_choose_layout_condition,
983
+ )
984
+ )
985
+ embed = common.generate_embed_passmanager(coupling_map)
986
+ layout.append(ConditionalController(embed.to_flow_controller(), condition=_swap_mapped))
987
+ return layout
988
+
989
+
990
+ def _get_trial_count(default_trials=5):
991
+ if CONFIG.get("sabre_all_threads", None) or os.getenv("QISKIT_SABRE_ALL_THREADS"):
992
+ return max(default_num_processes(), default_trials)
993
+ return default_trials