qiskit 1.3.0__cp39-abi3-win32.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 (836) hide show
  1. qiskit/VERSION.txt +1 -0
  2. qiskit/__init__.py +146 -0
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/_numpy_compat.py +73 -0
  5. qiskit/assembler/__init__.py +42 -0
  6. qiskit/assembler/assemble_circuits.py +451 -0
  7. qiskit/assembler/assemble_schedules.py +367 -0
  8. qiskit/assembler/disassemble.py +310 -0
  9. qiskit/assembler/run_config.py +77 -0
  10. qiskit/circuit/__init__.py +1313 -0
  11. qiskit/circuit/_classical_resource_map.py +148 -0
  12. qiskit/circuit/_standard_gates_commutations.py +3849 -0
  13. qiskit/circuit/_utils.py +167 -0
  14. qiskit/circuit/add_control.py +274 -0
  15. qiskit/circuit/annotated_operation.py +279 -0
  16. qiskit/circuit/barrier.py +50 -0
  17. qiskit/circuit/bit.py +94 -0
  18. qiskit/circuit/classical/__init__.py +41 -0
  19. qiskit/circuit/classical/expr/__init__.py +238 -0
  20. qiskit/circuit/classical/expr/constructors.py +556 -0
  21. qiskit/circuit/classical/expr/expr.py +397 -0
  22. qiskit/circuit/classical/expr/visitors.py +300 -0
  23. qiskit/circuit/classical/types/__init__.py +109 -0
  24. qiskit/circuit/classical/types/ordering.py +222 -0
  25. qiskit/circuit/classical/types/types.py +117 -0
  26. qiskit/circuit/classicalfunction/__init__.py +140 -0
  27. qiskit/circuit/classicalfunction/boolean_expression.py +129 -0
  28. qiskit/circuit/classicalfunction/classical_element.py +54 -0
  29. qiskit/circuit/classicalfunction/classical_function_visitor.py +155 -0
  30. qiskit/circuit/classicalfunction/classicalfunction.py +173 -0
  31. qiskit/circuit/classicalfunction/exceptions.py +35 -0
  32. qiskit/circuit/classicalfunction/types.py +18 -0
  33. qiskit/circuit/classicalfunction/utils.py +91 -0
  34. qiskit/circuit/classicalregister.py +57 -0
  35. qiskit/circuit/commutation_checker.py +106 -0
  36. qiskit/circuit/commutation_library.py +20 -0
  37. qiskit/circuit/controlflow/__init__.py +28 -0
  38. qiskit/circuit/controlflow/_builder_utils.py +207 -0
  39. qiskit/circuit/controlflow/break_loop.py +56 -0
  40. qiskit/circuit/controlflow/builder.py +691 -0
  41. qiskit/circuit/controlflow/continue_loop.py +58 -0
  42. qiskit/circuit/controlflow/control_flow.py +84 -0
  43. qiskit/circuit/controlflow/for_loop.py +217 -0
  44. qiskit/circuit/controlflow/if_else.py +511 -0
  45. qiskit/circuit/controlflow/switch_case.py +417 -0
  46. qiskit/circuit/controlflow/while_loop.py +171 -0
  47. qiskit/circuit/controlledgate.py +274 -0
  48. qiskit/circuit/delay.py +123 -0
  49. qiskit/circuit/duration.py +95 -0
  50. qiskit/circuit/equivalence.py +94 -0
  51. qiskit/circuit/equivalence_library.py +18 -0
  52. qiskit/circuit/exceptions.py +19 -0
  53. qiskit/circuit/gate.py +263 -0
  54. qiskit/circuit/instruction.py +697 -0
  55. qiskit/circuit/instructionset.py +179 -0
  56. qiskit/circuit/library/__init__.py +668 -0
  57. qiskit/circuit/library/arithmetic/__init__.py +34 -0
  58. qiskit/circuit/library/arithmetic/adders/__init__.py +18 -0
  59. qiskit/circuit/library/arithmetic/adders/adder.py +210 -0
  60. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +123 -0
  61. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +129 -0
  62. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +95 -0
  63. qiskit/circuit/library/arithmetic/exact_reciprocal.py +88 -0
  64. qiskit/circuit/library/arithmetic/functional_pauli_rotations.py +114 -0
  65. qiskit/circuit/library/arithmetic/integer_comparator.py +243 -0
  66. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +196 -0
  67. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +189 -0
  68. qiskit/circuit/library/arithmetic/multipliers/__init__.py +17 -0
  69. qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +145 -0
  70. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +192 -0
  71. qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +108 -0
  72. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +353 -0
  73. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +277 -0
  74. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +317 -0
  75. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +335 -0
  76. qiskit/circuit/library/arithmetic/quadratic_form.py +198 -0
  77. qiskit/circuit/library/arithmetic/weighted_adder.py +337 -0
  78. qiskit/circuit/library/basis_change/__init__.py +15 -0
  79. qiskit/circuit/library/basis_change/qft.py +313 -0
  80. qiskit/circuit/library/blueprintcircuit.py +280 -0
  81. qiskit/circuit/library/boolean_logic/__init__.py +18 -0
  82. qiskit/circuit/library/boolean_logic/inner_product.py +155 -0
  83. qiskit/circuit/library/boolean_logic/quantum_and.py +200 -0
  84. qiskit/circuit/library/boolean_logic/quantum_or.py +202 -0
  85. qiskit/circuit/library/boolean_logic/quantum_xor.py +165 -0
  86. qiskit/circuit/library/data_preparation/__init__.py +57 -0
  87. qiskit/circuit/library/data_preparation/_z_feature_map.py +115 -0
  88. qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
  89. qiskit/circuit/library/data_preparation/initializer.py +107 -0
  90. qiskit/circuit/library/data_preparation/pauli_feature_map.py +656 -0
  91. qiskit/circuit/library/data_preparation/state_preparation.py +336 -0
  92. qiskit/circuit/library/fourier_checking.py +158 -0
  93. qiskit/circuit/library/generalized_gates/__init__.py +30 -0
  94. qiskit/circuit/library/generalized_gates/diagonal.py +159 -0
  95. qiskit/circuit/library/generalized_gates/gms.py +174 -0
  96. qiskit/circuit/library/generalized_gates/gr.py +215 -0
  97. qiskit/circuit/library/generalized_gates/isometry.py +370 -0
  98. qiskit/circuit/library/generalized_gates/linear_function.py +318 -0
  99. qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +143 -0
  100. qiskit/circuit/library/generalized_gates/mcmt.py +316 -0
  101. qiskit/circuit/library/generalized_gates/pauli.py +85 -0
  102. qiskit/circuit/library/generalized_gates/permutation.py +194 -0
  103. qiskit/circuit/library/generalized_gates/rv.py +96 -0
  104. qiskit/circuit/library/generalized_gates/uc.py +213 -0
  105. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +164 -0
  106. qiskit/circuit/library/generalized_gates/ucrx.py +32 -0
  107. qiskit/circuit/library/generalized_gates/ucry.py +32 -0
  108. qiskit/circuit/library/generalized_gates/ucrz.py +32 -0
  109. qiskit/circuit/library/generalized_gates/unitary.py +215 -0
  110. qiskit/circuit/library/graph_state.py +169 -0
  111. qiskit/circuit/library/grover_operator.py +579 -0
  112. qiskit/circuit/library/hamiltonian_gate.py +142 -0
  113. qiskit/circuit/library/hidden_linear_function.py +161 -0
  114. qiskit/circuit/library/iqp.py +175 -0
  115. qiskit/circuit/library/n_local/__init__.py +45 -0
  116. qiskit/circuit/library/n_local/efficient_su2.py +277 -0
  117. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +515 -0
  118. qiskit/circuit/library/n_local/excitation_preserving.py +297 -0
  119. qiskit/circuit/library/n_local/n_local.py +1472 -0
  120. qiskit/circuit/library/n_local/pauli_two_design.py +243 -0
  121. qiskit/circuit/library/n_local/qaoa_ansatz.py +366 -0
  122. qiskit/circuit/library/n_local/real_amplitudes.py +306 -0
  123. qiskit/circuit/library/n_local/two_local.py +289 -0
  124. qiskit/circuit/library/overlap.py +182 -0
  125. qiskit/circuit/library/pauli_evolution.py +186 -0
  126. qiskit/circuit/library/phase_estimation.py +175 -0
  127. qiskit/circuit/library/phase_oracle.py +153 -0
  128. qiskit/circuit/library/quantum_volume.py +167 -0
  129. qiskit/circuit/library/standard_gates/__init__.py +142 -0
  130. qiskit/circuit/library/standard_gates/dcx.py +78 -0
  131. qiskit/circuit/library/standard_gates/ecr.py +130 -0
  132. qiskit/circuit/library/standard_gates/equivalence_library.py +1800 -0
  133. qiskit/circuit/library/standard_gates/global_phase.py +85 -0
  134. qiskit/circuit/library/standard_gates/h.py +258 -0
  135. qiskit/circuit/library/standard_gates/i.py +76 -0
  136. qiskit/circuit/library/standard_gates/iswap.py +134 -0
  137. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +405 -0
  138. qiskit/circuit/library/standard_gates/p.py +441 -0
  139. qiskit/circuit/library/standard_gates/r.py +117 -0
  140. qiskit/circuit/library/standard_gates/rx.py +303 -0
  141. qiskit/circuit/library/standard_gates/rxx.py +183 -0
  142. qiskit/circuit/library/standard_gates/ry.py +298 -0
  143. qiskit/circuit/library/standard_gates/ryy.py +183 -0
  144. qiskit/circuit/library/standard_gates/rz.py +319 -0
  145. qiskit/circuit/library/standard_gates/rzx.py +229 -0
  146. qiskit/circuit/library/standard_gates/rzz.py +196 -0
  147. qiskit/circuit/library/standard_gates/s.py +428 -0
  148. qiskit/circuit/library/standard_gates/swap.py +288 -0
  149. qiskit/circuit/library/standard_gates/sx.py +315 -0
  150. qiskit/circuit/library/standard_gates/t.py +179 -0
  151. qiskit/circuit/library/standard_gates/u.py +403 -0
  152. qiskit/circuit/library/standard_gates/u1.py +501 -0
  153. qiskit/circuit/library/standard_gates/u2.py +149 -0
  154. qiskit/circuit/library/standard_gates/u3.py +436 -0
  155. qiskit/circuit/library/standard_gates/x.py +1529 -0
  156. qiskit/circuit/library/standard_gates/xx_minus_yy.py +235 -0
  157. qiskit/circuit/library/standard_gates/xx_plus_yy.py +239 -0
  158. qiskit/circuit/library/standard_gates/y.py +262 -0
  159. qiskit/circuit/library/standard_gates/z.py +348 -0
  160. qiskit/circuit/library/templates/__init__.py +92 -0
  161. qiskit/circuit/library/templates/clifford/__init__.py +33 -0
  162. qiskit/circuit/library/templates/clifford/clifford_2_1.py +34 -0
  163. qiskit/circuit/library/templates/clifford/clifford_2_2.py +35 -0
  164. qiskit/circuit/library/templates/clifford/clifford_2_3.py +34 -0
  165. qiskit/circuit/library/templates/clifford/clifford_2_4.py +34 -0
  166. qiskit/circuit/library/templates/clifford/clifford_3_1.py +35 -0
  167. qiskit/circuit/library/templates/clifford/clifford_4_1.py +38 -0
  168. qiskit/circuit/library/templates/clifford/clifford_4_2.py +37 -0
  169. qiskit/circuit/library/templates/clifford/clifford_4_3.py +38 -0
  170. qiskit/circuit/library/templates/clifford/clifford_4_4.py +37 -0
  171. qiskit/circuit/library/templates/clifford/clifford_5_1.py +40 -0
  172. qiskit/circuit/library/templates/clifford/clifford_6_1.py +40 -0
  173. qiskit/circuit/library/templates/clifford/clifford_6_2.py +40 -0
  174. qiskit/circuit/library/templates/clifford/clifford_6_3.py +40 -0
  175. qiskit/circuit/library/templates/clifford/clifford_6_4.py +38 -0
  176. qiskit/circuit/library/templates/clifford/clifford_6_5.py +40 -0
  177. qiskit/circuit/library/templates/clifford/clifford_8_1.py +42 -0
  178. qiskit/circuit/library/templates/clifford/clifford_8_2.py +42 -0
  179. qiskit/circuit/library/templates/clifford/clifford_8_3.py +41 -0
  180. qiskit/circuit/library/templates/nct/__init__.py +67 -0
  181. qiskit/circuit/library/templates/nct/template_nct_2a_1.py +34 -0
  182. qiskit/circuit/library/templates/nct/template_nct_2a_2.py +35 -0
  183. qiskit/circuit/library/templates/nct/template_nct_2a_3.py +37 -0
  184. qiskit/circuit/library/templates/nct/template_nct_4a_1.py +43 -0
  185. qiskit/circuit/library/templates/nct/template_nct_4a_2.py +41 -0
  186. qiskit/circuit/library/templates/nct/template_nct_4a_3.py +39 -0
  187. qiskit/circuit/library/templates/nct/template_nct_4b_1.py +41 -0
  188. qiskit/circuit/library/templates/nct/template_nct_4b_2.py +39 -0
  189. qiskit/circuit/library/templates/nct/template_nct_5a_1.py +40 -0
  190. qiskit/circuit/library/templates/nct/template_nct_5a_2.py +40 -0
  191. qiskit/circuit/library/templates/nct/template_nct_5a_3.py +40 -0
  192. qiskit/circuit/library/templates/nct/template_nct_5a_4.py +39 -0
  193. qiskit/circuit/library/templates/nct/template_nct_6a_1.py +40 -0
  194. qiskit/circuit/library/templates/nct/template_nct_6a_2.py +41 -0
  195. qiskit/circuit/library/templates/nct/template_nct_6a_3.py +41 -0
  196. qiskit/circuit/library/templates/nct/template_nct_6a_4.py +41 -0
  197. qiskit/circuit/library/templates/nct/template_nct_6b_1.py +41 -0
  198. qiskit/circuit/library/templates/nct/template_nct_6b_2.py +41 -0
  199. qiskit/circuit/library/templates/nct/template_nct_6c_1.py +41 -0
  200. qiskit/circuit/library/templates/nct/template_nct_7a_1.py +43 -0
  201. qiskit/circuit/library/templates/nct/template_nct_7b_1.py +43 -0
  202. qiskit/circuit/library/templates/nct/template_nct_7c_1.py +43 -0
  203. qiskit/circuit/library/templates/nct/template_nct_7d_1.py +43 -0
  204. qiskit/circuit/library/templates/nct/template_nct_7e_1.py +43 -0
  205. qiskit/circuit/library/templates/nct/template_nct_9a_1.py +45 -0
  206. qiskit/circuit/library/templates/nct/template_nct_9c_1.py +43 -0
  207. qiskit/circuit/library/templates/nct/template_nct_9c_10.py +44 -0
  208. qiskit/circuit/library/templates/nct/template_nct_9c_11.py +44 -0
  209. qiskit/circuit/library/templates/nct/template_nct_9c_12.py +44 -0
  210. qiskit/circuit/library/templates/nct/template_nct_9c_2.py +44 -0
  211. qiskit/circuit/library/templates/nct/template_nct_9c_3.py +44 -0
  212. qiskit/circuit/library/templates/nct/template_nct_9c_4.py +44 -0
  213. qiskit/circuit/library/templates/nct/template_nct_9c_5.py +44 -0
  214. qiskit/circuit/library/templates/nct/template_nct_9c_6.py +44 -0
  215. qiskit/circuit/library/templates/nct/template_nct_9c_7.py +44 -0
  216. qiskit/circuit/library/templates/nct/template_nct_9c_8.py +44 -0
  217. qiskit/circuit/library/templates/nct/template_nct_9c_9.py +44 -0
  218. qiskit/circuit/library/templates/nct/template_nct_9d_1.py +43 -0
  219. qiskit/circuit/library/templates/nct/template_nct_9d_10.py +44 -0
  220. qiskit/circuit/library/templates/nct/template_nct_9d_2.py +44 -0
  221. qiskit/circuit/library/templates/nct/template_nct_9d_3.py +44 -0
  222. qiskit/circuit/library/templates/nct/template_nct_9d_4.py +44 -0
  223. qiskit/circuit/library/templates/nct/template_nct_9d_5.py +44 -0
  224. qiskit/circuit/library/templates/nct/template_nct_9d_6.py +44 -0
  225. qiskit/circuit/library/templates/nct/template_nct_9d_7.py +44 -0
  226. qiskit/circuit/library/templates/nct/template_nct_9d_8.py +44 -0
  227. qiskit/circuit/library/templates/nct/template_nct_9d_9.py +44 -0
  228. qiskit/circuit/library/templates/rzx/__init__.py +25 -0
  229. qiskit/circuit/library/templates/rzx/rzx_cy.py +47 -0
  230. qiskit/circuit/library/templates/rzx/rzx_xz.py +54 -0
  231. qiskit/circuit/library/templates/rzx/rzx_yz.py +45 -0
  232. qiskit/circuit/library/templates/rzx/rzx_zz1.py +69 -0
  233. qiskit/circuit/library/templates/rzx/rzx_zz2.py +59 -0
  234. qiskit/circuit/library/templates/rzx/rzx_zz3.py +59 -0
  235. qiskit/circuit/measure.py +44 -0
  236. qiskit/circuit/operation.py +67 -0
  237. qiskit/circuit/parameter.py +178 -0
  238. qiskit/circuit/parameterexpression.py +692 -0
  239. qiskit/circuit/parametertable.py +119 -0
  240. qiskit/circuit/parametervector.py +120 -0
  241. qiskit/circuit/quantumcircuit.py +6829 -0
  242. qiskit/circuit/quantumcircuitdata.py +136 -0
  243. qiskit/circuit/quantumregister.py +75 -0
  244. qiskit/circuit/random/__init__.py +15 -0
  245. qiskit/circuit/random/utils.py +358 -0
  246. qiskit/circuit/register.py +233 -0
  247. qiskit/circuit/reset.py +34 -0
  248. qiskit/circuit/singleton.py +606 -0
  249. qiskit/circuit/store.py +97 -0
  250. qiskit/circuit/tools/__init__.py +16 -0
  251. qiskit/circuit/tools/pi_check.py +190 -0
  252. qiskit/circuit/twirling.py +145 -0
  253. qiskit/compiler/__init__.py +33 -0
  254. qiskit/compiler/assembler.py +681 -0
  255. qiskit/compiler/scheduler.py +109 -0
  256. qiskit/compiler/sequencer.py +71 -0
  257. qiskit/compiler/transpiler.py +533 -0
  258. qiskit/converters/__init__.py +74 -0
  259. qiskit/converters/circuit_to_dag.py +78 -0
  260. qiskit/converters/circuit_to_dagdependency.py +51 -0
  261. qiskit/converters/circuit_to_dagdependency_v2.py +47 -0
  262. qiskit/converters/circuit_to_gate.py +107 -0
  263. qiskit/converters/circuit_to_instruction.py +155 -0
  264. qiskit/converters/dag_to_circuit.py +79 -0
  265. qiskit/converters/dag_to_dagdependency.py +55 -0
  266. qiskit/converters/dag_to_dagdependency_v2.py +44 -0
  267. qiskit/converters/dagdependency_to_circuit.py +46 -0
  268. qiskit/converters/dagdependency_to_dag.py +54 -0
  269. qiskit/dagcircuit/__init__.py +44 -0
  270. qiskit/dagcircuit/collect_blocks.py +391 -0
  271. qiskit/dagcircuit/dagcircuit.py +24 -0
  272. qiskit/dagcircuit/dagdependency.py +646 -0
  273. qiskit/dagcircuit/dagdependency_v2.py +641 -0
  274. qiskit/dagcircuit/dagdepnode.py +160 -0
  275. qiskit/dagcircuit/dagnode.py +176 -0
  276. qiskit/dagcircuit/exceptions.py +42 -0
  277. qiskit/exceptions.py +153 -0
  278. qiskit/passmanager/__init__.py +240 -0
  279. qiskit/passmanager/base_tasks.py +230 -0
  280. qiskit/passmanager/compilation_status.py +74 -0
  281. qiskit/passmanager/exceptions.py +19 -0
  282. qiskit/passmanager/flow_controllers.py +116 -0
  283. qiskit/passmanager/passmanager.py +333 -0
  284. qiskit/primitives/__init__.py +481 -0
  285. qiskit/primitives/backend_estimator.py +486 -0
  286. qiskit/primitives/backend_estimator_v2.py +434 -0
  287. qiskit/primitives/backend_sampler.py +222 -0
  288. qiskit/primitives/backend_sampler_v2.py +339 -0
  289. qiskit/primitives/base/__init__.py +20 -0
  290. qiskit/primitives/base/base_estimator.py +252 -0
  291. qiskit/primitives/base/base_primitive.py +45 -0
  292. qiskit/primitives/base/base_primitive_job.py +78 -0
  293. qiskit/primitives/base/base_result.py +65 -0
  294. qiskit/primitives/base/base_sampler.py +204 -0
  295. qiskit/primitives/base/estimator_result.py +46 -0
  296. qiskit/primitives/base/sampler_result.py +45 -0
  297. qiskit/primitives/base/validation.py +231 -0
  298. qiskit/primitives/containers/__init__.py +26 -0
  299. qiskit/primitives/containers/bindings_array.py +389 -0
  300. qiskit/primitives/containers/bit_array.py +741 -0
  301. qiskit/primitives/containers/data_bin.py +173 -0
  302. qiskit/primitives/containers/estimator_pub.py +222 -0
  303. qiskit/primitives/containers/object_array.py +94 -0
  304. qiskit/primitives/containers/observables_array.py +279 -0
  305. qiskit/primitives/containers/primitive_result.py +53 -0
  306. qiskit/primitives/containers/pub_result.py +51 -0
  307. qiskit/primitives/containers/sampler_pub.py +193 -0
  308. qiskit/primitives/containers/sampler_pub_result.py +74 -0
  309. qiskit/primitives/containers/shape.py +129 -0
  310. qiskit/primitives/estimator.py +172 -0
  311. qiskit/primitives/primitive_job.py +81 -0
  312. qiskit/primitives/sampler.py +162 -0
  313. qiskit/primitives/statevector_estimator.py +174 -0
  314. qiskit/primitives/statevector_sampler.py +292 -0
  315. qiskit/primitives/utils.py +247 -0
  316. qiskit/providers/__init__.py +803 -0
  317. qiskit/providers/backend.py +667 -0
  318. qiskit/providers/backend_compat.py +472 -0
  319. qiskit/providers/basic_provider/__init__.py +45 -0
  320. qiskit/providers/basic_provider/basic_provider.py +101 -0
  321. qiskit/providers/basic_provider/basic_provider_job.py +65 -0
  322. qiskit/providers/basic_provider/basic_provider_tools.py +218 -0
  323. qiskit/providers/basic_provider/basic_simulator.py +821 -0
  324. qiskit/providers/basic_provider/exceptions.py +30 -0
  325. qiskit/providers/exceptions.py +45 -0
  326. qiskit/providers/fake_provider/__init__.py +105 -0
  327. qiskit/providers/fake_provider/backends_v1/__init__.py +22 -0
  328. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +18 -0
  329. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +1 -0
  330. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +1 -0
  331. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +37 -0
  332. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +1 -0
  333. qiskit/providers/fake_provider/backends_v1/fake_20q/__init__.py +18 -0
  334. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +1 -0
  335. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +43 -0
  336. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +1 -0
  337. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +18 -0
  338. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +1 -0
  339. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +1 -0
  340. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +50 -0
  341. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +1 -0
  342. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +18 -0
  343. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +1 -0
  344. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +41 -0
  345. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +1 -0
  346. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +18 -0
  347. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +1 -0
  348. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +1 -0
  349. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +44 -0
  350. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +1 -0
  351. qiskit/providers/fake_provider/fake_1q.py +91 -0
  352. qiskit/providers/fake_provider/fake_backend.py +165 -0
  353. qiskit/providers/fake_provider/fake_openpulse_2q.py +391 -0
  354. qiskit/providers/fake_provider/fake_openpulse_3q.py +340 -0
  355. qiskit/providers/fake_provider/fake_pulse_backend.py +49 -0
  356. qiskit/providers/fake_provider/fake_qasm_backend.py +77 -0
  357. qiskit/providers/fake_provider/generic_backend_v2.py +1035 -0
  358. qiskit/providers/fake_provider/utils/__init__.py +15 -0
  359. qiskit/providers/fake_provider/utils/backend_converter.py +150 -0
  360. qiskit/providers/fake_provider/utils/json_decoder.py +109 -0
  361. qiskit/providers/job.py +147 -0
  362. qiskit/providers/jobstatus.py +30 -0
  363. qiskit/providers/models/__init__.py +89 -0
  364. qiskit/providers/models/backendconfiguration.py +1040 -0
  365. qiskit/providers/models/backendproperties.py +517 -0
  366. qiskit/providers/models/backendstatus.py +94 -0
  367. qiskit/providers/models/jobstatus.py +66 -0
  368. qiskit/providers/models/pulsedefaults.py +305 -0
  369. qiskit/providers/options.py +273 -0
  370. qiskit/providers/provider.py +95 -0
  371. qiskit/providers/providerutils.py +110 -0
  372. qiskit/pulse/__init__.py +158 -0
  373. qiskit/pulse/builder.py +2254 -0
  374. qiskit/pulse/calibration_entries.py +381 -0
  375. qiskit/pulse/channels.py +227 -0
  376. qiskit/pulse/configuration.py +245 -0
  377. qiskit/pulse/exceptions.py +45 -0
  378. qiskit/pulse/filters.py +309 -0
  379. qiskit/pulse/instruction_schedule_map.py +424 -0
  380. qiskit/pulse/instructions/__init__.py +67 -0
  381. qiskit/pulse/instructions/acquire.py +150 -0
  382. qiskit/pulse/instructions/delay.py +71 -0
  383. qiskit/pulse/instructions/directives.py +154 -0
  384. qiskit/pulse/instructions/frequency.py +135 -0
  385. qiskit/pulse/instructions/instruction.py +270 -0
  386. qiskit/pulse/instructions/phase.py +152 -0
  387. qiskit/pulse/instructions/play.py +99 -0
  388. qiskit/pulse/instructions/reference.py +100 -0
  389. qiskit/pulse/instructions/snapshot.py +82 -0
  390. qiskit/pulse/library/__init__.py +97 -0
  391. qiskit/pulse/library/continuous.py +430 -0
  392. qiskit/pulse/library/pulse.py +148 -0
  393. qiskit/pulse/library/samplers/__init__.py +15 -0
  394. qiskit/pulse/library/samplers/decorators.py +295 -0
  395. qiskit/pulse/library/samplers/strategies.py +71 -0
  396. qiskit/pulse/library/symbolic_pulses.py +1988 -0
  397. qiskit/pulse/library/waveform.py +136 -0
  398. qiskit/pulse/macros.py +262 -0
  399. qiskit/pulse/parameter_manager.py +445 -0
  400. qiskit/pulse/parser.py +314 -0
  401. qiskit/pulse/reference_manager.py +58 -0
  402. qiskit/pulse/schedule.py +1854 -0
  403. qiskit/pulse/transforms/__init__.py +106 -0
  404. qiskit/pulse/transforms/alignments.py +406 -0
  405. qiskit/pulse/transforms/base_transforms.py +71 -0
  406. qiskit/pulse/transforms/canonicalization.py +498 -0
  407. qiskit/pulse/transforms/dag.py +122 -0
  408. qiskit/pulse/utils.py +149 -0
  409. qiskit/qasm/libs/dummy/stdgates.inc +75 -0
  410. qiskit/qasm/libs/qelib1.inc +266 -0
  411. qiskit/qasm/libs/stdgates.inc +82 -0
  412. qiskit/qasm2/__init__.py +654 -0
  413. qiskit/qasm2/exceptions.py +27 -0
  414. qiskit/qasm2/export.py +372 -0
  415. qiskit/qasm2/parse.py +452 -0
  416. qiskit/qasm3/__init__.py +367 -0
  417. qiskit/qasm3/ast.py +738 -0
  418. qiskit/qasm3/exceptions.py +27 -0
  419. qiskit/qasm3/experimental.py +70 -0
  420. qiskit/qasm3/exporter.py +1299 -0
  421. qiskit/qasm3/printer.py +577 -0
  422. qiskit/qobj/__init__.py +75 -0
  423. qiskit/qobj/common.py +81 -0
  424. qiskit/qobj/converters/__init__.py +18 -0
  425. qiskit/qobj/converters/lo_config.py +177 -0
  426. qiskit/qobj/converters/pulse_instruction.py +897 -0
  427. qiskit/qobj/pulse_qobj.py +709 -0
  428. qiskit/qobj/qasm_qobj.py +708 -0
  429. qiskit/qobj/utils.py +46 -0
  430. qiskit/qpy/__init__.py +1822 -0
  431. qiskit/qpy/binary_io/__init__.py +36 -0
  432. qiskit/qpy/binary_io/circuits.py +1475 -0
  433. qiskit/qpy/binary_io/schedules.py +635 -0
  434. qiskit/qpy/binary_io/value.py +1025 -0
  435. qiskit/qpy/common.py +350 -0
  436. qiskit/qpy/exceptions.py +53 -0
  437. qiskit/qpy/formats.py +401 -0
  438. qiskit/qpy/interface.py +377 -0
  439. qiskit/qpy/type_keys.py +572 -0
  440. qiskit/quantum_info/__init__.py +162 -0
  441. qiskit/quantum_info/analysis/__init__.py +17 -0
  442. qiskit/quantum_info/analysis/average.py +47 -0
  443. qiskit/quantum_info/analysis/distance.py +102 -0
  444. qiskit/quantum_info/analysis/make_observable.py +44 -0
  445. qiskit/quantum_info/analysis/z2_symmetries.py +484 -0
  446. qiskit/quantum_info/operators/__init__.py +28 -0
  447. qiskit/quantum_info/operators/base_operator.py +145 -0
  448. qiskit/quantum_info/operators/channel/__init__.py +29 -0
  449. qiskit/quantum_info/operators/channel/chi.py +191 -0
  450. qiskit/quantum_info/operators/channel/choi.py +218 -0
  451. qiskit/quantum_info/operators/channel/kraus.py +337 -0
  452. qiskit/quantum_info/operators/channel/ptm.py +204 -0
  453. qiskit/quantum_info/operators/channel/quantum_channel.py +348 -0
  454. qiskit/quantum_info/operators/channel/stinespring.py +296 -0
  455. qiskit/quantum_info/operators/channel/superop.py +377 -0
  456. qiskit/quantum_info/operators/channel/transformations.py +475 -0
  457. qiskit/quantum_info/operators/custom_iterator.py +48 -0
  458. qiskit/quantum_info/operators/dihedral/__init__.py +18 -0
  459. qiskit/quantum_info/operators/dihedral/dihedral.py +509 -0
  460. qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +216 -0
  461. qiskit/quantum_info/operators/dihedral/polynomial.py +313 -0
  462. qiskit/quantum_info/operators/dihedral/random.py +64 -0
  463. qiskit/quantum_info/operators/linear_op.py +25 -0
  464. qiskit/quantum_info/operators/measures.py +418 -0
  465. qiskit/quantum_info/operators/mixins/__init__.py +52 -0
  466. qiskit/quantum_info/operators/mixins/adjoint.py +52 -0
  467. qiskit/quantum_info/operators/mixins/group.py +171 -0
  468. qiskit/quantum_info/operators/mixins/linear.py +84 -0
  469. qiskit/quantum_info/operators/mixins/multiply.py +62 -0
  470. qiskit/quantum_info/operators/mixins/tolerances.py +72 -0
  471. qiskit/quantum_info/operators/op_shape.py +525 -0
  472. qiskit/quantum_info/operators/operator.py +865 -0
  473. qiskit/quantum_info/operators/operator_utils.py +76 -0
  474. qiskit/quantum_info/operators/predicates.py +183 -0
  475. qiskit/quantum_info/operators/random.py +154 -0
  476. qiskit/quantum_info/operators/scalar_op.py +254 -0
  477. qiskit/quantum_info/operators/symplectic/__init__.py +23 -0
  478. qiskit/quantum_info/operators/symplectic/base_pauli.py +719 -0
  479. qiskit/quantum_info/operators/symplectic/clifford.py +1030 -0
  480. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +558 -0
  481. qiskit/quantum_info/operators/symplectic/pauli.py +753 -0
  482. qiskit/quantum_info/operators/symplectic/pauli_list.py +1230 -0
  483. qiskit/quantum_info/operators/symplectic/pauli_utils.py +40 -0
  484. qiskit/quantum_info/operators/symplectic/random.py +117 -0
  485. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1196 -0
  486. qiskit/quantum_info/operators/utils/__init__.py +20 -0
  487. qiskit/quantum_info/operators/utils/anti_commutator.py +36 -0
  488. qiskit/quantum_info/operators/utils/commutator.py +36 -0
  489. qiskit/quantum_info/operators/utils/double_commutator.py +76 -0
  490. qiskit/quantum_info/quaternion.py +156 -0
  491. qiskit/quantum_info/random.py +26 -0
  492. qiskit/quantum_info/states/__init__.py +28 -0
  493. qiskit/quantum_info/states/densitymatrix.py +845 -0
  494. qiskit/quantum_info/states/measures.py +288 -0
  495. qiskit/quantum_info/states/quantum_state.py +503 -0
  496. qiskit/quantum_info/states/random.py +157 -0
  497. qiskit/quantum_info/states/stabilizerstate.py +773 -0
  498. qiskit/quantum_info/states/statevector.py +958 -0
  499. qiskit/quantum_info/states/utils.py +247 -0
  500. qiskit/result/__init__.py +73 -0
  501. qiskit/result/counts.py +189 -0
  502. qiskit/result/distributions/__init__.py +17 -0
  503. qiskit/result/distributions/probability.py +100 -0
  504. qiskit/result/distributions/quasi.py +154 -0
  505. qiskit/result/exceptions.py +40 -0
  506. qiskit/result/mitigation/__init__.py +13 -0
  507. qiskit/result/mitigation/base_readout_mitigator.py +79 -0
  508. qiskit/result/mitigation/correlated_readout_mitigator.py +277 -0
  509. qiskit/result/mitigation/local_readout_mitigator.py +328 -0
  510. qiskit/result/mitigation/utils.py +217 -0
  511. qiskit/result/models.py +234 -0
  512. qiskit/result/postprocess.py +239 -0
  513. qiskit/result/result.py +392 -0
  514. qiskit/result/sampled_expval.py +75 -0
  515. qiskit/result/utils.py +295 -0
  516. qiskit/scheduler/__init__.py +40 -0
  517. qiskit/scheduler/config.py +37 -0
  518. qiskit/scheduler/lowering.py +187 -0
  519. qiskit/scheduler/methods/__init__.py +15 -0
  520. qiskit/scheduler/methods/basic.py +140 -0
  521. qiskit/scheduler/schedule_circuit.py +69 -0
  522. qiskit/scheduler/sequence.py +104 -0
  523. qiskit/synthesis/__init__.py +220 -0
  524. qiskit/synthesis/arithmetic/__init__.py +16 -0
  525. qiskit/synthesis/arithmetic/adders/__init__.py +17 -0
  526. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
  527. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +103 -0
  528. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
  529. qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
  530. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +102 -0
  531. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +99 -0
  532. qiskit/synthesis/clifford/__init__.py +19 -0
  533. qiskit/synthesis/clifford/clifford_decompose_ag.py +178 -0
  534. qiskit/synthesis/clifford/clifford_decompose_bm.py +46 -0
  535. qiskit/synthesis/clifford/clifford_decompose_full.py +64 -0
  536. qiskit/synthesis/clifford/clifford_decompose_greedy.py +58 -0
  537. qiskit/synthesis/clifford/clifford_decompose_layers.py +447 -0
  538. qiskit/synthesis/cnotdihedral/__init__.py +17 -0
  539. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +52 -0
  540. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +141 -0
  541. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_two_qubits.py +266 -0
  542. qiskit/synthesis/discrete_basis/__init__.py +16 -0
  543. qiskit/synthesis/discrete_basis/commutator_decompose.py +241 -0
  544. qiskit/synthesis/discrete_basis/gate_sequence.py +415 -0
  545. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +163 -0
  546. qiskit/synthesis/discrete_basis/solovay_kitaev.py +217 -0
  547. qiskit/synthesis/evolution/__init__.py +21 -0
  548. qiskit/synthesis/evolution/evolution_synthesis.py +48 -0
  549. qiskit/synthesis/evolution/lie_trotter.py +117 -0
  550. qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
  551. qiskit/synthesis/evolution/pauli_network.py +80 -0
  552. qiskit/synthesis/evolution/product_formula.py +311 -0
  553. qiskit/synthesis/evolution/qdrift.py +138 -0
  554. qiskit/synthesis/evolution/suzuki_trotter.py +215 -0
  555. qiskit/synthesis/linear/__init__.py +26 -0
  556. qiskit/synthesis/linear/cnot_synth.py +69 -0
  557. qiskit/synthesis/linear/linear_circuits_utils.py +128 -0
  558. qiskit/synthesis/linear/linear_depth_lnn.py +276 -0
  559. qiskit/synthesis/linear/linear_matrix_utils.py +27 -0
  560. qiskit/synthesis/linear_phase/__init__.py +17 -0
  561. qiskit/synthesis/linear_phase/cnot_phase_synth.py +206 -0
  562. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +262 -0
  563. qiskit/synthesis/linear_phase/cz_depth_lnn.py +58 -0
  564. qiskit/synthesis/multi_controlled/__init__.py +24 -0
  565. qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
  566. qiskit/synthesis/multi_controlled/mcx_synthesis.py +356 -0
  567. qiskit/synthesis/one_qubit/__init__.py +15 -0
  568. qiskit/synthesis/one_qubit/one_qubit_decompose.py +288 -0
  569. qiskit/synthesis/permutation/__init__.py +18 -0
  570. qiskit/synthesis/permutation/permutation_full.py +78 -0
  571. qiskit/synthesis/permutation/permutation_lnn.py +54 -0
  572. qiskit/synthesis/permutation/permutation_reverse_lnn.py +93 -0
  573. qiskit/synthesis/permutation/permutation_utils.py +16 -0
  574. qiskit/synthesis/qft/__init__.py +16 -0
  575. qiskit/synthesis/qft/qft_decompose_full.py +97 -0
  576. qiskit/synthesis/qft/qft_decompose_lnn.py +79 -0
  577. qiskit/synthesis/stabilizer/__init__.py +16 -0
  578. qiskit/synthesis/stabilizer/stabilizer_circuit.py +149 -0
  579. qiskit/synthesis/stabilizer/stabilizer_decompose.py +194 -0
  580. qiskit/synthesis/two_qubit/__init__.py +19 -0
  581. qiskit/synthesis/two_qubit/local_invariance.py +63 -0
  582. qiskit/synthesis/two_qubit/two_qubit_decompose.py +700 -0
  583. qiskit/synthesis/two_qubit/xx_decompose/__init__.py +19 -0
  584. qiskit/synthesis/two_qubit/xx_decompose/circuits.py +300 -0
  585. qiskit/synthesis/two_qubit/xx_decompose/decomposer.py +324 -0
  586. qiskit/synthesis/two_qubit/xx_decompose/embodiments.py +163 -0
  587. qiskit/synthesis/two_qubit/xx_decompose/paths.py +412 -0
  588. qiskit/synthesis/two_qubit/xx_decompose/polytopes.py +262 -0
  589. qiskit/synthesis/two_qubit/xx_decompose/utilities.py +40 -0
  590. qiskit/synthesis/two_qubit/xx_decompose/weyl.py +133 -0
  591. qiskit/synthesis/unitary/__init__.py +13 -0
  592. qiskit/synthesis/unitary/aqc/__init__.py +177 -0
  593. qiskit/synthesis/unitary/aqc/approximate.py +116 -0
  594. qiskit/synthesis/unitary/aqc/aqc.py +175 -0
  595. qiskit/synthesis/unitary/aqc/cnot_structures.py +300 -0
  596. qiskit/synthesis/unitary/aqc/cnot_unit_circuit.py +103 -0
  597. qiskit/synthesis/unitary/aqc/cnot_unit_objective.py +299 -0
  598. qiskit/synthesis/unitary/aqc/elementary_operations.py +108 -0
  599. qiskit/synthesis/unitary/aqc/fast_gradient/__init__.py +164 -0
  600. qiskit/synthesis/unitary/aqc/fast_gradient/fast_grad_utils.py +237 -0
  601. qiskit/synthesis/unitary/aqc/fast_gradient/fast_gradient.py +226 -0
  602. qiskit/synthesis/unitary/aqc/fast_gradient/layer.py +370 -0
  603. qiskit/synthesis/unitary/aqc/fast_gradient/pmatrix.py +312 -0
  604. qiskit/synthesis/unitary/qsd.py +288 -0
  605. qiskit/transpiler/__init__.py +1290 -0
  606. qiskit/transpiler/basepasses.py +221 -0
  607. qiskit/transpiler/coupling.py +500 -0
  608. qiskit/transpiler/exceptions.py +59 -0
  609. qiskit/transpiler/instruction_durations.py +281 -0
  610. qiskit/transpiler/layout.py +737 -0
  611. qiskit/transpiler/passes/__init__.py +312 -0
  612. qiskit/transpiler/passes/analysis/__init__.py +23 -0
  613. qiskit/transpiler/passes/analysis/count_ops.py +30 -0
  614. qiskit/transpiler/passes/analysis/count_ops_longest_path.py +26 -0
  615. qiskit/transpiler/passes/analysis/dag_longest_path.py +24 -0
  616. qiskit/transpiler/passes/analysis/depth.py +33 -0
  617. qiskit/transpiler/passes/analysis/num_qubits.py +26 -0
  618. qiskit/transpiler/passes/analysis/num_tensor_factors.py +26 -0
  619. qiskit/transpiler/passes/analysis/resource_estimation.py +41 -0
  620. qiskit/transpiler/passes/analysis/size.py +36 -0
  621. qiskit/transpiler/passes/analysis/width.py +27 -0
  622. qiskit/transpiler/passes/basis/__init__.py +19 -0
  623. qiskit/transpiler/passes/basis/basis_translator.py +137 -0
  624. qiskit/transpiler/passes/basis/decompose.py +131 -0
  625. qiskit/transpiler/passes/basis/translate_parameterized.py +175 -0
  626. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +88 -0
  627. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +109 -0
  628. qiskit/transpiler/passes/calibration/__init__.py +17 -0
  629. qiskit/transpiler/passes/calibration/base_builder.py +79 -0
  630. qiskit/transpiler/passes/calibration/builders.py +20 -0
  631. qiskit/transpiler/passes/calibration/exceptions.py +22 -0
  632. qiskit/transpiler/passes/calibration/pulse_gate.py +100 -0
  633. qiskit/transpiler/passes/calibration/rx_builder.py +164 -0
  634. qiskit/transpiler/passes/calibration/rzx_builder.py +411 -0
  635. qiskit/transpiler/passes/calibration/rzx_templates.py +51 -0
  636. qiskit/transpiler/passes/layout/__init__.py +26 -0
  637. qiskit/transpiler/passes/layout/_csp_custom_solver.py +65 -0
  638. qiskit/transpiler/passes/layout/apply_layout.py +123 -0
  639. qiskit/transpiler/passes/layout/csp_layout.py +132 -0
  640. qiskit/transpiler/passes/layout/dense_layout.py +202 -0
  641. qiskit/transpiler/passes/layout/disjoint_utils.py +219 -0
  642. qiskit/transpiler/passes/layout/enlarge_with_ancilla.py +49 -0
  643. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +117 -0
  644. qiskit/transpiler/passes/layout/layout_2q_distance.py +77 -0
  645. qiskit/transpiler/passes/layout/sabre_layout.py +487 -0
  646. qiskit/transpiler/passes/layout/sabre_pre_layout.py +225 -0
  647. qiskit/transpiler/passes/layout/set_layout.py +69 -0
  648. qiskit/transpiler/passes/layout/trivial_layout.py +66 -0
  649. qiskit/transpiler/passes/layout/vf2_layout.py +263 -0
  650. qiskit/transpiler/passes/layout/vf2_post_layout.py +419 -0
  651. qiskit/transpiler/passes/layout/vf2_utils.py +260 -0
  652. qiskit/transpiler/passes/optimization/__init__.py +43 -0
  653. qiskit/transpiler/passes/optimization/_gate_extension.py +80 -0
  654. qiskit/transpiler/passes/optimization/collect_1q_runs.py +31 -0
  655. qiskit/transpiler/passes/optimization/collect_2q_blocks.py +35 -0
  656. qiskit/transpiler/passes/optimization/collect_and_collapse.py +115 -0
  657. qiskit/transpiler/passes/optimization/collect_cliffords.py +104 -0
  658. qiskit/transpiler/passes/optimization/collect_linear_functions.py +80 -0
  659. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +227 -0
  660. qiskit/transpiler/passes/optimization/commutation_analysis.py +44 -0
  661. qiskit/transpiler/passes/optimization/commutative_cancellation.py +82 -0
  662. qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +140 -0
  663. qiskit/transpiler/passes/optimization/consolidate_blocks.py +149 -0
  664. qiskit/transpiler/passes/optimization/cx_cancellation.py +65 -0
  665. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +162 -0
  666. qiskit/transpiler/passes/optimization/elide_permutations.py +91 -0
  667. qiskit/transpiler/passes/optimization/hoare_opt.py +420 -0
  668. qiskit/transpiler/passes/optimization/inverse_cancellation.py +95 -0
  669. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +149 -0
  670. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +268 -0
  671. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +254 -0
  672. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +384 -0
  673. qiskit/transpiler/passes/optimization/optimize_annotated.py +448 -0
  674. qiskit/transpiler/passes/optimization/optimize_cliffords.py +89 -0
  675. qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +71 -0
  676. qiskit/transpiler/passes/optimization/remove_diagonal_gates_before_measure.py +41 -0
  677. qiskit/transpiler/passes/optimization/remove_final_reset.py +37 -0
  678. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +69 -0
  679. qiskit/transpiler/passes/optimization/remove_reset_in_zero_state.py +37 -0
  680. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +47 -0
  681. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +40 -0
  682. qiskit/transpiler/passes/optimization/template_matching/__init__.py +19 -0
  683. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +749 -0
  684. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +452 -0
  685. qiskit/transpiler/passes/optimization/template_matching/maximal_matches.py +77 -0
  686. qiskit/transpiler/passes/optimization/template_matching/template_matching.py +370 -0
  687. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +638 -0
  688. qiskit/transpiler/passes/optimization/template_optimization.py +158 -0
  689. qiskit/transpiler/passes/routing/__init__.py +22 -0
  690. qiskit/transpiler/passes/routing/algorithms/__init__.py +33 -0
  691. qiskit/transpiler/passes/routing/algorithms/token_swapper.py +105 -0
  692. qiskit/transpiler/passes/routing/algorithms/types.py +46 -0
  693. qiskit/transpiler/passes/routing/algorithms/util.py +103 -0
  694. qiskit/transpiler/passes/routing/basic_swap.py +166 -0
  695. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/__init__.py +25 -0
  696. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_block.py +60 -0
  697. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +395 -0
  698. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/pauli_2q_evolution_commutation.py +145 -0
  699. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +306 -0
  700. qiskit/transpiler/passes/routing/layout_transformation.py +119 -0
  701. qiskit/transpiler/passes/routing/lookahead_swap.py +390 -0
  702. qiskit/transpiler/passes/routing/sabre_swap.py +447 -0
  703. qiskit/transpiler/passes/routing/star_prerouting.py +392 -0
  704. qiskit/transpiler/passes/routing/stochastic_swap.py +532 -0
  705. qiskit/transpiler/passes/routing/utils.py +35 -0
  706. qiskit/transpiler/passes/scheduling/__init__.py +27 -0
  707. qiskit/transpiler/passes/scheduling/alap.py +153 -0
  708. qiskit/transpiler/passes/scheduling/alignments/__init__.py +81 -0
  709. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +255 -0
  710. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +78 -0
  711. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +107 -0
  712. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +250 -0
  713. qiskit/transpiler/passes/scheduling/asap.py +175 -0
  714. qiskit/transpiler/passes/scheduling/base_scheduler.py +310 -0
  715. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +312 -0
  716. qiskit/transpiler/passes/scheduling/padding/__init__.py +16 -0
  717. qiskit/transpiler/passes/scheduling/padding/base_padding.py +256 -0
  718. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +452 -0
  719. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +82 -0
  720. qiskit/transpiler/passes/scheduling/scheduling/__init__.py +17 -0
  721. qiskit/transpiler/passes/scheduling/scheduling/alap.py +127 -0
  722. qiskit/transpiler/passes/scheduling/scheduling/asap.py +131 -0
  723. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +94 -0
  724. qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
  725. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +165 -0
  726. qiskit/transpiler/passes/synthesis/__init__.py +20 -0
  727. qiskit/transpiler/passes/synthesis/aqc_plugin.py +153 -0
  728. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +854 -0
  729. qiskit/transpiler/passes/synthesis/hls_plugins.py +1559 -0
  730. qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +41 -0
  731. qiskit/transpiler/passes/synthesis/plugin.py +734 -0
  732. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +297 -0
  733. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +1076 -0
  734. qiskit/transpiler/passes/utils/__init__.py +33 -0
  735. qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +41 -0
  736. qiskit/transpiler/passes/utils/check_gate_direction.py +52 -0
  737. qiskit/transpiler/passes/utils/check_map.py +78 -0
  738. qiskit/transpiler/passes/utils/contains_instruction.py +45 -0
  739. qiskit/transpiler/passes/utils/control_flow.py +65 -0
  740. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +93 -0
  741. qiskit/transpiler/passes/utils/dag_fixed_point.py +36 -0
  742. qiskit/transpiler/passes/utils/error.py +69 -0
  743. qiskit/transpiler/passes/utils/filter_op_nodes.py +65 -0
  744. qiskit/transpiler/passes/utils/fixed_point.py +48 -0
  745. qiskit/transpiler/passes/utils/gate_direction.py +86 -0
  746. qiskit/transpiler/passes/utils/gates_basis.py +51 -0
  747. qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +163 -0
  748. qiskit/transpiler/passes/utils/minimum_point.py +118 -0
  749. qiskit/transpiler/passes/utils/remove_barriers.py +49 -0
  750. qiskit/transpiler/passes/utils/remove_final_measurements.py +114 -0
  751. qiskit/transpiler/passes/utils/unroll_forloops.py +81 -0
  752. qiskit/transpiler/passmanager.py +490 -0
  753. qiskit/transpiler/passmanager_config.py +216 -0
  754. qiskit/transpiler/preset_passmanagers/__init__.py +73 -0
  755. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +1045 -0
  756. qiskit/transpiler/preset_passmanagers/common.py +649 -0
  757. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +626 -0
  758. qiskit/transpiler/preset_passmanagers/level0.py +113 -0
  759. qiskit/transpiler/preset_passmanagers/level1.py +120 -0
  760. qiskit/transpiler/preset_passmanagers/level2.py +119 -0
  761. qiskit/transpiler/preset_passmanagers/level3.py +119 -0
  762. qiskit/transpiler/preset_passmanagers/plugin.py +353 -0
  763. qiskit/transpiler/target.py +1319 -0
  764. qiskit/transpiler/timing_constraints.py +59 -0
  765. qiskit/user_config.py +262 -0
  766. qiskit/utils/__init__.py +89 -0
  767. qiskit/utils/classtools.py +146 -0
  768. qiskit/utils/deprecate_pulse.py +119 -0
  769. qiskit/utils/deprecation.py +490 -0
  770. qiskit/utils/lazy_tester.py +363 -0
  771. qiskit/utils/multiprocessing.py +56 -0
  772. qiskit/utils/optionals.py +347 -0
  773. qiskit/utils/parallel.py +191 -0
  774. qiskit/utils/units.py +143 -0
  775. qiskit/version.py +84 -0
  776. qiskit/visualization/__init__.py +288 -0
  777. qiskit/visualization/array.py +204 -0
  778. qiskit/visualization/bloch.py +778 -0
  779. qiskit/visualization/circuit/__init__.py +15 -0
  780. qiskit/visualization/circuit/_utils.py +675 -0
  781. qiskit/visualization/circuit/circuit_visualization.py +727 -0
  782. qiskit/visualization/circuit/latex.py +661 -0
  783. qiskit/visualization/circuit/matplotlib.py +2029 -0
  784. qiskit/visualization/circuit/qcstyle.py +278 -0
  785. qiskit/visualization/circuit/styles/__init__.py +13 -0
  786. qiskit/visualization/circuit/styles/bw.json +202 -0
  787. qiskit/visualization/circuit/styles/clifford.json +202 -0
  788. qiskit/visualization/circuit/styles/iqp-dark.json +214 -0
  789. qiskit/visualization/circuit/styles/iqp.json +214 -0
  790. qiskit/visualization/circuit/styles/textbook.json +202 -0
  791. qiskit/visualization/circuit/text.py +1844 -0
  792. qiskit/visualization/circuit_visualization.py +19 -0
  793. qiskit/visualization/counts_visualization.py +481 -0
  794. qiskit/visualization/dag_visualization.py +316 -0
  795. qiskit/visualization/exceptions.py +21 -0
  796. qiskit/visualization/gate_map.py +1485 -0
  797. qiskit/visualization/library.py +37 -0
  798. qiskit/visualization/pass_manager_visualization.py +308 -0
  799. qiskit/visualization/pulse_v2/__init__.py +21 -0
  800. qiskit/visualization/pulse_v2/core.py +901 -0
  801. qiskit/visualization/pulse_v2/device_info.py +173 -0
  802. qiskit/visualization/pulse_v2/drawings.py +253 -0
  803. qiskit/visualization/pulse_v2/events.py +254 -0
  804. qiskit/visualization/pulse_v2/generators/__init__.py +40 -0
  805. qiskit/visualization/pulse_v2/generators/barrier.py +76 -0
  806. qiskit/visualization/pulse_v2/generators/chart.py +208 -0
  807. qiskit/visualization/pulse_v2/generators/frame.py +436 -0
  808. qiskit/visualization/pulse_v2/generators/snapshot.py +133 -0
  809. qiskit/visualization/pulse_v2/generators/waveform.py +645 -0
  810. qiskit/visualization/pulse_v2/interface.py +458 -0
  811. qiskit/visualization/pulse_v2/layouts.py +387 -0
  812. qiskit/visualization/pulse_v2/plotters/__init__.py +17 -0
  813. qiskit/visualization/pulse_v2/plotters/base_plotter.py +53 -0
  814. qiskit/visualization/pulse_v2/plotters/matplotlib.py +201 -0
  815. qiskit/visualization/pulse_v2/stylesheet.py +312 -0
  816. qiskit/visualization/pulse_v2/types.py +242 -0
  817. qiskit/visualization/state_visualization.py +1518 -0
  818. qiskit/visualization/timeline/__init__.py +21 -0
  819. qiskit/visualization/timeline/core.py +480 -0
  820. qiskit/visualization/timeline/drawings.py +260 -0
  821. qiskit/visualization/timeline/generators.py +506 -0
  822. qiskit/visualization/timeline/interface.py +436 -0
  823. qiskit/visualization/timeline/layouts.py +115 -0
  824. qiskit/visualization/timeline/plotters/__init__.py +16 -0
  825. qiskit/visualization/timeline/plotters/base_plotter.py +58 -0
  826. qiskit/visualization/timeline/plotters/matplotlib.py +192 -0
  827. qiskit/visualization/timeline/stylesheet.py +301 -0
  828. qiskit/visualization/timeline/types.py +148 -0
  829. qiskit/visualization/transition_visualization.py +369 -0
  830. qiskit/visualization/utils.py +49 -0
  831. qiskit-1.3.0.dist-info/LICENSE.txt +203 -0
  832. qiskit-1.3.0.dist-info/METADATA +222 -0
  833. qiskit-1.3.0.dist-info/RECORD +836 -0
  834. qiskit-1.3.0.dist-info/WHEEL +5 -0
  835. qiskit-1.3.0.dist-info/entry_points.txt +76 -0
  836. qiskit-1.3.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,533 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2017, 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
+ # pylint: disable=invalid-sequence-index
14
+
15
+ """Circuit transpile function"""
16
+ import logging
17
+ from time import time
18
+ from typing import List, Union, Dict, Callable, Any, Optional, TypeVar
19
+ import warnings
20
+
21
+ from qiskit import user_config
22
+ from qiskit.circuit.quantumcircuit import QuantumCircuit
23
+ from qiskit.dagcircuit import DAGCircuit
24
+ from qiskit.providers.backend import Backend
25
+ from qiskit.providers.backend_compat import BackendV2Converter
26
+ from qiskit.providers.models.backendproperties import BackendProperties
27
+ from qiskit.pulse import Schedule, InstructionScheduleMap
28
+ from qiskit.transpiler import Layout, CouplingMap, PropertySet
29
+ from qiskit.transpiler.basepasses import BasePass
30
+ from qiskit.transpiler.exceptions import TranspilerError, CircuitTooWideForTarget
31
+ from qiskit.transpiler.instruction_durations import InstructionDurationsType
32
+ from qiskit.transpiler.passes.synthesis.high_level_synthesis import HLSConfig
33
+ from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
34
+ from qiskit.transpiler.target import Target
35
+ from qiskit.utils import deprecate_arg
36
+ from qiskit.utils.deprecate_pulse import deprecate_pulse_arg
37
+
38
+ logger = logging.getLogger(__name__)
39
+
40
+ _CircuitT = TypeVar("_CircuitT", bound=Union[QuantumCircuit, List[QuantumCircuit]])
41
+
42
+
43
+ @deprecate_arg(
44
+ name="instruction_durations",
45
+ since="1.3",
46
+ package_name="Qiskit",
47
+ removal_timeline="in Qiskit 2.0",
48
+ additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
49
+ "with defined instruction durations with "
50
+ "`Target.from_configuration(..., instruction_durations=...)`",
51
+ )
52
+ @deprecate_arg(
53
+ name="timing_constraints",
54
+ since="1.3",
55
+ package_name="Qiskit",
56
+ removal_timeline="in Qiskit 2.0",
57
+ additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
58
+ "with defined timing constraints with "
59
+ "`Target.from_configuration(..., timing_constraints=...)`",
60
+ )
61
+ @deprecate_arg(
62
+ name="backend_properties",
63
+ since="1.3",
64
+ package_name="Qiskit",
65
+ removal_timeline="in Qiskit 2.0",
66
+ additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
67
+ "with defined properties with Target.from_configuration(..., backend_properties=...)",
68
+ )
69
+ @deprecate_pulse_arg("inst_map", predicate=lambda inst_map: inst_map is not None)
70
+ def transpile( # pylint: disable=too-many-return-statements
71
+ circuits: _CircuitT,
72
+ backend: Optional[Backend] = None,
73
+ basis_gates: Optional[List[str]] = None,
74
+ inst_map: Optional[List[InstructionScheduleMap]] = None,
75
+ coupling_map: Optional[Union[CouplingMap, List[List[int]]]] = None,
76
+ backend_properties: Optional[BackendProperties] = None,
77
+ initial_layout: Optional[Union[Layout, Dict, List]] = None,
78
+ layout_method: Optional[str] = None,
79
+ routing_method: Optional[str] = None,
80
+ translation_method: Optional[str] = None,
81
+ scheduling_method: Optional[str] = None,
82
+ instruction_durations: Optional[InstructionDurationsType] = None,
83
+ dt: Optional[float] = None,
84
+ approximation_degree: Optional[float] = 1.0,
85
+ timing_constraints: Optional[Dict[str, int]] = None,
86
+ seed_transpiler: Optional[int] = None,
87
+ optimization_level: Optional[int] = None,
88
+ callback: Optional[Callable[[BasePass, DAGCircuit, float, PropertySet, int], Any]] = None,
89
+ output_name: Optional[Union[str, List[str]]] = None,
90
+ unitary_synthesis_method: str = "default",
91
+ unitary_synthesis_plugin_config: Optional[dict] = None,
92
+ target: Optional[Target] = None,
93
+ hls_config: Optional[HLSConfig] = None,
94
+ init_method: Optional[str] = None,
95
+ optimization_method: Optional[str] = None,
96
+ ignore_backend_supplied_default_methods: bool = False,
97
+ num_processes: Optional[int] = None,
98
+ qubits_initially_zero: bool = True,
99
+ ) -> _CircuitT:
100
+ """Transpile one or more circuits, according to some desired transpilation targets.
101
+
102
+ Transpilation is potentially done in parallel using multiprocessing when ``circuits``
103
+ is a list with > 1 :class:`~.QuantumCircuit` object, depending on the local environment
104
+ and configuration.
105
+
106
+ The prioritization of transpilation target constraints works as follows: if a ``target``
107
+ input is provided, it will take priority over any ``backend`` input or loose constraints
108
+ (``basis_gates``, ``inst_map``, ``coupling_map``, ``backend_properties``, ``instruction_durations``,
109
+ ``dt`` or ``timing_constraints``). If a ``backend`` is provided together with any loose constraint
110
+ from the list above, the loose constraint will take priority over the corresponding backend
111
+ constraint. This behavior is independent of whether the ``backend`` instance is of type
112
+ :class:`.BackendV1` or :class:`.BackendV2`, as summarized in the table below. The first column
113
+ in the table summarizes the potential user-provided constraints, and each cell shows whether
114
+ the priority is assigned to that specific constraint input or another input
115
+ (`target`/`backend(V1)`/`backend(V2)`).
116
+
117
+ ============================ ========= ======================== =======================
118
+ User Provided target backend(V1) backend(V2)
119
+ ============================ ========= ======================== =======================
120
+ **basis_gates** target basis_gates basis_gates
121
+ **coupling_map** target coupling_map coupling_map
122
+ **instruction_durations** target instruction_durations instruction_durations
123
+ **inst_map** target inst_map inst_map
124
+ **dt** target dt dt
125
+ **timing_constraints** target timing_constraints timing_constraints
126
+ **backend_properties** target backend_properties backend_properties
127
+ ============================ ========= ======================== =======================
128
+
129
+ Args:
130
+ circuits: Circuit(s) to transpile
131
+ backend: If set, the transpiler will compile the input circuit to this target
132
+ device. If any other option is explicitly set (e.g., ``coupling_map``), it
133
+ will override the backend's.
134
+ basis_gates: List of basis gate names to unroll to
135
+ (e.g: ``['u1', 'u2', 'u3', 'cx']``). If ``None``, do not unroll.
136
+ inst_map: DEPRECATED. Mapping of unrolled gates to pulse schedules. If this is not provided,
137
+ transpiler tries to get from the backend. If any user defined calibration
138
+ is found in the map and this is used in a circuit, transpiler attaches
139
+ the custom gate definition to the circuit. This enables one to flexibly
140
+ override the low-level instruction implementation. This feature is available
141
+ iff the backend supports the pulse gate experiment.
142
+ coupling_map: Directed coupling map (perhaps custom) to target in mapping. If
143
+ the coupling map is symmetric, both directions need to be specified.
144
+
145
+ Multiple formats are supported:
146
+
147
+ #. ``CouplingMap`` instance
148
+ #. List, must be given as an adjacency matrix, where each entry
149
+ specifies all directed two-qubit interactions supported by backend,
150
+ e.g: ``[[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]``
151
+
152
+ backend_properties: properties returned by a backend, including information on gate
153
+ errors, readout errors, qubit coherence times, etc. Find a backend
154
+ that provides this information with: ``backend.properties()``
155
+ initial_layout: Initial position of virtual qubits on physical qubits.
156
+ If this layout makes the circuit compatible with the coupling_map
157
+ constraints, it will be used. The final layout is not guaranteed to be the same,
158
+ as the transpiler may permute qubits through swaps or other means.
159
+ Multiple formats are supported:
160
+
161
+ #. ``Layout`` instance
162
+ #. Dict
163
+ * virtual to physical::
164
+
165
+ {qr[0]: 0,
166
+ qr[1]: 3,
167
+ qr[2]: 5}
168
+
169
+ * physical to virtual::
170
+
171
+ {0: qr[0],
172
+ 3: qr[1],
173
+ 5: qr[2]}
174
+
175
+ #. List
176
+
177
+ * virtual to physical::
178
+
179
+ [0, 3, 5] # virtual qubits are ordered (in addition to named)
180
+
181
+ * physical to virtual::
182
+
183
+ [qr[0], None, None, qr[1], None, qr[2]]
184
+
185
+ layout_method: Name of layout selection pass ('trivial', 'dense', 'sabre').
186
+ This can also be the external plugin name to use for the ``layout`` stage.
187
+ You can see a list of installed plugins by using :func:`~.list_stage_plugins` with
188
+ ``"layout"`` for the ``stage_name`` argument.
189
+ routing_method: Name of routing pass
190
+ ('basic', 'lookahead', 'stochastic', 'sabre', 'none'). Note
191
+ This can also be the external plugin name to use for the ``routing`` stage.
192
+ You can see a list of installed plugins by using :func:`~.list_stage_plugins` with
193
+ ``"routing"`` for the ``stage_name`` argument.
194
+ translation_method: Name of translation pass ('unroller', 'translator', 'synthesis')
195
+ This can also be the external plugin name to use for the ``translation`` stage.
196
+ You can see a list of installed plugins by using :func:`~.list_stage_plugins` with
197
+ ``"translation"`` for the ``stage_name`` argument.
198
+ scheduling_method: Name of scheduling pass.
199
+ * ``'as_soon_as_possible'``: Schedule instructions greedily, as early as possible
200
+ on a qubit resource. (alias: ``'asap'``)
201
+ * ``'as_late_as_possible'``: Schedule instructions late, i.e. keeping qubits
202
+ in the ground state when possible. (alias: ``'alap'``)
203
+ If ``None``, no scheduling will be done. This can also be the external plugin name
204
+ to use for the ``scheduling`` stage. You can see a list of installed plugins by
205
+ using :func:`~.list_stage_plugins` with ``"scheduling"`` for the ``stage_name``
206
+ argument.
207
+ instruction_durations: Durations of instructions.
208
+ Applicable only if scheduling_method is specified.
209
+ The gate lengths defined in ``backend.properties`` are used as default.
210
+ They are overwritten if this ``instruction_durations`` is specified.
211
+ The format of ``instruction_durations`` must be as follows.
212
+ The `instruction_durations` must be given as a list of tuples
213
+ [(instruction_name, qubits, duration, unit), ...].
214
+ | [('cx', [0, 1], 12.3, 'ns'), ('u3', [0], 4.56, 'ns')]
215
+ | [('cx', [0, 1], 1000), ('u3', [0], 300)]
216
+ If unit is omitted, the default is 'dt', which is a sample time depending on backend.
217
+ If the time unit is 'dt', the duration must be an integer.
218
+ dt: Backend sample time (resolution) in seconds.
219
+ If ``None`` (default), ``backend.configuration().dt`` is used.
220
+ approximation_degree (float): heuristic dial used for circuit approximation
221
+ (1.0=no approximation, 0.0=maximal approximation)
222
+ timing_constraints: An optional control hardware restriction on instruction time resolution.
223
+ A quantum computer backend may report a set of restrictions, namely:
224
+
225
+ - granularity: An integer value representing minimum pulse gate
226
+ resolution in units of ``dt``. A user-defined pulse gate should have
227
+ duration of a multiple of this granularity value.
228
+ - min_length: An integer value representing minimum pulse gate
229
+ length in units of ``dt``. A user-defined pulse gate should be longer
230
+ than this length.
231
+ - pulse_alignment: An integer value representing a time resolution of gate
232
+ instruction starting time. Gate instruction should start at time which
233
+ is a multiple of the alignment value.
234
+ - acquire_alignment: An integer value representing a time resolution of measure
235
+ instruction starting time. Measure instruction should start at time which
236
+ is a multiple of the alignment value.
237
+
238
+ This information will be provided by the backend configuration.
239
+ If the backend doesn't have any restriction on the instruction time allocation,
240
+ then ``timing_constraints`` is None and no adjustment will be performed.
241
+ seed_transpiler: Sets random seed for the stochastic parts of the transpiler
242
+ optimization_level: How much optimization to perform on the circuits.
243
+ Higher levels generate more optimized circuits,
244
+ at the expense of longer transpilation time.
245
+
246
+ * 0: no optimization
247
+ * 1: light optimization
248
+ * 2: heavy optimization
249
+ * 3: even heavier optimization
250
+
251
+ If ``None``, level 2 will be chosen as default.
252
+ callback: A callback function that will be called after each
253
+ pass execution. The function will be called with 5 keyword
254
+ arguments,
255
+ | ``pass_``: the pass being run.
256
+ | ``dag``: the dag output of the pass.
257
+ | ``time``: the time to execute the pass.
258
+ | ``property_set``: the property set.
259
+ | ``count``: the index for the pass execution.
260
+ The exact arguments passed expose the internals of the pass manager,
261
+ and are subject to change as the pass manager internals change. If
262
+ you intend to reuse a callback function over multiple releases, be
263
+ sure to check that the arguments being passed are the same.
264
+ To use the callback feature, define a function that will
265
+ take in kwargs dict and access the variables. For example::
266
+
267
+ def callback_func(**kwargs):
268
+ pass_ = kwargs['pass_']
269
+ dag = kwargs['dag']
270
+ time = kwargs['time']
271
+ property_set = kwargs['property_set']
272
+ count = kwargs['count']
273
+ ...
274
+ transpile(circ, callback=callback_func)
275
+
276
+ output_name: A list with strings to identify the output circuits. The length of
277
+ the list should be exactly the length of the ``circuits`` parameter.
278
+ unitary_synthesis_method (str): The name of the unitary synthesis
279
+ method to use. By default ``'default'`` is used. You can see a list of installed
280
+ plugins with :func:`.unitary_synthesis_plugin_names`.
281
+ unitary_synthesis_plugin_config: An optional configuration dictionary
282
+ that will be passed directly to the unitary synthesis plugin. By
283
+ default this setting will have no effect as the default unitary
284
+ synthesis method does not take custom configuration. This should
285
+ only be necessary when a unitary synthesis plugin is specified with
286
+ the ``unitary_synthesis_method`` argument. As this is custom for each
287
+ unitary synthesis plugin refer to the plugin documentation for how
288
+ to use this option.
289
+ target: A backend transpiler target. Normally this is specified as part of
290
+ the ``backend`` argument, but if you have manually constructed a
291
+ :class:`~qiskit.transpiler.Target` object you can specify it manually here.
292
+ This will override the target from ``backend``.
293
+ hls_config: An optional configuration class
294
+ :class:`~qiskit.transpiler.passes.synthesis.HLSConfig` that will be passed directly
295
+ to :class:`~qiskit.transpiler.passes.synthesis.HighLevelSynthesis` transformation pass.
296
+ This configuration class allows to specify for various high-level objects the lists of
297
+ synthesis algorithms and their parameters.
298
+ init_method: The plugin name to use for the ``init`` stage. By default an external
299
+ plugin is not used. You can see a list of installed plugins by
300
+ using :func:`~.list_stage_plugins` with ``"init"`` for the stage
301
+ name argument.
302
+ optimization_method: The plugin name to use for the
303
+ ``optimization`` stage. By default an external
304
+ plugin is not used. You can see a list of installed plugins by
305
+ using :func:`~.list_stage_plugins` with ``"optimization"`` for the
306
+ ``stage_name`` argument.
307
+ ignore_backend_supplied_default_methods: If set to ``True`` any default methods specified by
308
+ a backend will be ignored. Some backends specify alternative default methods
309
+ to support custom compilation target-specific passes/plugins which support
310
+ backend-specific compilation techniques. If you'd prefer that these defaults were
311
+ not used this option is used to disable those backend-specific defaults.
312
+ num_processes: The maximum number of parallel processes to launch for this call to
313
+ transpile if parallel execution is enabled. This argument overrides
314
+ ``num_processes`` in the user configuration file, and the ``QISKIT_NUM_PROCS``
315
+ environment variable. If set to ``None`` the system default or local user configuration
316
+ will be used.
317
+ qubits_initially_zero: Indicates whether the input circuit is zero-initialized.
318
+
319
+ Returns:
320
+ The transpiled circuit(s).
321
+
322
+ Raises:
323
+ TranspilerError: in case of bad inputs to transpiler (like conflicting parameters)
324
+ or errors in passes
325
+ """
326
+ arg_circuits_list = isinstance(circuits, list)
327
+ circuits = circuits if arg_circuits_list else [circuits]
328
+
329
+ if not circuits:
330
+ return []
331
+
332
+ # transpiling schedules is not supported yet.
333
+ start_time = time()
334
+ if all(isinstance(c, Schedule) for c in circuits):
335
+ warnings.warn("Transpiling schedules is not supported yet.", UserWarning)
336
+ end_time = time()
337
+ _log_transpile_time(start_time, end_time)
338
+ if arg_circuits_list:
339
+ return circuits
340
+ else:
341
+ return circuits[0]
342
+
343
+ if optimization_level is None:
344
+ # Take optimization level from the configuration or 1 as default.
345
+ config = user_config.get_config()
346
+ optimization_level = config.get("transpile_optimization_level", 2)
347
+
348
+ if backend is not None and getattr(backend, "version", 0) <= 1:
349
+ warnings.warn(
350
+ "The `transpile` function will stop supporting inputs of "
351
+ f"type `BackendV1` ( {backend} ) in the `backend` parameter in a future "
352
+ "release no earlier than 2.0. `BackendV1` is deprecated and implementations "
353
+ "should move to `BackendV2`.",
354
+ category=DeprecationWarning,
355
+ stacklevel=2,
356
+ )
357
+ with warnings.catch_warnings():
358
+ # This is a temporary conversion step to allow for a smoother transition
359
+ # to a fully target-based transpiler pipeline while maintaining the behavior
360
+ # of `transpile` with BackendV1 inputs.
361
+ # TODO BackendV1 is deprecated and this path can be
362
+ # removed once it gets removed:
363
+ # https://github.com/Qiskit/qiskit/pull/12850
364
+ warnings.filterwarnings(
365
+ "ignore",
366
+ category=DeprecationWarning,
367
+ message=r".+qiskit\.providers\.backend_compat\.BackendV2Converter.+",
368
+ module="qiskit",
369
+ )
370
+ backend = BackendV2Converter(backend)
371
+
372
+ if (
373
+ scheduling_method is not None
374
+ and backend is None
375
+ and target is None
376
+ and not instruction_durations
377
+ ):
378
+ warnings.warn(
379
+ "When scheduling circuits without backend,"
380
+ " 'instruction_durations' should be usually provided.",
381
+ UserWarning,
382
+ )
383
+
384
+ if not ignore_backend_supplied_default_methods:
385
+ if scheduling_method is None and hasattr(backend, "get_scheduling_stage_plugin"):
386
+ scheduling_method = backend.get_scheduling_stage_plugin()
387
+ if translation_method is None and hasattr(backend, "get_translation_stage_plugin"):
388
+ translation_method = backend.get_translation_stage_plugin()
389
+
390
+ output_name = _parse_output_name(output_name, circuits)
391
+ coupling_map = _parse_coupling_map(coupling_map)
392
+ _check_circuits_coupling_map(circuits, coupling_map, backend)
393
+
394
+ # Edge cases require using the old model (loose constraints) instead of building a target,
395
+ # but we don't populate the passmanager config with loose constraints unless it's one of
396
+ # the known edge cases to control the execution path.
397
+ # Filter instruction_durations, timing_constraints, backend_properties and inst_map deprecation
398
+ with warnings.catch_warnings():
399
+ warnings.filterwarnings(
400
+ "ignore",
401
+ category=DeprecationWarning,
402
+ message=".*``inst_map`` is deprecated as of Qiskit 1.3.*",
403
+ module="qiskit",
404
+ )
405
+ warnings.filterwarnings(
406
+ "ignore",
407
+ category=DeprecationWarning,
408
+ message=".*``timing_constraints`` is deprecated as of Qiskit 1.3.*",
409
+ module="qiskit",
410
+ )
411
+ warnings.filterwarnings(
412
+ "ignore",
413
+ category=DeprecationWarning,
414
+ message=".*``instruction_durations`` is deprecated as of Qiskit 1.3.*",
415
+ module="qiskit",
416
+ )
417
+ warnings.filterwarnings(
418
+ "ignore",
419
+ category=DeprecationWarning,
420
+ message=".*``backend_properties`` is deprecated as of Qiskit 1.3.*",
421
+ module="qiskit",
422
+ )
423
+ pm = generate_preset_pass_manager(
424
+ optimization_level,
425
+ target=target,
426
+ backend=backend,
427
+ basis_gates=basis_gates,
428
+ coupling_map=coupling_map,
429
+ instruction_durations=instruction_durations,
430
+ backend_properties=backend_properties,
431
+ timing_constraints=timing_constraints,
432
+ inst_map=inst_map,
433
+ initial_layout=initial_layout,
434
+ layout_method=layout_method,
435
+ routing_method=routing_method,
436
+ translation_method=translation_method,
437
+ scheduling_method=scheduling_method,
438
+ approximation_degree=approximation_degree,
439
+ seed_transpiler=seed_transpiler,
440
+ unitary_synthesis_method=unitary_synthesis_method,
441
+ unitary_synthesis_plugin_config=unitary_synthesis_plugin_config,
442
+ hls_config=hls_config,
443
+ init_method=init_method,
444
+ optimization_method=optimization_method,
445
+ dt=dt,
446
+ qubits_initially_zero=qubits_initially_zero,
447
+ )
448
+
449
+ out_circuits = pm.run(circuits, callback=callback, num_processes=num_processes)
450
+
451
+ for name, circ in zip(output_name, out_circuits):
452
+ circ.name = name
453
+ end_time = time()
454
+ _log_transpile_time(start_time, end_time)
455
+ if arg_circuits_list:
456
+ return out_circuits
457
+ else:
458
+ return out_circuits[0]
459
+
460
+
461
+ def _check_circuits_coupling_map(circuits, cmap, backend):
462
+ # Check circuit width against number of qubits in coupling_map(s)
463
+ max_qubits = None
464
+ if cmap is not None:
465
+ max_qubits = cmap.size()
466
+ elif backend is not None:
467
+ max_qubits = backend.num_qubits
468
+
469
+ for circuit in circuits:
470
+ # If coupling_map is not None or num_qubits == 1
471
+ num_qubits = len(circuit.qubits)
472
+ if max_qubits is not None and (num_qubits > max_qubits):
473
+ raise CircuitTooWideForTarget(
474
+ f"Number of qubits ({num_qubits}) in {circuit.name} "
475
+ f"is greater than maximum ({max_qubits}) in the coupling_map"
476
+ )
477
+
478
+
479
+ def _log_transpile_time(start_time, end_time):
480
+ log_msg = f"Total Transpile Time - {((end_time - start_time) * 1000):.5f} (ms)"
481
+ logger.info(log_msg)
482
+
483
+
484
+ def _parse_coupling_map(coupling_map):
485
+ # coupling_map could be None, or a list of lists, e.g. [[0, 1], [2, 1]]
486
+ if isinstance(coupling_map, list) and all(
487
+ isinstance(i, list) and len(i) == 2 for i in coupling_map
488
+ ):
489
+ return CouplingMap(coupling_map)
490
+ elif isinstance(coupling_map, list):
491
+ raise TranspilerError(
492
+ "Only a single input coupling map can be used with transpile() if you need to "
493
+ "target different coupling maps for different circuits you must call transpile() "
494
+ "multiple times"
495
+ )
496
+ else:
497
+ return coupling_map
498
+
499
+
500
+ def _parse_output_name(output_name, circuits):
501
+ # naming and returning circuits
502
+ # output_name could be either a string or a list
503
+ if output_name is not None:
504
+ if isinstance(output_name, str):
505
+ # single circuit
506
+ if len(circuits) == 1:
507
+ return [output_name]
508
+ # multiple circuits
509
+ else:
510
+ raise TranspilerError(
511
+ "Expected a list object of length equal "
512
+ + "to that of the number of circuits "
513
+ + "being transpiled"
514
+ )
515
+ elif isinstance(output_name, list):
516
+ if len(circuits) == len(output_name) and all(
517
+ isinstance(name, str) for name in output_name
518
+ ):
519
+ return output_name
520
+ else:
521
+ raise TranspilerError(
522
+ "The length of output_name list "
523
+ "must be equal to the number of "
524
+ "transpiled circuits and the output_name "
525
+ "list should be strings."
526
+ )
527
+ else:
528
+ raise TranspilerError(
529
+ "The parameter output_name should be a string or a"
530
+ f"list of strings: {type(output_name)} was used."
531
+ )
532
+ else:
533
+ return [circuit.name for circuit in circuits]
@@ -0,0 +1,74 @@
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
+ """
14
+ =============================================
15
+ Circuit Converters (:mod:`qiskit.converters`)
16
+ =============================================
17
+
18
+ .. currentmodule:: qiskit.converters
19
+
20
+ QuantumCircuit -> circuit components
21
+ ====================================
22
+
23
+ .. autofunction:: circuit_to_instruction
24
+ .. autofunction:: circuit_to_gate
25
+
26
+ QuantumCircuit <-> DagCircuit
27
+ =============================
28
+
29
+ .. autofunction:: circuit_to_dag
30
+ .. autofunction:: dag_to_circuit
31
+
32
+ QuantumCircuit <-> DagDependency
33
+ ================================
34
+
35
+ .. autofunction:: dagdependency_to_circuit
36
+ .. autofunction:: circuit_to_dagdependency
37
+
38
+ DagCircuit <-> DagDependency
39
+ ============================
40
+
41
+ .. autofunction:: dag_to_dagdependency
42
+ .. autofunction:: dagdependency_to_dag
43
+ """
44
+
45
+ from .circuit_to_dag import circuit_to_dag
46
+ from .dag_to_circuit import dag_to_circuit
47
+ from .circuit_to_instruction import circuit_to_instruction
48
+ from .circuit_to_gate import circuit_to_gate
49
+ from .circuit_to_dagdependency import circuit_to_dagdependency
50
+ from .dagdependency_to_circuit import dagdependency_to_circuit
51
+ from .dag_to_dagdependency import dag_to_dagdependency
52
+ from .dagdependency_to_dag import dagdependency_to_dag
53
+
54
+
55
+ def isinstanceint(obj):
56
+ """Like isinstance(obj,int), but with casting. Except for strings."""
57
+ if isinstance(obj, str):
58
+ return False
59
+ try:
60
+ int(obj)
61
+ return True
62
+ except TypeError:
63
+ return False
64
+
65
+
66
+ def isinstancelist(obj):
67
+ """Like isinstance(obj, list), but with casting. Except for strings and dicts."""
68
+ if isinstance(obj, (str, dict)):
69
+ return False
70
+ try:
71
+ list(obj)
72
+ return True
73
+ except TypeError:
74
+ return False
@@ -0,0 +1,78 @@
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
+ """Helper function for converting a circuit to a dag"""
14
+
15
+ from qiskit.circuit.library.blueprintcircuit import BlueprintCircuit
16
+ from qiskit._accelerate.converters import circuit_to_dag as core_circuit_to_dag
17
+
18
+
19
+ def circuit_to_dag(circuit, copy_operations=True, *, qubit_order=None, clbit_order=None):
20
+ """Build a :class:`.DAGCircuit` object from a :class:`.QuantumCircuit`.
21
+
22
+ Args:
23
+ circuit (QuantumCircuit): the input circuit.
24
+ copy_operations (bool): Deep copy the operation objects
25
+ in the :class:`~.QuantumCircuit` for the output :class:`~.DAGCircuit`.
26
+ This should only be set to ``False`` if the input :class:`~.QuantumCircuit`
27
+ will not be used anymore as the operations in the output
28
+ :class:`~.DAGCircuit` will be shared instances and modifications to
29
+ operations in the :class:`~.DAGCircuit` will be reflected in the
30
+ :class:`~.QuantumCircuit` (and vice versa).
31
+ qubit_order (Iterable[~qiskit.circuit.Qubit] or None): the order that the qubits should be
32
+ indexed in the output DAG. Defaults to the same order as in the circuit.
33
+ clbit_order (Iterable[Clbit] or None): the order that the clbits should be indexed in the
34
+ output DAG. Defaults to the same order as in the circuit.
35
+
36
+ Return:
37
+ DAGCircuit: the DAG representing the input circuit.
38
+
39
+ Raises:
40
+ ValueError: if the ``qubit_order`` or ``clbit_order`` parameters do not match the bits in
41
+ the circuit.
42
+
43
+ Example:
44
+ .. code-block::
45
+
46
+ from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
47
+ from qiskit.dagcircuit import DAGCircuit
48
+ from qiskit.converters import circuit_to_dag
49
+
50
+ q = QuantumRegister(3, 'q')
51
+ c = ClassicalRegister(3, 'c')
52
+ circ = QuantumCircuit(q, c)
53
+ circ.h(q[0])
54
+ circ.cx(q[0], q[1])
55
+ circ.measure(q[0], c[0])
56
+ circ.rz(0.5, q[1]).c_if(c, 2)
57
+ dag = circuit_to_dag(circ)
58
+ """
59
+ # If we have an instance of BluePrintCircuit, make sure it is built by calling ._build()
60
+ if isinstance(circuit, BlueprintCircuit):
61
+ if not circuit._is_built:
62
+ circuit._build()
63
+
64
+ if qubit_order is not None and (
65
+ len(qubit_order) != circuit.num_qubits or set(qubit_order) != set(circuit.qubits)
66
+ ):
67
+ raise ValueError("'qubit_order' does not contain exactly the same qubits as the circuit")
68
+
69
+ if clbit_order is not None and (
70
+ len(clbit_order) != circuit.num_clbits or set(clbit_order) != set(circuit.clbits)
71
+ ):
72
+ raise ValueError("'clbit_order' does not contain exactly the same clbits as the circuit")
73
+
74
+ dagcircuit = core_circuit_to_dag(circuit, copy_operations, qubit_order, clbit_order)
75
+
76
+ dagcircuit.duration = circuit._duration
77
+ dagcircuit.unit = circuit._unit
78
+ return dagcircuit