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,443 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2024.
4
+ #
5
+ # This code is licensed under the Apache License, Version 2.0. You may
6
+ # obtain a copy of this license in the LICENSE.txt file in the root directory
7
+ # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
+ #
9
+ # Any modifications or derivative works of this code must retain this
10
+ # copyright notice, and modified files need to carry a notice indicating
11
+ # that they have been altered from the originals.
12
+
13
+ """
14
+ Preset pass manager generation function
15
+ """
16
+ import copy
17
+ import warnings
18
+
19
+ from qiskit.circuit.controlflow import CONTROL_FLOW_OP_NAMES, get_control_flow_name_mapping
20
+ from qiskit.circuit.library.standard_gates import get_standard_gate_name_mapping
21
+ from qiskit.circuit import Qubit
22
+ from qiskit.providers.backend import Backend
23
+ from qiskit.transpiler.coupling import CouplingMap
24
+ from qiskit.transpiler.exceptions import TranspilerError
25
+ from qiskit.transpiler.instruction_durations import InstructionDurations
26
+ from qiskit.transpiler.layout import Layout
27
+ from qiskit.transpiler.passmanager_config import PassManagerConfig
28
+ from qiskit.transpiler.preset_passmanagers.common import is_clifford_t_basis
29
+ from qiskit.transpiler.target import Target, _FakeTarget
30
+ from qiskit.transpiler.timing_constraints import TimingConstraints
31
+
32
+ from .level0 import level_0_pass_manager
33
+ from .level1 import level_1_pass_manager
34
+ from .level2 import level_2_pass_manager
35
+ from .level3 import level_3_pass_manager
36
+
37
+
38
+ OVER_3Q_GATES = ["ccx", "ccz", "cswap", "rccx", "c3x", "c3sx", "rc3x"]
39
+
40
+
41
+ def generate_preset_pass_manager(
42
+ optimization_level=2,
43
+ backend=None,
44
+ target=None,
45
+ basis_gates=None,
46
+ coupling_map=None,
47
+ initial_layout=None,
48
+ layout_method=None,
49
+ routing_method=None,
50
+ translation_method=None,
51
+ scheduling_method=None,
52
+ approximation_degree=1.0,
53
+ seed_transpiler=None,
54
+ unitary_synthesis_method="default",
55
+ unitary_synthesis_plugin_config=None,
56
+ hls_config=None,
57
+ init_method=None,
58
+ optimization_method=None,
59
+ dt=None,
60
+ qubits_initially_zero=True,
61
+ *,
62
+ _skip_target=False,
63
+ ):
64
+ """Generate a preset :class:`~.PassManager`
65
+
66
+ This function is used to quickly generate a preset pass manager. Preset pass
67
+ managers are the default pass managers used by the :func:`~.transpile`
68
+ function. This function provides a convenient and simple method to construct
69
+ a standalone :class:`~.PassManager` object that mirrors what the :func:`~.transpile`
70
+ function internally builds and uses.
71
+
72
+ The target constraints for the pass manager construction can be specified through a :class:`.Target`
73
+ instance, a :class:`.BackendV2` instance, or via loose constraints
74
+ (``basis_gates``, ``coupling_map``, or ``dt``).
75
+ The order of priorities for target constraints works as follows: if a ``target``
76
+ input is provided, it will take priority over any ``backend`` input or loose constraints.
77
+ If a ``backend`` is provided together with any loose constraint
78
+ from the list above, the loose constraint will take priority over the corresponding backend
79
+ constraint. This behavior is summarized in the table below. The first column
80
+ in the table summarizes the potential user-provided constraints, and each cell shows whether
81
+ the priority is assigned to that specific constraint input or another input
82
+ (`target`/`backend(V1)`/`backend(V2)`).
83
+
84
+ ============================ ========= ========================
85
+ User Provided target backend(V2)
86
+ ============================ ========= ========================
87
+ **basis_gates** target basis_gates
88
+ **coupling_map** target coupling_map
89
+ **dt** target dt
90
+ ============================ ========= ========================
91
+
92
+ Args:
93
+ optimization_level (int): The optimization level to generate a
94
+ :class:`~.StagedPassManager` for. By default optimization level 2
95
+ is used if this is not specified. This can be 0, 1, 2, or 3. Higher
96
+ levels generate potentially more optimized circuits, at the expense
97
+ of longer transpilation time:
98
+
99
+ * 0: no optimization
100
+ * 1: light optimization
101
+ * 2: heavy optimization
102
+ * 3: even heavier optimization
103
+
104
+ backend (Backend): An optional backend object which can be used as the
105
+ source of the default values for the ``basis_gates``,
106
+ ``coupling_map``, and ``target``. If any of those other arguments
107
+ are specified in addition to ``backend`` they will take precedence
108
+ over the value contained in the backend.
109
+ target (Target): The :class:`~.Target` representing a backend compilation
110
+ target. The following attributes will be inferred from this
111
+ argument if they are not set: ``coupling_map`` and ``basis_gates``.
112
+ basis_gates (list): List of basis gate names to unroll to
113
+ (e.g: ``['u1', 'u2', 'u3', 'cx']``).
114
+ coupling_map (CouplingMap or list): Directed graph represented a coupling
115
+ map. Multiple formats are supported:
116
+
117
+ #. ``CouplingMap`` instance
118
+ #. List, must be given as an adjacency matrix, where each entry
119
+ specifies all directed two-qubit interactions supported by backend,
120
+ e.g: ``[[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]``
121
+ dt (float): Backend sample time (resolution) in seconds.
122
+ If ``None`` (default) and a backend is provided, ``backend.dt`` is used.
123
+ initial_layout (Layout | List[int]): Initial position of virtual qubits on
124
+ physical qubits.
125
+ layout_method (str): The :class:`~.Pass` to use for choosing initial qubit
126
+ placement. Valid choices are ``'trivial'``, ``'dense'``,
127
+ and ``'sabre'``, representing :class:`~.TrivialLayout`, :class:`~.DenseLayout` and
128
+ :class:`~.SabreLayout` respectively. This can also
129
+ be the external plugin name to use for the ``layout`` stage of the output
130
+ :class:`~.StagedPassManager`. You can see a list of installed plugins by using
131
+ :func:`~.list_stage_plugins` with ``"layout"`` for the ``stage_name`` argument.
132
+ routing_method (str): The pass to use for routing qubits on the
133
+ architecture. Valid choices are ``'basic'``, ``'lookahead'``,
134
+ ``'sabre'``, and ``'none'`` representing :class:`~.BasicSwap`,
135
+ :class:`~.LookaheadSwap`, :class:`~.SabreSwap`, and
136
+ erroring if routing is required respectively. This can also be the external plugin
137
+ name to use for the ``routing`` stage of the output :class:`~.StagedPassManager`.
138
+ You can see a list of installed plugins by using :func:`~.list_stage_plugins` with
139
+ ``"routing"`` for the ``stage_name`` argument.
140
+ translation_method (str): The method to use for translating gates to
141
+ basis gates. Valid choices ``'translator'``, ``'synthesis'`` representing
142
+ :class:`~.BasisTranslator`, and :class:`~.UnitarySynthesis` respectively. This can
143
+ also be the external plugin name to use for the ``translation`` stage of the output
144
+ :class:`~.StagedPassManager`. You can see a list of installed plugins by using
145
+ :func:`~.list_stage_plugins` with ``"translation"`` for the ``stage_name`` argument.
146
+ scheduling_method (str): The pass to use for scheduling instructions. Valid choices
147
+ are ``'alap'`` and ``'asap'``. This can also be the external plugin name to use
148
+ for the ``scheduling`` stage of the output :class:`~.StagedPassManager`. You can
149
+ see a list of installed plugins by using :func:`~.list_stage_plugins` with
150
+ ``"scheduling"`` for the ``stage_name`` argument.
151
+ approximation_degree (float): Heuristic dial used for circuit approximation
152
+ (1.0=no approximation, 0.0=maximal approximation).
153
+ seed_transpiler (int): Sets random seed for the stochastic parts of
154
+ the transpiler.
155
+ unitary_synthesis_method (str): The name of the unitary synthesis
156
+ method to use. By default ``'default'`` is used. You can see a list of
157
+ installed plugins with :func:`.unitary_synthesis_plugin_names`.
158
+ unitary_synthesis_plugin_config (dict): An optional configuration dictionary
159
+ that will be passed directly to the unitary synthesis plugin. By
160
+ default this setting will have no effect as the default unitary
161
+ synthesis method does not take custom configuration. This should
162
+ only be necessary when a unitary synthesis plugin is specified with
163
+ the ``unitary_synthesis_method`` argument. As this is custom for each
164
+ unitary synthesis plugin refer to the plugin documentation for how
165
+ to use this option.
166
+ hls_config (HLSConfig): An optional configuration class :class:`~.HLSConfig`
167
+ that will be passed directly to :class:`~.HighLevelSynthesis` transformation pass.
168
+ This configuration class allows to specify for various high-level objects
169
+ the lists of synthesis algorithms and their parameters.
170
+ init_method (str): The plugin name to use for the ``init`` stage of
171
+ the output :class:`~.StagedPassManager`. By default an external
172
+ plugin is not used. You can see a list of installed plugins by
173
+ using :func:`~.list_stage_plugins` with ``"init"`` for the stage
174
+ name argument.
175
+ optimization_method (str): The plugin name to use for the
176
+ ``optimization`` stage of the output
177
+ :class:`~.StagedPassManager`. By default an external
178
+ plugin is not used. You can see a list of installed plugins by
179
+ using :func:`~.list_stage_plugins` with ``"optimization"`` for the
180
+ ``stage_name`` argument.
181
+ qubits_initially_zero (bool): Indicates whether the input circuit is
182
+ zero-initialized.
183
+
184
+ Returns:
185
+ StagedPassManager: The preset pass manager for the given options
186
+
187
+ Raises:
188
+ ValueError: if an invalid value for ``optimization_level`` is passed in.
189
+ """
190
+
191
+ # Handle positional arguments for target and backend. This enables the usage
192
+ # pattern `generate_preset_pass_manager(backend.target)` to generate a default
193
+ # pass manager for a given target.
194
+ if isinstance(optimization_level, Target):
195
+ target = optimization_level
196
+ optimization_level = 2
197
+ elif isinstance(optimization_level, Backend):
198
+ backend = optimization_level
199
+ optimization_level = 2
200
+
201
+ # If there are no loose constraints => use backend target if available
202
+ _no_loose_constraints = basis_gates is None and coupling_map is None and dt is None
203
+
204
+ # If the only loose constraint is dt => use backend target and modify dt
205
+ _adjust_dt = backend is not None and dt is not None
206
+
207
+ # Warn about inconsistencies in backend + loose constraints path (dt shouldn't be a problem)
208
+ if backend is not None and (coupling_map is not None or basis_gates is not None):
209
+ warnings.warn(
210
+ "Providing `coupling_map` and/or `basis_gates` along with `backend` is not "
211
+ "recommended, as this will invalidate the backend's gate durations and error rates.",
212
+ category=UserWarning,
213
+ stacklevel=2,
214
+ )
215
+
216
+ # Resolve loose constraints case-by-case against backend constraints.
217
+ # The order of priority is loose constraints > backend.
218
+ dt = _parse_dt(dt, backend)
219
+ instruction_durations = _parse_instruction_durations(backend, dt)
220
+ timing_constraints = _parse_timing_constraints(backend)
221
+ coupling_map = _parse_coupling_map(coupling_map, backend)
222
+ basis_gates, name_mapping = _parse_basis_gates(basis_gates, backend)
223
+
224
+ # Check if coupling map has been provided (either standalone or through backend)
225
+ # with user-defined basis_gates, and whether these have 3q or more.
226
+ if coupling_map is not None and basis_gates is not None:
227
+ for gate in OVER_3Q_GATES:
228
+ if gate in basis_gates:
229
+ raise ValueError(
230
+ f"Gates with 3 or more qubits ({gate}) in `basis_gates` or `backend` are "
231
+ "incompatible with a custom `coupling_map`. To include 3-qubit or larger "
232
+ " gates in the transpilation basis, provide a custom `target` instead."
233
+ )
234
+
235
+ if target is None:
236
+ if backend is not None and _no_loose_constraints:
237
+ # If a backend is specified without loose constraints, use its target directly.
238
+ target = backend.target
239
+ elif _adjust_dt:
240
+ # If a backend is specified with loose dt, use its target and adjust the dt value.
241
+ target = copy.deepcopy(backend.target)
242
+ target.dt = dt
243
+ else:
244
+ if basis_gates is not None:
245
+ # Build target from constraints.
246
+ target = Target.from_configuration(
247
+ basis_gates=basis_gates,
248
+ num_qubits=backend.num_qubits if backend is not None else None,
249
+ coupling_map=coupling_map,
250
+ instruction_durations=instruction_durations,
251
+ concurrent_measurements=(
252
+ backend.target.concurrent_measurements if backend is not None else None
253
+ ),
254
+ dt=dt,
255
+ timing_constraints=timing_constraints,
256
+ custom_name_mapping=name_mapping,
257
+ )
258
+ else:
259
+ target = _FakeTarget.from_configuration(
260
+ num_qubits=backend.num_qubits if backend is not None else None,
261
+ coupling_map=coupling_map,
262
+ dt=dt,
263
+ )
264
+
265
+ # Update loose constraints to populate pm options
266
+ if coupling_map is None:
267
+ coupling_map = target.build_coupling_map()
268
+ if basis_gates is None and len(target.operation_names) > 0:
269
+ basis_gates = target.operation_names
270
+ if instruction_durations is None:
271
+ instruction_durations = target.durations()
272
+ if timing_constraints is None:
273
+ timing_constraints = target.timing_constraints()
274
+
275
+ # Parse non-target dependent pm options
276
+ initial_layout = _parse_initial_layout(initial_layout)
277
+ approximation_degree = _parse_approximation_degree(approximation_degree)
278
+ seed_transpiler = _parse_seed_transpiler(seed_transpiler)
279
+
280
+ pm_options = {
281
+ "target": target,
282
+ "basis_gates": basis_gates,
283
+ "coupling_map": coupling_map,
284
+ "instruction_durations": instruction_durations,
285
+ "timing_constraints": timing_constraints,
286
+ "layout_method": layout_method,
287
+ "routing_method": routing_method,
288
+ "translation_method": translation_method,
289
+ "scheduling_method": scheduling_method,
290
+ "approximation_degree": approximation_degree,
291
+ "seed_transpiler": seed_transpiler,
292
+ "unitary_synthesis_method": unitary_synthesis_method,
293
+ "unitary_synthesis_plugin_config": unitary_synthesis_plugin_config,
294
+ "initial_layout": initial_layout,
295
+ "hls_config": hls_config,
296
+ "init_method": init_method,
297
+ "optimization_method": optimization_method,
298
+ "qubits_initially_zero": qubits_initially_zero,
299
+ }
300
+
301
+ if backend is not None:
302
+ pm_options["_skip_target"] = _skip_target
303
+ pm_config = PassManagerConfig.from_backend(backend, **pm_options)
304
+ else:
305
+ pm_config = PassManagerConfig(**pm_options)
306
+
307
+ pm_config._is_clifford_t = is_clifford_t_basis(
308
+ basis_gates=pm_config.basis_gates, target=pm_config.target
309
+ )
310
+
311
+ if optimization_level == 0:
312
+ pm = level_0_pass_manager(pm_config)
313
+ elif optimization_level == 1:
314
+ pm = level_1_pass_manager(pm_config)
315
+ elif optimization_level == 2:
316
+ pm = level_2_pass_manager(pm_config)
317
+ elif optimization_level == 3:
318
+ pm = level_3_pass_manager(pm_config)
319
+ else:
320
+ raise ValueError(f"Invalid optimization level {optimization_level}")
321
+ return pm
322
+
323
+
324
+ def _parse_basis_gates(basis_gates, backend):
325
+ standard_gates = get_standard_gate_name_mapping()
326
+ # Add control flow gates by default to basis set and name mapping
327
+ default_gates = {"measure", "delay", "reset"}.union(CONTROL_FLOW_OP_NAMES)
328
+ name_mapping = get_control_flow_name_mapping()
329
+ try:
330
+ instructions = set(basis_gates)
331
+ for name in default_gates:
332
+ if name not in instructions:
333
+ instructions.add(name)
334
+ except TypeError:
335
+ instructions = None
336
+
337
+ if backend is None:
338
+ # Check for custom instructions
339
+ if instructions is None:
340
+ return None, name_mapping
341
+
342
+ for inst in instructions:
343
+ if inst not in standard_gates and inst not in default_gates:
344
+ raise ValueError(
345
+ f"Providing non-standard gates ({inst}) through the ``basis_gates`` "
346
+ "argument is not allowed. Use the ``target`` parameter instead. "
347
+ "You can build a target instance using ``Target.from_configuration()`` and provide "
348
+ "custom gate definitions with the ``custom_name_mapping`` argument."
349
+ )
350
+
351
+ return list(instructions), name_mapping
352
+
353
+ instructions = instructions or backend.operation_names
354
+ name_mapping.update(
355
+ {name: backend.target.operation_from_name(name) for name in backend.operation_names}
356
+ )
357
+
358
+ # Check for custom instructions
359
+ for inst in instructions:
360
+ if inst not in standard_gates and inst not in default_gates:
361
+ if inst not in backend.operation_names:
362
+ # do not raise error when the custom instruction comes from the backend
363
+ # (common case with BasicSimulator)
364
+ raise ValueError(
365
+ f"Providing non-standard gates ({inst}) through the ``basis_gates`` "
366
+ "argument is not allowed. Use the ``target`` parameter instead. "
367
+ "You can build a target instance using ``Target.from_configuration()`` and provide "
368
+ "custom gate definitions with the ``custom_name_mapping`` argument."
369
+ )
370
+
371
+ return list(instructions) if instructions else None, name_mapping
372
+
373
+
374
+ def _parse_dt(dt, backend):
375
+ # try getting dt from user, else backend
376
+ if dt is None and backend is not None:
377
+ dt = backend.target.dt
378
+ return dt
379
+
380
+
381
+ def _parse_coupling_map(coupling_map, backend):
382
+ # try getting coupling_map from user, else backend
383
+ if coupling_map is None and backend is not None:
384
+ coupling_map = backend.coupling_map
385
+
386
+ # coupling_map could be None, or a list of lists, e.g. [[0, 1], [2, 1]]
387
+ if coupling_map is None or isinstance(coupling_map, CouplingMap):
388
+ return coupling_map
389
+ if isinstance(coupling_map, list) and all(
390
+ isinstance(i, list) and len(i) == 2 for i in coupling_map
391
+ ):
392
+ return CouplingMap(coupling_map)
393
+ else:
394
+ raise TranspilerError(
395
+ "Only a single input coupling map can be used with generate_preset_pass_manager()."
396
+ )
397
+
398
+
399
+ def _parse_instruction_durations(backend, dt):
400
+ """Create a list of ``InstructionDuration``s populated from the backend."""
401
+ final_durations = InstructionDurations()
402
+ backend_durations = InstructionDurations()
403
+ if backend is not None:
404
+ backend_durations = backend.instruction_durations
405
+ final_durations.update(backend_durations, dt or backend_durations.dt)
406
+ return final_durations
407
+
408
+
409
+ def _parse_timing_constraints(backend):
410
+ if backend is None:
411
+ timing_constraints = TimingConstraints()
412
+ else:
413
+ timing_constraints = backend.target.timing_constraints()
414
+ return timing_constraints
415
+
416
+
417
+ def _parse_initial_layout(initial_layout):
418
+ # initial_layout could be None, or a list of ints, e.g. [0, 5, 14]
419
+ # or a list of tuples/None e.g. [qr[0], None, qr[1]] or a dict e.g. {qr[0]: 0}
420
+ if initial_layout is None or isinstance(initial_layout, Layout):
421
+ return initial_layout
422
+ if isinstance(initial_layout, dict):
423
+ return Layout(initial_layout)
424
+ initial_layout = list(initial_layout)
425
+ if all(phys is None or isinstance(phys, Qubit) for phys in initial_layout):
426
+ return Layout.from_qubit_list(initial_layout)
427
+ return initial_layout
428
+
429
+
430
+ def _parse_approximation_degree(approximation_degree):
431
+ if approximation_degree is None:
432
+ return None
433
+ if approximation_degree < 0.0 or approximation_degree > 1.0:
434
+ raise TranspilerError("Approximation degree must be in [0.0, 1.0]")
435
+ return approximation_degree
436
+
437
+
438
+ def _parse_seed_transpiler(seed_transpiler):
439
+ if seed_transpiler is None:
440
+ return None
441
+ if not isinstance(seed_transpiler, int) or seed_transpiler < 0:
442
+ raise ValueError("Expected non-negative integer as seed for transpiler.")
443
+ return seed_transpiler
@@ -0,0 +1,104 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2017, 2018.
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
+ """Pass manager for optimization level 0, providing no explicit optimization.
14
+
15
+ Level 0 pass manager: no explicit optimization other than mapping to backend.
16
+ """
17
+
18
+ from qiskit.transpiler.passmanager_config import PassManagerConfig
19
+ from qiskit.transpiler.passmanager import StagedPassManager
20
+ from qiskit.transpiler.preset_passmanagers import common
21
+ from qiskit.transpiler.preset_passmanagers.plugin import (
22
+ PassManagerStagePluginManager,
23
+ )
24
+
25
+
26
+ def level_0_pass_manager(pass_manager_config: PassManagerConfig) -> StagedPassManager:
27
+ """Level 0 pass manager: no explicit optimization other than mapping to backend.
28
+
29
+ This pass manager applies the user-given initial layout. If none is given, a trivial
30
+ layout consisting of mapping the i-th virtual qubit to the i-th physical qubit is used.
31
+ Any unused physical qubit is allocated as ancilla space.
32
+
33
+ The pass manager then unrolls the circuit to the desired basis, and transforms the
34
+ circuit to match the coupling map.
35
+
36
+ Args:
37
+ pass_manager_config: configuration of the pass manager.
38
+
39
+ Returns:
40
+ a level 0 pass manager.
41
+
42
+ Raises:
43
+ TranspilerError: if the passmanager config is invalid.
44
+ """
45
+ plugin_manager = PassManagerStagePluginManager()
46
+ basis_gates = pass_manager_config.basis_gates
47
+ coupling_map = pass_manager_config.coupling_map
48
+ initial_layout = pass_manager_config.initial_layout
49
+ init_method = pass_manager_config.init_method or "default"
50
+ layout_method = pass_manager_config.layout_method or "default"
51
+ routing_method = pass_manager_config.routing_method or "default"
52
+ translation_method = pass_manager_config.translation_method or "default"
53
+ optimization_method = pass_manager_config.optimization_method or "default"
54
+ scheduling_method = pass_manager_config.scheduling_method or "default"
55
+ target = pass_manager_config.target
56
+
57
+ # Choose routing pass
58
+ routing_pm = plugin_manager.get_passmanager_stage(
59
+ "routing", routing_method, pass_manager_config, optimization_level=0
60
+ )
61
+
62
+ # Build pass manager
63
+ if coupling_map or initial_layout:
64
+ layout = plugin_manager.get_passmanager_stage(
65
+ "layout", layout_method, pass_manager_config, optimization_level=0
66
+ )
67
+ routing = routing_pm
68
+ else:
69
+ layout = None
70
+ routing = None
71
+
72
+ translation = plugin_manager.get_passmanager_stage(
73
+ "translation", translation_method, pass_manager_config, optimization_level=0
74
+ )
75
+
76
+ sched = plugin_manager.get_passmanager_stage(
77
+ "scheduling", scheduling_method, pass_manager_config, optimization_level=0
78
+ )
79
+
80
+ pre_init = common.generate_control_flow_options_check(
81
+ layout_method=layout_method,
82
+ routing_method=routing_method,
83
+ translation_method=translation_method,
84
+ optimization_method=optimization_method,
85
+ scheduling_method=scheduling_method,
86
+ basis_gates=basis_gates,
87
+ target=target,
88
+ )
89
+ init = plugin_manager.get_passmanager_stage(
90
+ "init", init_method, pass_manager_config, optimization_level=0
91
+ )
92
+ optimization = plugin_manager.get_passmanager_stage(
93
+ "optimization", optimization_method, pass_manager_config, optimization_level=0
94
+ )
95
+
96
+ return StagedPassManager(
97
+ pre_init=pre_init,
98
+ init=init,
99
+ layout=layout,
100
+ routing=routing,
101
+ translation=translation,
102
+ optimization=optimization,
103
+ scheduling=sched,
104
+ )
@@ -0,0 +1,108 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2017, 2018.
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
+ """Pass manager for optimization level 1, providing light optimization.
14
+
15
+ Level 1 pass manager: light optimization by simple adjacent gate collapsing.
16
+ """
17
+ from __future__ import annotations
18
+ from qiskit.transpiler.passmanager_config import PassManagerConfig
19
+ from qiskit.transpiler.passmanager import StagedPassManager
20
+ from qiskit.transpiler.preset_passmanagers import common
21
+ from qiskit.transpiler.preset_passmanagers.plugin import (
22
+ PassManagerStagePluginManager,
23
+ )
24
+
25
+
26
+ def level_1_pass_manager(pass_manager_config: PassManagerConfig) -> StagedPassManager:
27
+ """Level 1 pass manager: light optimization by simple adjacent gate collapsing.
28
+
29
+ This pass manager applies the user-given initial layout. If none is given,
30
+ and a trivial layout (i-th virtual -> i-th physical) makes the circuit fit
31
+ the coupling map, that is used.
32
+ Otherwise, the circuit is mapped to the most densely connected coupling subgraph,
33
+ and swaps are inserted to map. Any unused physical qubit is allocated as ancilla space.
34
+ The pass manager then unrolls the circuit to the desired basis, and transforms the
35
+ circuit to match the coupling map. Finally, optimizations in the form of adjacent
36
+ gate collapse and redundant reset removal are performed.
37
+
38
+ Args:
39
+ pass_manager_config: configuration of the pass manager.
40
+
41
+ Returns:
42
+ a level 1 pass manager.
43
+
44
+ Raises:
45
+ TranspilerError: if the passmanager config is invalid.
46
+ """
47
+ plugin_manager = PassManagerStagePluginManager()
48
+ basis_gates = pass_manager_config.basis_gates
49
+ coupling_map = pass_manager_config.coupling_map
50
+ initial_layout = pass_manager_config.initial_layout
51
+ init_method = pass_manager_config.init_method or "default"
52
+ layout_method = pass_manager_config.layout_method or "default"
53
+ routing_method = pass_manager_config.routing_method or "default"
54
+ translation_method = pass_manager_config.translation_method or "default"
55
+ optimization_method = pass_manager_config.optimization_method or "default"
56
+ scheduling_method = pass_manager_config.scheduling_method or "default"
57
+ target = pass_manager_config.target
58
+
59
+ # Choose routing pass
60
+ routing_pm = plugin_manager.get_passmanager_stage(
61
+ "routing", routing_method, pass_manager_config, optimization_level=1
62
+ )
63
+
64
+ # Build full pass manager
65
+ if coupling_map or initial_layout:
66
+ layout = plugin_manager.get_passmanager_stage(
67
+ "layout", layout_method, pass_manager_config, optimization_level=1
68
+ )
69
+ routing = routing_pm
70
+
71
+ else:
72
+ layout = None
73
+ routing = None
74
+
75
+ translation = plugin_manager.get_passmanager_stage(
76
+ "translation", translation_method, pass_manager_config, optimization_level=1
77
+ )
78
+
79
+ optimization = plugin_manager.get_passmanager_stage(
80
+ "optimization", optimization_method, pass_manager_config, optimization_level=1
81
+ )
82
+
83
+ sched = plugin_manager.get_passmanager_stage(
84
+ "scheduling", scheduling_method, pass_manager_config, optimization_level=1
85
+ )
86
+
87
+ pre_init = common.generate_control_flow_options_check(
88
+ layout_method=layout_method,
89
+ routing_method=routing_method,
90
+ translation_method=translation_method,
91
+ optimization_method=optimization_method,
92
+ scheduling_method=scheduling_method,
93
+ basis_gates=basis_gates,
94
+ target=target,
95
+ )
96
+ init = plugin_manager.get_passmanager_stage(
97
+ "init", init_method, pass_manager_config, optimization_level=1
98
+ )
99
+
100
+ return StagedPassManager(
101
+ pre_init=pre_init,
102
+ init=init,
103
+ layout=layout,
104
+ routing=routing,
105
+ translation=translation,
106
+ optimization=optimization,
107
+ scheduling=sched,
108
+ )