qiskit 1.0.0b1__cp38-abi3-manylinux_2_17_aarch64.manylinux2014_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 (1095) hide show
  1. qiskit/VERSION.txt +1 -0
  2. qiskit/__init__.py +195 -0
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/_qasm2.abi3.so +0 -0
  5. qiskit/assembler/__init__.py +47 -0
  6. qiskit/assembler/assemble_circuits.py +408 -0
  7. qiskit/assembler/assemble_schedules.py +372 -0
  8. qiskit/assembler/disassemble.py +318 -0
  9. qiskit/assembler/run_config.py +77 -0
  10. qiskit/circuit/__init__.py +425 -0
  11. qiskit/circuit/_classical_resource_map.py +144 -0
  12. qiskit/circuit/_utils.py +170 -0
  13. qiskit/circuit/add_control.py +274 -0
  14. qiskit/circuit/annotated_operation.py +188 -0
  15. qiskit/circuit/barrier.py +51 -0
  16. qiskit/circuit/bit.py +142 -0
  17. qiskit/circuit/classical/__init__.py +41 -0
  18. qiskit/circuit/classical/expr/__init__.py +218 -0
  19. qiskit/circuit/classical/expr/constructors.py +473 -0
  20. qiskit/circuit/classical/expr/expr.py +356 -0
  21. qiskit/circuit/classical/expr/visitors.py +280 -0
  22. qiskit/circuit/classical/types/__init__.py +108 -0
  23. qiskit/circuit/classical/types/ordering.py +222 -0
  24. qiskit/circuit/classical/types/types.py +117 -0
  25. qiskit/circuit/classicalfunction/__init__.py +131 -0
  26. qiskit/circuit/classicalfunction/boolean_expression.py +129 -0
  27. qiskit/circuit/classicalfunction/classical_element.py +54 -0
  28. qiskit/circuit/classicalfunction/classical_function_visitor.py +155 -0
  29. qiskit/circuit/classicalfunction/classicalfunction.py +173 -0
  30. qiskit/circuit/classicalfunction/exceptions.py +35 -0
  31. qiskit/circuit/classicalfunction/types.py +18 -0
  32. qiskit/circuit/classicalfunction/utils.py +91 -0
  33. qiskit/circuit/classicalregister.py +71 -0
  34. qiskit/circuit/commutation_checker.py +176 -0
  35. qiskit/circuit/controlflow/__init__.py +27 -0
  36. qiskit/circuit/controlflow/_builder_utils.py +199 -0
  37. qiskit/circuit/controlflow/break_loop.py +70 -0
  38. qiskit/circuit/controlflow/builder.py +651 -0
  39. qiskit/circuit/controlflow/continue_loop.py +72 -0
  40. qiskit/circuit/controlflow/control_flow.py +52 -0
  41. qiskit/circuit/controlflow/for_loop.py +232 -0
  42. qiskit/circuit/controlflow/if_else.py +517 -0
  43. qiskit/circuit/controlflow/switch_case.py +424 -0
  44. qiskit/circuit/controlflow/while_loop.py +177 -0
  45. qiskit/circuit/controlledgate.py +271 -0
  46. qiskit/circuit/delay.py +104 -0
  47. qiskit/circuit/duration.py +88 -0
  48. qiskit/circuit/equivalence.py +291 -0
  49. qiskit/circuit/equivalence_library.py +18 -0
  50. qiskit/circuit/exceptions.py +19 -0
  51. qiskit/circuit/gate.py +245 -0
  52. qiskit/circuit/instruction.py +655 -0
  53. qiskit/circuit/instructionset.py +191 -0
  54. qiskit/circuit/library/__init__.py +581 -0
  55. qiskit/circuit/library/arithmetic/__init__.py +27 -0
  56. qiskit/circuit/library/arithmetic/adders/__init__.py +17 -0
  57. qiskit/circuit/library/arithmetic/adders/adder.py +58 -0
  58. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +159 -0
  59. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +116 -0
  60. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +165 -0
  61. qiskit/circuit/library/arithmetic/exact_reciprocal.py +88 -0
  62. qiskit/circuit/library/arithmetic/functional_pauli_rotations.py +114 -0
  63. qiskit/circuit/library/arithmetic/integer_comparator.py +243 -0
  64. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +196 -0
  65. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +189 -0
  66. qiskit/circuit/library/arithmetic/multipliers/__init__.py +16 -0
  67. qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +138 -0
  68. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +101 -0
  69. qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +101 -0
  70. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +353 -0
  71. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +277 -0
  72. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +317 -0
  73. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +335 -0
  74. qiskit/circuit/library/arithmetic/quadratic_form.py +197 -0
  75. qiskit/circuit/library/arithmetic/weighted_adder.py +337 -0
  76. qiskit/circuit/library/basis_change/__init__.py +15 -0
  77. qiskit/circuit/library/basis_change/qft.py +289 -0
  78. qiskit/circuit/library/blueprintcircuit.py +186 -0
  79. qiskit/circuit/library/boolean_logic/__init__.py +18 -0
  80. qiskit/circuit/library/boolean_logic/inner_product.py +78 -0
  81. qiskit/circuit/library/boolean_logic/quantum_and.py +97 -0
  82. qiskit/circuit/library/boolean_logic/quantum_or.py +98 -0
  83. qiskit/circuit/library/boolean_logic/quantum_xor.py +71 -0
  84. qiskit/circuit/library/data_preparation/__init__.py +47 -0
  85. qiskit/circuit/library/data_preparation/initializer.py +96 -0
  86. qiskit/circuit/library/data_preparation/pauli_feature_map.py +296 -0
  87. qiskit/circuit/library/data_preparation/state_preparation.py +526 -0
  88. qiskit/circuit/library/data_preparation/z_feature_map.py +104 -0
  89. qiskit/circuit/library/data_preparation/zz_feature_map.py +114 -0
  90. qiskit/circuit/library/evolved_operator_ansatz.py +245 -0
  91. qiskit/circuit/library/fourier_checking.py +97 -0
  92. qiskit/circuit/library/generalized_gates/__init__.py +30 -0
  93. qiskit/circuit/library/generalized_gates/diagonal.py +164 -0
  94. qiskit/circuit/library/generalized_gates/gms.py +121 -0
  95. qiskit/circuit/library/generalized_gates/gr.py +215 -0
  96. qiskit/circuit/library/generalized_gates/isometry.py +573 -0
  97. qiskit/circuit/library/generalized_gates/linear_function.py +302 -0
  98. qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +138 -0
  99. qiskit/circuit/library/generalized_gates/mcmt.py +254 -0
  100. qiskit/circuit/library/generalized_gates/pauli.py +85 -0
  101. qiskit/circuit/library/generalized_gates/permutation.py +190 -0
  102. qiskit/circuit/library/generalized_gates/rv.py +93 -0
  103. qiskit/circuit/library/generalized_gates/uc.py +304 -0
  104. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +164 -0
  105. qiskit/circuit/library/generalized_gates/ucrx.py +32 -0
  106. qiskit/circuit/library/generalized_gates/ucry.py +32 -0
  107. qiskit/circuit/library/generalized_gates/ucrz.py +32 -0
  108. qiskit/circuit/library/generalized_gates/unitary.py +198 -0
  109. qiskit/circuit/library/graph_state.py +86 -0
  110. qiskit/circuit/library/grover_operator.py +311 -0
  111. qiskit/circuit/library/hamiltonian_gate.py +146 -0
  112. qiskit/circuit/library/hidden_linear_function.py +98 -0
  113. qiskit/circuit/library/iqp.py +96 -0
  114. qiskit/circuit/library/n_local/__init__.py +31 -0
  115. qiskit/circuit/library/n_local/efficient_su2.py +162 -0
  116. qiskit/circuit/library/n_local/excitation_preserving.py +176 -0
  117. qiskit/circuit/library/n_local/n_local.py +1044 -0
  118. qiskit/circuit/library/n_local/pauli_two_design.py +131 -0
  119. qiskit/circuit/library/n_local/qaoa_ansatz.py +288 -0
  120. qiskit/circuit/library/n_local/real_amplitudes.py +189 -0
  121. qiskit/circuit/library/n_local/two_local.py +334 -0
  122. qiskit/circuit/library/overlap.py +111 -0
  123. qiskit/circuit/library/pauli_evolution.py +180 -0
  124. qiskit/circuit/library/phase_estimation.py +99 -0
  125. qiskit/circuit/library/phase_oracle.py +153 -0
  126. qiskit/circuit/library/quantum_volume.py +114 -0
  127. qiskit/circuit/library/standard_gates/__init__.py +116 -0
  128. qiskit/circuit/library/standard_gates/dcx.py +71 -0
  129. qiskit/circuit/library/standard_gates/ecr.py +114 -0
  130. qiskit/circuit/library/standard_gates/equivalence_library.py +1677 -0
  131. qiskit/circuit/library/standard_gates/global_phase.py +63 -0
  132. qiskit/circuit/library/standard_gates/h.py +224 -0
  133. qiskit/circuit/library/standard_gates/i.py +60 -0
  134. qiskit/circuit/library/standard_gates/iswap.py +129 -0
  135. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +390 -0
  136. qiskit/circuit/library/standard_gates/p.py +364 -0
  137. qiskit/circuit/library/standard_gates/r.py +101 -0
  138. qiskit/circuit/library/standard_gates/rx.py +246 -0
  139. qiskit/circuit/library/standard_gates/rxx.py +128 -0
  140. qiskit/circuit/library/standard_gates/ry.py +241 -0
  141. qiskit/circuit/library/standard_gates/ryy.py +128 -0
  142. qiskit/circuit/library/standard_gates/rz.py +261 -0
  143. qiskit/circuit/library/standard_gates/rzx.py +174 -0
  144. qiskit/circuit/library/standard_gates/rzz.py +141 -0
  145. qiskit/circuit/library/standard_gates/s.py +303 -0
  146. qiskit/circuit/library/standard_gates/swap.py +246 -0
  147. qiskit/circuit/library/standard_gates/sx.py +268 -0
  148. qiskit/circuit/library/standard_gates/t.py +150 -0
  149. qiskit/circuit/library/standard_gates/u.py +338 -0
  150. qiskit/circuit/library/standard_gates/u1.py +383 -0
  151. qiskit/circuit/library/standard_gates/u2.py +132 -0
  152. qiskit/circuit/library/standard_gates/u3.py +358 -0
  153. qiskit/circuit/library/standard_gates/x.py +1370 -0
  154. qiskit/circuit/library/standard_gates/xx_minus_yy.py +179 -0
  155. qiskit/circuit/library/standard_gates/xx_plus_yy.py +180 -0
  156. qiskit/circuit/library/standard_gates/y.py +221 -0
  157. qiskit/circuit/library/standard_gates/z.py +294 -0
  158. qiskit/circuit/library/templates/__init__.py +92 -0
  159. qiskit/circuit/library/templates/clifford/__init__.py +33 -0
  160. qiskit/circuit/library/templates/clifford/clifford_2_1.py +33 -0
  161. qiskit/circuit/library/templates/clifford/clifford_2_2.py +34 -0
  162. qiskit/circuit/library/templates/clifford/clifford_2_3.py +32 -0
  163. qiskit/circuit/library/templates/clifford/clifford_2_4.py +33 -0
  164. qiskit/circuit/library/templates/clifford/clifford_3_1.py +34 -0
  165. qiskit/circuit/library/templates/clifford/clifford_4_1.py +37 -0
  166. qiskit/circuit/library/templates/clifford/clifford_4_2.py +36 -0
  167. qiskit/circuit/library/templates/clifford/clifford_4_3.py +37 -0
  168. qiskit/circuit/library/templates/clifford/clifford_4_4.py +36 -0
  169. qiskit/circuit/library/templates/clifford/clifford_5_1.py +39 -0
  170. qiskit/circuit/library/templates/clifford/clifford_6_1.py +39 -0
  171. qiskit/circuit/library/templates/clifford/clifford_6_2.py +39 -0
  172. qiskit/circuit/library/templates/clifford/clifford_6_3.py +39 -0
  173. qiskit/circuit/library/templates/clifford/clifford_6_4.py +37 -0
  174. qiskit/circuit/library/templates/clifford/clifford_6_5.py +39 -0
  175. qiskit/circuit/library/templates/clifford/clifford_8_1.py +41 -0
  176. qiskit/circuit/library/templates/clifford/clifford_8_2.py +41 -0
  177. qiskit/circuit/library/templates/clifford/clifford_8_3.py +40 -0
  178. qiskit/circuit/library/templates/nct/__init__.py +67 -0
  179. qiskit/circuit/library/templates/nct/template_nct_2a_1.py +32 -0
  180. qiskit/circuit/library/templates/nct/template_nct_2a_2.py +33 -0
  181. qiskit/circuit/library/templates/nct/template_nct_2a_3.py +35 -0
  182. qiskit/circuit/library/templates/nct/template_nct_4a_1.py +41 -0
  183. qiskit/circuit/library/templates/nct/template_nct_4a_2.py +39 -0
  184. qiskit/circuit/library/templates/nct/template_nct_4a_3.py +37 -0
  185. qiskit/circuit/library/templates/nct/template_nct_4b_1.py +39 -0
  186. qiskit/circuit/library/templates/nct/template_nct_4b_2.py +37 -0
  187. qiskit/circuit/library/templates/nct/template_nct_5a_1.py +38 -0
  188. qiskit/circuit/library/templates/nct/template_nct_5a_2.py +38 -0
  189. qiskit/circuit/library/templates/nct/template_nct_5a_3.py +38 -0
  190. qiskit/circuit/library/templates/nct/template_nct_5a_4.py +37 -0
  191. qiskit/circuit/library/templates/nct/template_nct_6a_1.py +38 -0
  192. qiskit/circuit/library/templates/nct/template_nct_6a_2.py +39 -0
  193. qiskit/circuit/library/templates/nct/template_nct_6a_3.py +39 -0
  194. qiskit/circuit/library/templates/nct/template_nct_6a_4.py +39 -0
  195. qiskit/circuit/library/templates/nct/template_nct_6b_1.py +39 -0
  196. qiskit/circuit/library/templates/nct/template_nct_6b_2.py +39 -0
  197. qiskit/circuit/library/templates/nct/template_nct_6c_1.py +39 -0
  198. qiskit/circuit/library/templates/nct/template_nct_7a_1.py +41 -0
  199. qiskit/circuit/library/templates/nct/template_nct_7b_1.py +41 -0
  200. qiskit/circuit/library/templates/nct/template_nct_7c_1.py +41 -0
  201. qiskit/circuit/library/templates/nct/template_nct_7d_1.py +41 -0
  202. qiskit/circuit/library/templates/nct/template_nct_7e_1.py +41 -0
  203. qiskit/circuit/library/templates/nct/template_nct_9a_1.py +43 -0
  204. qiskit/circuit/library/templates/nct/template_nct_9c_1.py +41 -0
  205. qiskit/circuit/library/templates/nct/template_nct_9c_10.py +42 -0
  206. qiskit/circuit/library/templates/nct/template_nct_9c_11.py +42 -0
  207. qiskit/circuit/library/templates/nct/template_nct_9c_12.py +42 -0
  208. qiskit/circuit/library/templates/nct/template_nct_9c_2.py +42 -0
  209. qiskit/circuit/library/templates/nct/template_nct_9c_3.py +42 -0
  210. qiskit/circuit/library/templates/nct/template_nct_9c_4.py +42 -0
  211. qiskit/circuit/library/templates/nct/template_nct_9c_5.py +42 -0
  212. qiskit/circuit/library/templates/nct/template_nct_9c_6.py +42 -0
  213. qiskit/circuit/library/templates/nct/template_nct_9c_7.py +42 -0
  214. qiskit/circuit/library/templates/nct/template_nct_9c_8.py +42 -0
  215. qiskit/circuit/library/templates/nct/template_nct_9c_9.py +42 -0
  216. qiskit/circuit/library/templates/nct/template_nct_9d_1.py +41 -0
  217. qiskit/circuit/library/templates/nct/template_nct_9d_10.py +42 -0
  218. qiskit/circuit/library/templates/nct/template_nct_9d_2.py +42 -0
  219. qiskit/circuit/library/templates/nct/template_nct_9d_3.py +42 -0
  220. qiskit/circuit/library/templates/nct/template_nct_9d_4.py +42 -0
  221. qiskit/circuit/library/templates/nct/template_nct_9d_5.py +42 -0
  222. qiskit/circuit/library/templates/nct/template_nct_9d_6.py +42 -0
  223. qiskit/circuit/library/templates/nct/template_nct_9d_7.py +42 -0
  224. qiskit/circuit/library/templates/nct/template_nct_9d_8.py +42 -0
  225. qiskit/circuit/library/templates/nct/template_nct_9d_9.py +42 -0
  226. qiskit/circuit/library/templates/rzx/__init__.py +25 -0
  227. qiskit/circuit/library/templates/rzx/rzx_cy.py +46 -0
  228. qiskit/circuit/library/templates/rzx/rzx_xz.py +53 -0
  229. qiskit/circuit/library/templates/rzx/rzx_yz.py +43 -0
  230. qiskit/circuit/library/templates/rzx/rzx_zz1.py +67 -0
  231. qiskit/circuit/library/templates/rzx/rzx_zz2.py +58 -0
  232. qiskit/circuit/library/templates/rzx/rzx_zz3.py +57 -0
  233. qiskit/circuit/measure.py +41 -0
  234. qiskit/circuit/operation.py +62 -0
  235. qiskit/circuit/parameter.py +160 -0
  236. qiskit/circuit/parameterexpression.py +515 -0
  237. qiskit/circuit/parametertable.py +263 -0
  238. qiskit/circuit/parametervector.py +114 -0
  239. qiskit/circuit/qpy_serialization.py +28 -0
  240. qiskit/circuit/quantumcircuit.py +6074 -0
  241. qiskit/circuit/quantumcircuitdata.py +138 -0
  242. qiskit/circuit/quantumregister.py +90 -0
  243. qiskit/circuit/random/__init__.py +15 -0
  244. qiskit/circuit/random/utils.py +209 -0
  245. qiskit/circuit/register.py +256 -0
  246. qiskit/circuit/reset.py +31 -0
  247. qiskit/circuit/singleton.py +604 -0
  248. qiskit/circuit/store.py +87 -0
  249. qiskit/circuit/tools/__init__.py +16 -0
  250. qiskit/circuit/tools/pi_check.py +190 -0
  251. qiskit/compiler/__init__.py +33 -0
  252. qiskit/compiler/assembler.py +597 -0
  253. qiskit/compiler/scheduler.py +107 -0
  254. qiskit/compiler/sequencer.py +69 -0
  255. qiskit/compiler/transpiler.py +613 -0
  256. qiskit/converters/__init__.py +59 -0
  257. qiskit/converters/circuit_to_dag.py +96 -0
  258. qiskit/converters/circuit_to_dagdependency.py +51 -0
  259. qiskit/converters/circuit_to_gate.py +109 -0
  260. qiskit/converters/circuit_to_instruction.py +131 -0
  261. qiskit/converters/dag_to_circuit.py +77 -0
  262. qiskit/converters/dag_to_dagdependency.py +55 -0
  263. qiskit/converters/dagdependency_to_circuit.py +42 -0
  264. qiskit/converters/dagdependency_to_dag.py +49 -0
  265. qiskit/dagcircuit/__init__.py +44 -0
  266. qiskit/dagcircuit/collect_blocks.py +386 -0
  267. qiskit/dagcircuit/dagcircuit.py +2105 -0
  268. qiskit/dagcircuit/dagdependency.py +626 -0
  269. qiskit/dagcircuit/dagdepnode.py +157 -0
  270. qiskit/dagcircuit/dagnode.py +322 -0
  271. qiskit/dagcircuit/exceptions.py +42 -0
  272. qiskit/exceptions.py +97 -0
  273. qiskit/execute_function.py +354 -0
  274. qiskit/extensions/__init__.py +70 -0
  275. qiskit/extensions/exceptions.py +31 -0
  276. qiskit/extensions/quantum_initializer/__init__.py +26 -0
  277. qiskit/extensions/quantum_initializer/squ.py +163 -0
  278. qiskit/extensions/simulator/__init__.py +15 -0
  279. qiskit/extensions/simulator/snapshot.py +70 -0
  280. qiskit/namespace.py +76 -0
  281. qiskit/passmanager/__init__.py +242 -0
  282. qiskit/passmanager/base_tasks.py +230 -0
  283. qiskit/passmanager/compilation_status.py +74 -0
  284. qiskit/passmanager/exceptions.py +19 -0
  285. qiskit/passmanager/flow_controllers.py +336 -0
  286. qiskit/passmanager/passmanager.py +317 -0
  287. qiskit/primitives/__init__.py +62 -0
  288. qiskit/primitives/backend_estimator.py +473 -0
  289. qiskit/primitives/backend_sampler.py +209 -0
  290. qiskit/primitives/base/__init__.py +20 -0
  291. qiskit/primitives/base/base_estimator.py +256 -0
  292. qiskit/primitives/base/base_primitive.py +74 -0
  293. qiskit/primitives/base/base_result.py +87 -0
  294. qiskit/primitives/base/base_sampler.py +202 -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/estimator.py +158 -0
  299. qiskit/primitives/primitive_job.py +73 -0
  300. qiskit/primitives/sampler.py +155 -0
  301. qiskit/primitives/utils.py +216 -0
  302. qiskit/providers/__init__.py +773 -0
  303. qiskit/providers/backend.py +653 -0
  304. qiskit/providers/backend_compat.py +347 -0
  305. qiskit/providers/basicaer/__init__.py +73 -0
  306. qiskit/providers/basicaer/basicaerjob.py +65 -0
  307. qiskit/providers/basicaer/basicaerprovider.py +127 -0
  308. qiskit/providers/basicaer/basicaertools.py +186 -0
  309. qiskit/providers/basicaer/exceptions.py +30 -0
  310. qiskit/providers/basicaer/qasm_simulator.py +678 -0
  311. qiskit/providers/basicaer/statevector_simulator.py +121 -0
  312. qiskit/providers/basicaer/unitary_simulator.py +395 -0
  313. qiskit/providers/exceptions.py +45 -0
  314. qiskit/providers/fake_provider/__init__.py +267 -0
  315. qiskit/providers/fake_provider/backends/__init__.py +110 -0
  316. qiskit/providers/fake_provider/backends/almaden/__init__.py +16 -0
  317. qiskit/providers/fake_provider/backends/almaden/conf_almaden.json +1 -0
  318. qiskit/providers/fake_provider/backends/almaden/fake_almaden.py +58 -0
  319. qiskit/providers/fake_provider/backends/almaden/props_almaden.json +1 -0
  320. qiskit/providers/fake_provider/backends/armonk/__init__.py +16 -0
  321. qiskit/providers/fake_provider/backends/armonk/conf_armonk.json +1 -0
  322. qiskit/providers/fake_provider/backends/armonk/defs_armonk.json +1 -0
  323. qiskit/providers/fake_provider/backends/armonk/fake_armonk.py +48 -0
  324. qiskit/providers/fake_provider/backends/armonk/props_armonk.json +1 -0
  325. qiskit/providers/fake_provider/backends/athens/__init__.py +16 -0
  326. qiskit/providers/fake_provider/backends/athens/conf_athens.json +1 -0
  327. qiskit/providers/fake_provider/backends/athens/defs_athens.json +1 -0
  328. qiskit/providers/fake_provider/backends/athens/fake_athens.py +38 -0
  329. qiskit/providers/fake_provider/backends/athens/props_athens.json +1 -0
  330. qiskit/providers/fake_provider/backends/auckland/__init__.py +15 -0
  331. qiskit/providers/fake_provider/backends/auckland/conf_auckland.json +1 -0
  332. qiskit/providers/fake_provider/backends/auckland/defs_auckland.json +1 -0
  333. qiskit/providers/fake_provider/backends/auckland/fake_auckland.py +29 -0
  334. qiskit/providers/fake_provider/backends/auckland/props_auckland.json +1 -0
  335. qiskit/providers/fake_provider/backends/belem/__init__.py +16 -0
  336. qiskit/providers/fake_provider/backends/belem/conf_belem.json +1 -0
  337. qiskit/providers/fake_provider/backends/belem/defs_belem.json +1 -0
  338. qiskit/providers/fake_provider/backends/belem/fake_belem.py +38 -0
  339. qiskit/providers/fake_provider/backends/belem/props_belem.json +1 -0
  340. qiskit/providers/fake_provider/backends/boeblingen/__init__.py +16 -0
  341. qiskit/providers/fake_provider/backends/boeblingen/conf_boeblingen.json +1 -0
  342. qiskit/providers/fake_provider/backends/boeblingen/defs_boeblingen.json +1 -0
  343. qiskit/providers/fake_provider/backends/boeblingen/fake_boeblingen.py +60 -0
  344. qiskit/providers/fake_provider/backends/boeblingen/props_boeblingen.json +1 -0
  345. qiskit/providers/fake_provider/backends/bogota/__init__.py +16 -0
  346. qiskit/providers/fake_provider/backends/bogota/conf_bogota.json +1 -0
  347. qiskit/providers/fake_provider/backends/bogota/defs_bogota.json +1 -0
  348. qiskit/providers/fake_provider/backends/bogota/fake_bogota.py +38 -0
  349. qiskit/providers/fake_provider/backends/bogota/props_bogota.json +1 -0
  350. qiskit/providers/fake_provider/backends/brooklyn/__init__.py +16 -0
  351. qiskit/providers/fake_provider/backends/brooklyn/conf_brooklyn.json +1 -0
  352. qiskit/providers/fake_provider/backends/brooklyn/defs_brooklyn.json +1 -0
  353. qiskit/providers/fake_provider/backends/brooklyn/fake_brooklyn.py +38 -0
  354. qiskit/providers/fake_provider/backends/brooklyn/props_brooklyn.json +1 -0
  355. qiskit/providers/fake_provider/backends/burlington/__init__.py +16 -0
  356. qiskit/providers/fake_provider/backends/burlington/conf_burlington.json +1 -0
  357. qiskit/providers/fake_provider/backends/burlington/fake_burlington.py +50 -0
  358. qiskit/providers/fake_provider/backends/burlington/props_burlington.json +1 -0
  359. qiskit/providers/fake_provider/backends/cairo/__init__.py +16 -0
  360. qiskit/providers/fake_provider/backends/cairo/conf_cairo.json +1 -0
  361. qiskit/providers/fake_provider/backends/cairo/defs_cairo.json +1 -0
  362. qiskit/providers/fake_provider/backends/cairo/fake_cairo.py +38 -0
  363. qiskit/providers/fake_provider/backends/cairo/props_cairo.json +1 -0
  364. qiskit/providers/fake_provider/backends/cambridge/__init__.py +17 -0
  365. qiskit/providers/fake_provider/backends/cambridge/conf_cambridge.json +1 -0
  366. qiskit/providers/fake_provider/backends/cambridge/fake_cambridge.py +72 -0
  367. qiskit/providers/fake_provider/backends/cambridge/props_cambridge.json +1 -0
  368. qiskit/providers/fake_provider/backends/cambridge/props_cambridge_alt.json +1 -0
  369. qiskit/providers/fake_provider/backends/casablanca/__init__.py +16 -0
  370. qiskit/providers/fake_provider/backends/casablanca/conf_casablanca.json +1 -0
  371. qiskit/providers/fake_provider/backends/casablanca/defs_casablanca.json +1 -0
  372. qiskit/providers/fake_provider/backends/casablanca/fake_casablanca.py +38 -0
  373. qiskit/providers/fake_provider/backends/casablanca/props_casablanca.json +1 -0
  374. qiskit/providers/fake_provider/backends/essex/__init__.py +16 -0
  375. qiskit/providers/fake_provider/backends/essex/conf_essex.json +1 -0
  376. qiskit/providers/fake_provider/backends/essex/fake_essex.py +54 -0
  377. qiskit/providers/fake_provider/backends/essex/props_essex.json +1 -0
  378. qiskit/providers/fake_provider/backends/geneva/__init__.py +15 -0
  379. qiskit/providers/fake_provider/backends/geneva/conf_geneva.json +1 -0
  380. qiskit/providers/fake_provider/backends/geneva/defs_geneva.json +1 -0
  381. qiskit/providers/fake_provider/backends/geneva/fake_geneva.py +29 -0
  382. qiskit/providers/fake_provider/backends/geneva/props_geneva.json +1 -0
  383. qiskit/providers/fake_provider/backends/guadalupe/__init__.py +16 -0
  384. qiskit/providers/fake_provider/backends/guadalupe/conf_guadalupe.json +1 -0
  385. qiskit/providers/fake_provider/backends/guadalupe/defs_guadalupe.json +1 -0
  386. qiskit/providers/fake_provider/backends/guadalupe/fake_guadalupe.py +39 -0
  387. qiskit/providers/fake_provider/backends/guadalupe/props_guadalupe.json +1 -0
  388. qiskit/providers/fake_provider/backends/hanoi/__init__.py +16 -0
  389. qiskit/providers/fake_provider/backends/hanoi/conf_hanoi.json +1 -0
  390. qiskit/providers/fake_provider/backends/hanoi/defs_hanoi.json +1 -0
  391. qiskit/providers/fake_provider/backends/hanoi/fake_hanoi.py +38 -0
  392. qiskit/providers/fake_provider/backends/hanoi/props_hanoi.json +1 -0
  393. qiskit/providers/fake_provider/backends/jakarta/__init__.py +16 -0
  394. qiskit/providers/fake_provider/backends/jakarta/conf_jakarta.json +1 -0
  395. qiskit/providers/fake_provider/backends/jakarta/defs_jakarta.json +1 -0
  396. qiskit/providers/fake_provider/backends/jakarta/fake_jakarta.py +38 -0
  397. qiskit/providers/fake_provider/backends/jakarta/props_jakarta.json +1 -0
  398. qiskit/providers/fake_provider/backends/johannesburg/__init__.py +16 -0
  399. qiskit/providers/fake_provider/backends/johannesburg/conf_johannesburg.json +1 -0
  400. qiskit/providers/fake_provider/backends/johannesburg/fake_johannesburg.py +58 -0
  401. qiskit/providers/fake_provider/backends/johannesburg/props_johannesburg.json +1 -0
  402. qiskit/providers/fake_provider/backends/kolkata/__init__.py +16 -0
  403. qiskit/providers/fake_provider/backends/kolkata/conf_kolkata.json +1 -0
  404. qiskit/providers/fake_provider/backends/kolkata/defs_kolkata.json +1 -0
  405. qiskit/providers/fake_provider/backends/kolkata/fake_kolkata.py +38 -0
  406. qiskit/providers/fake_provider/backends/kolkata/props_kolkata.json +1 -0
  407. qiskit/providers/fake_provider/backends/lagos/__init__.py +16 -0
  408. qiskit/providers/fake_provider/backends/lagos/conf_lagos.json +1 -0
  409. qiskit/providers/fake_provider/backends/lagos/defs_lagos.json +1 -0
  410. qiskit/providers/fake_provider/backends/lagos/fake_lagos.py +38 -0
  411. qiskit/providers/fake_provider/backends/lagos/props_lagos.json +1 -0
  412. qiskit/providers/fake_provider/backends/lima/__init__.py +16 -0
  413. qiskit/providers/fake_provider/backends/lima/conf_lima.json +1 -0
  414. qiskit/providers/fake_provider/backends/lima/defs_lima.json +1 -0
  415. qiskit/providers/fake_provider/backends/lima/fake_lima.py +38 -0
  416. qiskit/providers/fake_provider/backends/lima/props_lima.json +1 -0
  417. qiskit/providers/fake_provider/backends/london/__init__.py +16 -0
  418. qiskit/providers/fake_provider/backends/london/conf_london.json +1 -0
  419. qiskit/providers/fake_provider/backends/london/fake_london.py +54 -0
  420. qiskit/providers/fake_provider/backends/london/props_london.json +1 -0
  421. qiskit/providers/fake_provider/backends/manhattan/__init__.py +16 -0
  422. qiskit/providers/fake_provider/backends/manhattan/conf_manhattan.json +1 -0
  423. qiskit/providers/fake_provider/backends/manhattan/defs_manhattan.json +1 -0
  424. qiskit/providers/fake_provider/backends/manhattan/fake_manhattan.py +38 -0
  425. qiskit/providers/fake_provider/backends/manhattan/props_manhattan.json +1 -0
  426. qiskit/providers/fake_provider/backends/manila/__init__.py +16 -0
  427. qiskit/providers/fake_provider/backends/manila/conf_manila.json +1 -0
  428. qiskit/providers/fake_provider/backends/manila/defs_manila.json +1 -0
  429. qiskit/providers/fake_provider/backends/manila/fake_manila.py +38 -0
  430. qiskit/providers/fake_provider/backends/manila/props_manila.json +1 -0
  431. qiskit/providers/fake_provider/backends/melbourne/__init__.py +16 -0
  432. qiskit/providers/fake_provider/backends/melbourne/conf_melbourne.json +1 -0
  433. qiskit/providers/fake_provider/backends/melbourne/fake_melbourne.py +91 -0
  434. qiskit/providers/fake_provider/backends/melbourne/props_melbourne.json +1 -0
  435. qiskit/providers/fake_provider/backends/montreal/__init__.py +16 -0
  436. qiskit/providers/fake_provider/backends/montreal/conf_montreal.json +1 -0
  437. qiskit/providers/fake_provider/backends/montreal/defs_montreal.json +1 -0
  438. qiskit/providers/fake_provider/backends/montreal/fake_montreal.py +38 -0
  439. qiskit/providers/fake_provider/backends/montreal/props_montreal.json +1 -0
  440. qiskit/providers/fake_provider/backends/mumbai/__init__.py +16 -0
  441. qiskit/providers/fake_provider/backends/mumbai/conf_mumbai.json +1 -0
  442. qiskit/providers/fake_provider/backends/mumbai/defs_mumbai.json +1 -0
  443. qiskit/providers/fake_provider/backends/mumbai/fake_mumbai.py +38 -0
  444. qiskit/providers/fake_provider/backends/mumbai/props_mumbai.json +1 -0
  445. qiskit/providers/fake_provider/backends/nairobi/__init__.py +16 -0
  446. qiskit/providers/fake_provider/backends/nairobi/conf_nairobi.json +1 -0
  447. qiskit/providers/fake_provider/backends/nairobi/defs_nairobi.json +1 -0
  448. qiskit/providers/fake_provider/backends/nairobi/fake_nairobi.py +38 -0
  449. qiskit/providers/fake_provider/backends/nairobi/props_nairobi.json +1 -0
  450. qiskit/providers/fake_provider/backends/oslo/__init__.py +15 -0
  451. qiskit/providers/fake_provider/backends/oslo/conf_oslo.json +1 -0
  452. qiskit/providers/fake_provider/backends/oslo/defs_oslo.json +1 -0
  453. qiskit/providers/fake_provider/backends/oslo/fake_oslo.py +29 -0
  454. qiskit/providers/fake_provider/backends/oslo/props_oslo.json +1 -0
  455. qiskit/providers/fake_provider/backends/ourense/__init__.py +16 -0
  456. qiskit/providers/fake_provider/backends/ourense/conf_ourense.json +1 -0
  457. qiskit/providers/fake_provider/backends/ourense/fake_ourense.py +50 -0
  458. qiskit/providers/fake_provider/backends/ourense/props_ourense.json +1 -0
  459. qiskit/providers/fake_provider/backends/paris/__init__.py +16 -0
  460. qiskit/providers/fake_provider/backends/paris/conf_paris.json +1 -0
  461. qiskit/providers/fake_provider/backends/paris/defs_paris.json +1 -0
  462. qiskit/providers/fake_provider/backends/paris/fake_paris.py +64 -0
  463. qiskit/providers/fake_provider/backends/paris/props_paris.json +1 -0
  464. qiskit/providers/fake_provider/backends/perth/__init__.py +15 -0
  465. qiskit/providers/fake_provider/backends/perth/conf_perth.json +1 -0
  466. qiskit/providers/fake_provider/backends/perth/defs_perth.json +1 -0
  467. qiskit/providers/fake_provider/backends/perth/fake_perth.py +29 -0
  468. qiskit/providers/fake_provider/backends/perth/props_perth.json +1 -0
  469. qiskit/providers/fake_provider/backends/poughkeepsie/__init__.py +16 -0
  470. qiskit/providers/fake_provider/backends/poughkeepsie/conf_poughkeepsie.json +1 -0
  471. qiskit/providers/fake_provider/backends/poughkeepsie/defs_poughkeepsie.json +1 -0
  472. qiskit/providers/fake_provider/backends/poughkeepsie/fake_poughkeepsie.py +124 -0
  473. qiskit/providers/fake_provider/backends/poughkeepsie/props_poughkeepsie.json +1 -0
  474. qiskit/providers/fake_provider/backends/prague/__init__.py +15 -0
  475. qiskit/providers/fake_provider/backends/prague/conf_prague.json +1 -0
  476. qiskit/providers/fake_provider/backends/prague/fake_prague.py +28 -0
  477. qiskit/providers/fake_provider/backends/prague/props_prague.json +1 -0
  478. qiskit/providers/fake_provider/backends/quito/__init__.py +16 -0
  479. qiskit/providers/fake_provider/backends/quito/conf_quito.json +1 -0
  480. qiskit/providers/fake_provider/backends/quito/defs_quito.json +1 -0
  481. qiskit/providers/fake_provider/backends/quito/fake_quito.py +38 -0
  482. qiskit/providers/fake_provider/backends/quito/props_quito.json +1 -0
  483. qiskit/providers/fake_provider/backends/rochester/__init__.py +16 -0
  484. qiskit/providers/fake_provider/backends/rochester/conf_rochester.json +1 -0
  485. qiskit/providers/fake_provider/backends/rochester/fake_rochester.py +36 -0
  486. qiskit/providers/fake_provider/backends/rochester/props_rochester.json +1 -0
  487. qiskit/providers/fake_provider/backends/rome/__init__.py +16 -0
  488. qiskit/providers/fake_provider/backends/rome/conf_rome.json +1 -0
  489. qiskit/providers/fake_provider/backends/rome/defs_rome.json +1 -0
  490. qiskit/providers/fake_provider/backends/rome/fake_rome.py +38 -0
  491. qiskit/providers/fake_provider/backends/rome/props_rome.json +1 -0
  492. qiskit/providers/fake_provider/backends/rueschlikon/__init__.py +15 -0
  493. qiskit/providers/fake_provider/backends/rueschlikon/fake_rueschlikon.py +74 -0
  494. qiskit/providers/fake_provider/backends/santiago/__init__.py +16 -0
  495. qiskit/providers/fake_provider/backends/santiago/conf_santiago.json +1 -0
  496. qiskit/providers/fake_provider/backends/santiago/defs_santiago.json +1 -0
  497. qiskit/providers/fake_provider/backends/santiago/fake_santiago.py +38 -0
  498. qiskit/providers/fake_provider/backends/santiago/props_santiago.json +1 -0
  499. qiskit/providers/fake_provider/backends/sherbrooke/__init__.py +17 -0
  500. qiskit/providers/fake_provider/backends/sherbrooke/conf_sherbrooke.json +1 -0
  501. qiskit/providers/fake_provider/backends/sherbrooke/defs_sherbrooke.json +1 -0
  502. qiskit/providers/fake_provider/backends/sherbrooke/fake_sherbrooke.py +28 -0
  503. qiskit/providers/fake_provider/backends/sherbrooke/props_sherbrooke.json +1 -0
  504. qiskit/providers/fake_provider/backends/singapore/__init__.py +16 -0
  505. qiskit/providers/fake_provider/backends/singapore/conf_singapore.json +1 -0
  506. qiskit/providers/fake_provider/backends/singapore/fake_singapore.py +58 -0
  507. qiskit/providers/fake_provider/backends/singapore/props_singapore.json +1 -0
  508. qiskit/providers/fake_provider/backends/sydney/__init__.py +16 -0
  509. qiskit/providers/fake_provider/backends/sydney/conf_sydney.json +1 -0
  510. qiskit/providers/fake_provider/backends/sydney/defs_sydney.json +1 -0
  511. qiskit/providers/fake_provider/backends/sydney/fake_sydney.py +38 -0
  512. qiskit/providers/fake_provider/backends/sydney/props_sydney.json +1 -0
  513. qiskit/providers/fake_provider/backends/tenerife/__init__.py +15 -0
  514. qiskit/providers/fake_provider/backends/tenerife/fake_tenerife.py +64 -0
  515. qiskit/providers/fake_provider/backends/tenerife/props_tenerife.json +1 -0
  516. qiskit/providers/fake_provider/backends/tokyo/__init__.py +15 -0
  517. qiskit/providers/fake_provider/backends/tokyo/fake_tokyo.py +137 -0
  518. qiskit/providers/fake_provider/backends/tokyo/props_tokyo.json +1 -0
  519. qiskit/providers/fake_provider/backends/toronto/__init__.py +16 -0
  520. qiskit/providers/fake_provider/backends/toronto/conf_toronto.json +1 -0
  521. qiskit/providers/fake_provider/backends/toronto/defs_toronto.json +1 -0
  522. qiskit/providers/fake_provider/backends/toronto/fake_toronto.py +38 -0
  523. qiskit/providers/fake_provider/backends/toronto/props_toronto.json +1 -0
  524. qiskit/providers/fake_provider/backends/valencia/__init__.py +16 -0
  525. qiskit/providers/fake_provider/backends/valencia/conf_valencia.json +1 -0
  526. qiskit/providers/fake_provider/backends/valencia/defs_valencia.json +1 -0
  527. qiskit/providers/fake_provider/backends/valencia/fake_valencia.py +38 -0
  528. qiskit/providers/fake_provider/backends/valencia/props_valencia.json +1 -0
  529. qiskit/providers/fake_provider/backends/vigo/__init__.py +16 -0
  530. qiskit/providers/fake_provider/backends/vigo/conf_vigo.json +1 -0
  531. qiskit/providers/fake_provider/backends/vigo/fake_vigo.py +50 -0
  532. qiskit/providers/fake_provider/backends/vigo/props_vigo.json +1 -0
  533. qiskit/providers/fake_provider/backends/washington/__init__.py +18 -0
  534. qiskit/providers/fake_provider/backends/washington/conf_washington.json +1 -0
  535. qiskit/providers/fake_provider/backends/washington/defs_washington.json +1 -0
  536. qiskit/providers/fake_provider/backends/washington/fake_washington.py +38 -0
  537. qiskit/providers/fake_provider/backends/washington/props_washington.json +1 -0
  538. qiskit/providers/fake_provider/backends/yorktown/__init__.py +16 -0
  539. qiskit/providers/fake_provider/backends/yorktown/conf_yorktown.json +1 -0
  540. qiskit/providers/fake_provider/backends/yorktown/fake_yorktown.py +54 -0
  541. qiskit/providers/fake_provider/backends/yorktown/props_yorktown.json +1 -0
  542. qiskit/providers/fake_provider/fake_1q.py +91 -0
  543. qiskit/providers/fake_provider/fake_backend.py +572 -0
  544. qiskit/providers/fake_provider/fake_backend_v2.py +217 -0
  545. qiskit/providers/fake_provider/fake_job.py +81 -0
  546. qiskit/providers/fake_provider/fake_mumbai_v2.py +637 -0
  547. qiskit/providers/fake_provider/fake_openpulse_2q.py +342 -0
  548. qiskit/providers/fake_provider/fake_openpulse_3q.py +332 -0
  549. qiskit/providers/fake_provider/fake_provider.py +214 -0
  550. qiskit/providers/fake_provider/fake_pulse_backend.py +43 -0
  551. qiskit/providers/fake_provider/fake_qasm_backend.py +72 -0
  552. qiskit/providers/fake_provider/fake_qasm_simulator.py +48 -0
  553. qiskit/providers/fake_provider/fake_qobj.py +44 -0
  554. qiskit/providers/fake_provider/utils/__init__.py +15 -0
  555. qiskit/providers/fake_provider/utils/backend_converter.py +150 -0
  556. qiskit/providers/fake_provider/utils/configurable_backend.py +360 -0
  557. qiskit/providers/fake_provider/utils/json_decoder.py +109 -0
  558. qiskit/providers/job.py +142 -0
  559. qiskit/providers/jobstatus.py +30 -0
  560. qiskit/providers/models/__init__.py +52 -0
  561. qiskit/providers/models/backendconfiguration.py +994 -0
  562. qiskit/providers/models/backendproperties.py +490 -0
  563. qiskit/providers/models/backendstatus.py +94 -0
  564. qiskit/providers/models/jobstatus.py +66 -0
  565. qiskit/providers/models/pulsedefaults.py +304 -0
  566. qiskit/providers/options.py +273 -0
  567. qiskit/providers/provider.py +79 -0
  568. qiskit/providers/providerutils.py +99 -0
  569. qiskit/pulse/__init__.py +170 -0
  570. qiskit/pulse/builder.py +2733 -0
  571. qiskit/pulse/calibration_entries.py +357 -0
  572. qiskit/pulse/channels.py +221 -0
  573. qiskit/pulse/configuration.py +244 -0
  574. qiskit/pulse/exceptions.py +43 -0
  575. qiskit/pulse/filters.py +302 -0
  576. qiskit/pulse/instruction_schedule_map.py +406 -0
  577. qiskit/pulse/instructions/__init__.py +69 -0
  578. qiskit/pulse/instructions/acquire.py +150 -0
  579. qiskit/pulse/instructions/call.py +176 -0
  580. qiskit/pulse/instructions/delay.py +69 -0
  581. qiskit/pulse/instructions/directives.py +145 -0
  582. qiskit/pulse/instructions/frequency.py +132 -0
  583. qiskit/pulse/instructions/instruction.py +266 -0
  584. qiskit/pulse/instructions/phase.py +149 -0
  585. qiskit/pulse/instructions/play.py +96 -0
  586. qiskit/pulse/instructions/reference.py +99 -0
  587. qiskit/pulse/instructions/snapshot.py +80 -0
  588. qiskit/pulse/library/__init__.py +99 -0
  589. qiskit/pulse/library/continuous.py +430 -0
  590. qiskit/pulse/library/parametric_pulses.py +629 -0
  591. qiskit/pulse/library/pulse.py +137 -0
  592. qiskit/pulse/library/samplers/__init__.py +15 -0
  593. qiskit/pulse/library/samplers/decorators.py +299 -0
  594. qiskit/pulse/library/samplers/strategies.py +71 -0
  595. qiskit/pulse/library/symbolic_pulses.py +1962 -0
  596. qiskit/pulse/library/waveform.py +134 -0
  597. qiskit/pulse/macros.py +256 -0
  598. qiskit/pulse/parameter_manager.py +432 -0
  599. qiskit/pulse/parser.py +314 -0
  600. qiskit/pulse/reference_manager.py +58 -0
  601. qiskit/pulse/schedule.py +2002 -0
  602. qiskit/pulse/transforms/__init__.py +106 -0
  603. qiskit/pulse/transforms/alignments.py +406 -0
  604. qiskit/pulse/transforms/base_transforms.py +71 -0
  605. qiskit/pulse/transforms/canonicalization.py +514 -0
  606. qiskit/pulse/transforms/dag.py +107 -0
  607. qiskit/pulse/utils.py +109 -0
  608. qiskit/qasm/libs/qelib1.inc +266 -0
  609. qiskit/qasm/libs/stdgates.inc +75 -0
  610. qiskit/qasm2/__init__.py +658 -0
  611. qiskit/qasm2/exceptions.py +27 -0
  612. qiskit/qasm2/export.py +374 -0
  613. qiskit/qasm2/parse.py +403 -0
  614. qiskit/qasm3/__init__.py +255 -0
  615. qiskit/qasm3/ast.py +606 -0
  616. qiskit/qasm3/exceptions.py +27 -0
  617. qiskit/qasm3/experimental.py +30 -0
  618. qiskit/qasm3/exporter.py +1079 -0
  619. qiskit/qasm3/printer.py +545 -0
  620. qiskit/qobj/__init__.py +75 -0
  621. qiskit/qobj/common.py +71 -0
  622. qiskit/qobj/converters/__init__.py +18 -0
  623. qiskit/qobj/converters/lo_config.py +168 -0
  624. qiskit/qobj/converters/pulse_instruction.py +1070 -0
  625. qiskit/qobj/pulse_qobj.py +655 -0
  626. qiskit/qobj/qasm_qobj.py +656 -0
  627. qiskit/qobj/utils.py +37 -0
  628. qiskit/qpy/__init__.py +1348 -0
  629. qiskit/qpy/binary_io/__init__.py +36 -0
  630. qiskit/qpy/binary_io/circuits.py +1212 -0
  631. qiskit/qpy/binary_io/schedules.py +619 -0
  632. qiskit/qpy/binary_io/value.py +549 -0
  633. qiskit/qpy/common.py +305 -0
  634. qiskit/qpy/exceptions.py +28 -0
  635. qiskit/qpy/formats.py +360 -0
  636. qiskit/qpy/interface.py +308 -0
  637. qiskit/qpy/type_keys.py +544 -0
  638. qiskit/quantum_info/__init__.py +173 -0
  639. qiskit/quantum_info/analysis/__init__.py +17 -0
  640. qiskit/quantum_info/analysis/average.py +47 -0
  641. qiskit/quantum_info/analysis/distance.py +101 -0
  642. qiskit/quantum_info/analysis/make_observable.py +43 -0
  643. qiskit/quantum_info/analysis/z2_symmetries.py +483 -0
  644. qiskit/quantum_info/operators/__init__.py +28 -0
  645. qiskit/quantum_info/operators/base_operator.py +145 -0
  646. qiskit/quantum_info/operators/channel/__init__.py +29 -0
  647. qiskit/quantum_info/operators/channel/chi.py +190 -0
  648. qiskit/quantum_info/operators/channel/choi.py +217 -0
  649. qiskit/quantum_info/operators/channel/kraus.py +336 -0
  650. qiskit/quantum_info/operators/channel/ptm.py +203 -0
  651. qiskit/quantum_info/operators/channel/quantum_channel.py +350 -0
  652. qiskit/quantum_info/operators/channel/stinespring.py +295 -0
  653. qiskit/quantum_info/operators/channel/superop.py +376 -0
  654. qiskit/quantum_info/operators/channel/transformations.py +467 -0
  655. qiskit/quantum_info/operators/custom_iterator.py +48 -0
  656. qiskit/quantum_info/operators/dihedral/__init__.py +18 -0
  657. qiskit/quantum_info/operators/dihedral/dihedral.py +508 -0
  658. qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +218 -0
  659. qiskit/quantum_info/operators/dihedral/polynomial.py +313 -0
  660. qiskit/quantum_info/operators/dihedral/random.py +61 -0
  661. qiskit/quantum_info/operators/linear_op.py +25 -0
  662. qiskit/quantum_info/operators/measures.py +423 -0
  663. qiskit/quantum_info/operators/mixins/__init__.py +52 -0
  664. qiskit/quantum_info/operators/mixins/adjoint.py +52 -0
  665. qiskit/quantum_info/operators/mixins/group.py +171 -0
  666. qiskit/quantum_info/operators/mixins/linear.py +84 -0
  667. qiskit/quantum_info/operators/mixins/multiply.py +62 -0
  668. qiskit/quantum_info/operators/mixins/tolerances.py +72 -0
  669. qiskit/quantum_info/operators/op_shape.py +533 -0
  670. qiskit/quantum_info/operators/operator.py +778 -0
  671. qiskit/quantum_info/operators/predicates.py +170 -0
  672. qiskit/quantum_info/operators/random.py +154 -0
  673. qiskit/quantum_info/operators/scalar_op.py +253 -0
  674. qiskit/quantum_info/operators/symplectic/__init__.py +23 -0
  675. qiskit/quantum_info/operators/symplectic/base_pauli.py +720 -0
  676. qiskit/quantum_info/operators/symplectic/clifford.py +1022 -0
  677. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +558 -0
  678. qiskit/quantum_info/operators/symplectic/pauli.py +699 -0
  679. qiskit/quantum_info/operators/symplectic/pauli_list.py +1209 -0
  680. qiskit/quantum_info/operators/symplectic/pauli_utils.py +40 -0
  681. qiskit/quantum_info/operators/symplectic/random.py +264 -0
  682. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1156 -0
  683. qiskit/quantum_info/operators/utils/__init__.py +20 -0
  684. qiskit/quantum_info/operators/utils/anti_commutator.py +36 -0
  685. qiskit/quantum_info/operators/utils/commutator.py +36 -0
  686. qiskit/quantum_info/operators/utils/double_commutator.py +76 -0
  687. qiskit/quantum_info/random.py +26 -0
  688. qiskit/quantum_info/states/__init__.py +28 -0
  689. qiskit/quantum_info/states/densitymatrix.py +848 -0
  690. qiskit/quantum_info/states/measures.py +288 -0
  691. qiskit/quantum_info/states/quantum_state.py +503 -0
  692. qiskit/quantum_info/states/random.py +157 -0
  693. qiskit/quantum_info/states/stabilizerstate.py +638 -0
  694. qiskit/quantum_info/states/statevector.py +961 -0
  695. qiskit/quantum_info/states/utils.py +245 -0
  696. qiskit/quantum_info/synthesis/__init__.py +20 -0
  697. qiskit/quantum_info/synthesis/clifford_decompose.py +69 -0
  698. qiskit/quantum_info/synthesis/cnotdihedral_decompose.py +50 -0
  699. qiskit/quantum_info/synthesis/ion_decompose.py +55 -0
  700. qiskit/quantum_info/synthesis/local_invariance.py +93 -0
  701. qiskit/quantum_info/synthesis/one_qubit_decompose.py +284 -0
  702. qiskit/quantum_info/synthesis/qsd.py +269 -0
  703. qiskit/quantum_info/synthesis/quaternion.py +156 -0
  704. qiskit/quantum_info/synthesis/two_qubit_decompose.py +1567 -0
  705. qiskit/quantum_info/synthesis/weyl.py +98 -0
  706. qiskit/quantum_info/synthesis/xx_decompose/__init__.py +19 -0
  707. qiskit/quantum_info/synthesis/xx_decompose/circuits.py +299 -0
  708. qiskit/quantum_info/synthesis/xx_decompose/decomposer.py +314 -0
  709. qiskit/quantum_info/synthesis/xx_decompose/embodiments.py +163 -0
  710. qiskit/quantum_info/synthesis/xx_decompose/paths.py +412 -0
  711. qiskit/quantum_info/synthesis/xx_decompose/polytopes.py +264 -0
  712. qiskit/quantum_info/synthesis/xx_decompose/utilities.py +40 -0
  713. qiskit/quantum_info/synthesis/xx_decompose/weyl.py +133 -0
  714. qiskit/result/__init__.py +67 -0
  715. qiskit/result/counts.py +189 -0
  716. qiskit/result/distributions/__init__.py +17 -0
  717. qiskit/result/distributions/probability.py +100 -0
  718. qiskit/result/distributions/quasi.py +154 -0
  719. qiskit/result/exceptions.py +40 -0
  720. qiskit/result/mitigation/__init__.py +13 -0
  721. qiskit/result/mitigation/base_readout_mitigator.py +79 -0
  722. qiskit/result/mitigation/correlated_readout_mitigator.py +268 -0
  723. qiskit/result/mitigation/local_readout_mitigator.py +319 -0
  724. qiskit/result/mitigation/utils.py +161 -0
  725. qiskit/result/models.py +233 -0
  726. qiskit/result/postprocess.py +239 -0
  727. qiskit/result/result.py +397 -0
  728. qiskit/result/sampled_expval.py +75 -0
  729. qiskit/result/utils.py +295 -0
  730. qiskit/scheduler/__init__.py +31 -0
  731. qiskit/scheduler/config.py +35 -0
  732. qiskit/scheduler/lowering.py +187 -0
  733. qiskit/scheduler/methods/__init__.py +22 -0
  734. qiskit/scheduler/methods/basic.py +137 -0
  735. qiskit/scheduler/schedule_circuit.py +67 -0
  736. qiskit/scheduler/sequence.py +102 -0
  737. qiskit/synthesis/__init__.py +122 -0
  738. qiskit/synthesis/clifford/__init__.py +19 -0
  739. qiskit/synthesis/clifford/clifford_decompose_ag.py +176 -0
  740. qiskit/synthesis/clifford/clifford_decompose_bm.py +276 -0
  741. qiskit/synthesis/clifford/clifford_decompose_full.py +61 -0
  742. qiskit/synthesis/clifford/clifford_decompose_greedy.py +347 -0
  743. qiskit/synthesis/clifford/clifford_decompose_layers.py +443 -0
  744. qiskit/synthesis/cnotdihedral/__init__.py +17 -0
  745. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +46 -0
  746. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +140 -0
  747. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_two_qubits.py +264 -0
  748. qiskit/synthesis/discrete_basis/__init__.py +16 -0
  749. qiskit/synthesis/discrete_basis/commutator_decompose.py +241 -0
  750. qiskit/synthesis/discrete_basis/gate_sequence.py +415 -0
  751. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +163 -0
  752. qiskit/synthesis/discrete_basis/solovay_kitaev.py +207 -0
  753. qiskit/synthesis/evolution/__init__.py +20 -0
  754. qiskit/synthesis/evolution/evolution_synthesis.py +46 -0
  755. qiskit/synthesis/evolution/lie_trotter.py +123 -0
  756. qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
  757. qiskit/synthesis/evolution/product_formula.py +328 -0
  758. qiskit/synthesis/evolution/qdrift.py +102 -0
  759. qiskit/synthesis/evolution/suzuki_trotter.py +145 -0
  760. qiskit/synthesis/linear/__init__.py +25 -0
  761. qiskit/synthesis/linear/cnot_synth.py +141 -0
  762. qiskit/synthesis/linear/linear_circuits_utils.py +127 -0
  763. qiskit/synthesis/linear/linear_depth_lnn.py +275 -0
  764. qiskit/synthesis/linear/linear_matrix_utils.py +175 -0
  765. qiskit/synthesis/linear_phase/__init__.py +17 -0
  766. qiskit/synthesis/linear_phase/cnot_phase_synth.py +203 -0
  767. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +262 -0
  768. qiskit/synthesis/linear_phase/cz_depth_lnn.py +206 -0
  769. qiskit/synthesis/permutation/__init__.py +17 -0
  770. qiskit/synthesis/permutation/permutation_full.py +90 -0
  771. qiskit/synthesis/permutation/permutation_lnn.py +68 -0
  772. qiskit/synthesis/permutation/permutation_utils.py +73 -0
  773. qiskit/synthesis/stabilizer/__init__.py +15 -0
  774. qiskit/synthesis/stabilizer/stabilizer_decompose.py +188 -0
  775. qiskit/test/__init__.py +18 -0
  776. qiskit/test/_canonical.py +125 -0
  777. qiskit/test/base.py +331 -0
  778. qiskit/test/decorators.py +308 -0
  779. qiskit/test/ibmq_mock.py +45 -0
  780. qiskit/test/mock/__init__.py +40 -0
  781. qiskit/test/mock/backends/__init__.py +32 -0
  782. qiskit/test/mock/backends/almaden/__init__.py +32 -0
  783. qiskit/test/mock/backends/armonk/__init__.py +32 -0
  784. qiskit/test/mock/backends/athens/__init__.py +32 -0
  785. qiskit/test/mock/backends/belem/__init__.py +32 -0
  786. qiskit/test/mock/backends/boeblingen/__init__.py +32 -0
  787. qiskit/test/mock/backends/bogota/__init__.py +32 -0
  788. qiskit/test/mock/backends/brooklyn/__init__.py +32 -0
  789. qiskit/test/mock/backends/burlington/__init__.py +32 -0
  790. qiskit/test/mock/backends/cairo/__init__.py +32 -0
  791. qiskit/test/mock/backends/cambridge/__init__.py +32 -0
  792. qiskit/test/mock/backends/casablanca/__init__.py +32 -0
  793. qiskit/test/mock/backends/essex/__init__.py +32 -0
  794. qiskit/test/mock/backends/guadalupe/__init__.py +32 -0
  795. qiskit/test/mock/backends/hanoi/__init__.py +32 -0
  796. qiskit/test/mock/backends/jakarta/__init__.py +32 -0
  797. qiskit/test/mock/backends/johannesburg/__init__.py +32 -0
  798. qiskit/test/mock/backends/kolkata/__init__.py +32 -0
  799. qiskit/test/mock/backends/lagos/__init__.py +32 -0
  800. qiskit/test/mock/backends/lima/__init__.py +32 -0
  801. qiskit/test/mock/backends/london/__init__.py +32 -0
  802. qiskit/test/mock/backends/manhattan/__init__.py +32 -0
  803. qiskit/test/mock/backends/manila/__init__.py +32 -0
  804. qiskit/test/mock/backends/melbourne/__init__.py +32 -0
  805. qiskit/test/mock/backends/montreal/__init__.py +32 -0
  806. qiskit/test/mock/backends/mumbai/__init__.py +32 -0
  807. qiskit/test/mock/backends/nairobi/__init__.py +32 -0
  808. qiskit/test/mock/backends/ourense/__init__.py +32 -0
  809. qiskit/test/mock/backends/paris/__init__.py +32 -0
  810. qiskit/test/mock/backends/poughkeepsie/__init__.py +32 -0
  811. qiskit/test/mock/backends/quito/__init__.py +32 -0
  812. qiskit/test/mock/backends/rochester/__init__.py +32 -0
  813. qiskit/test/mock/backends/rome/__init__.py +32 -0
  814. qiskit/test/mock/backends/rueschlikon/__init__.py +32 -0
  815. qiskit/test/mock/backends/santiago/__init__.py +32 -0
  816. qiskit/test/mock/backends/singapore/__init__.py +32 -0
  817. qiskit/test/mock/backends/sydney/__init__.py +32 -0
  818. qiskit/test/mock/backends/tenerife/__init__.py +32 -0
  819. qiskit/test/mock/backends/tokyo/__init__.py +32 -0
  820. qiskit/test/mock/backends/toronto/__init__.py +32 -0
  821. qiskit/test/mock/backends/valencia/__init__.py +32 -0
  822. qiskit/test/mock/backends/vigo/__init__.py +32 -0
  823. qiskit/test/mock/backends/washington/__init__.py +32 -0
  824. qiskit/test/mock/backends/yorktown/__init__.py +32 -0
  825. qiskit/test/providers/__init__.py +16 -0
  826. qiskit/test/providers/backend.py +75 -0
  827. qiskit/test/providers/provider.py +59 -0
  828. qiskit/test/reference_circuits.py +41 -0
  829. qiskit/test/testing_options.py +93 -0
  830. qiskit/test/utils.py +87 -0
  831. qiskit/tools/__init__.py +44 -0
  832. qiskit/tools/events/__init__.py +25 -0
  833. qiskit/tools/events/progressbar.py +195 -0
  834. qiskit/tools/events/pubsub.py +158 -0
  835. qiskit/tools/jupyter/__init__.py +138 -0
  836. qiskit/tools/jupyter/backend_monitor.py +588 -0
  837. qiskit/tools/jupyter/backend_overview.py +322 -0
  838. qiskit/tools/jupyter/copyright.py +42 -0
  839. qiskit/tools/jupyter/job_watcher.py +167 -0
  840. qiskit/tools/jupyter/job_widgets.py +160 -0
  841. qiskit/tools/jupyter/jupyter_magics.py +190 -0
  842. qiskit/tools/jupyter/library.py +189 -0
  843. qiskit/tools/jupyter/monospace.py +29 -0
  844. qiskit/tools/jupyter/progressbar.py +122 -0
  845. qiskit/tools/jupyter/version_table.py +67 -0
  846. qiskit/tools/jupyter/watcher_monitor.py +74 -0
  847. qiskit/tools/monitor/__init__.py +16 -0
  848. qiskit/tools/monitor/job_monitor.py +107 -0
  849. qiskit/tools/monitor/overview.py +247 -0
  850. qiskit/tools/parallel.py +198 -0
  851. qiskit/tools/visualization.py +16 -0
  852. qiskit/transpiler/__init__.py +1287 -0
  853. qiskit/transpiler/basepasses.py +221 -0
  854. qiskit/transpiler/coupling.py +500 -0
  855. qiskit/transpiler/exceptions.py +55 -0
  856. qiskit/transpiler/fencedobjs.py +78 -0
  857. qiskit/transpiler/instruction_durations.py +278 -0
  858. qiskit/transpiler/layout.py +658 -0
  859. qiskit/transpiler/passes/__init__.py +296 -0
  860. qiskit/transpiler/passes/analysis/__init__.py +23 -0
  861. qiskit/transpiler/passes/analysis/count_ops.py +30 -0
  862. qiskit/transpiler/passes/analysis/count_ops_longest_path.py +26 -0
  863. qiskit/transpiler/passes/analysis/dag_longest_path.py +24 -0
  864. qiskit/transpiler/passes/analysis/depth.py +33 -0
  865. qiskit/transpiler/passes/analysis/num_qubits.py +26 -0
  866. qiskit/transpiler/passes/analysis/num_tensor_factors.py +26 -0
  867. qiskit/transpiler/passes/analysis/resource_estimation.py +41 -0
  868. qiskit/transpiler/passes/analysis/size.py +36 -0
  869. qiskit/transpiler/passes/analysis/width.py +27 -0
  870. qiskit/transpiler/passes/basis/__init__.py +20 -0
  871. qiskit/transpiler/passes/basis/basis_translator.py +697 -0
  872. qiskit/transpiler/passes/basis/decompose.py +98 -0
  873. qiskit/transpiler/passes/basis/translate_parameterized.py +177 -0
  874. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +86 -0
  875. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +107 -0
  876. qiskit/transpiler/passes/basis/unroller.py +145 -0
  877. qiskit/transpiler/passes/calibration/__init__.py +17 -0
  878. qiskit/transpiler/passes/calibration/base_builder.py +79 -0
  879. qiskit/transpiler/passes/calibration/builders.py +20 -0
  880. qiskit/transpiler/passes/calibration/exceptions.py +22 -0
  881. qiskit/transpiler/passes/calibration/pulse_gate.py +98 -0
  882. qiskit/transpiler/passes/calibration/rx_builder.py +160 -0
  883. qiskit/transpiler/passes/calibration/rzx_builder.py +394 -0
  884. qiskit/transpiler/passes/calibration/rzx_templates.py +51 -0
  885. qiskit/transpiler/passes/layout/__init__.py +27 -0
  886. qiskit/transpiler/passes/layout/_csp_custom_solver.py +65 -0
  887. qiskit/transpiler/passes/layout/apply_layout.py +108 -0
  888. qiskit/transpiler/passes/layout/csp_layout.py +132 -0
  889. qiskit/transpiler/passes/layout/dense_layout.py +202 -0
  890. qiskit/transpiler/passes/layout/disjoint_utils.py +205 -0
  891. qiskit/transpiler/passes/layout/enlarge_with_ancilla.py +49 -0
  892. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +117 -0
  893. qiskit/transpiler/passes/layout/layout_2q_distance.py +77 -0
  894. qiskit/transpiler/passes/layout/noise_adaptive_layout.py +311 -0
  895. qiskit/transpiler/passes/layout/sabre_layout.py +468 -0
  896. qiskit/transpiler/passes/layout/sabre_pre_layout.py +217 -0
  897. qiskit/transpiler/passes/layout/set_layout.py +64 -0
  898. qiskit/transpiler/passes/layout/trivial_layout.py +66 -0
  899. qiskit/transpiler/passes/layout/vf2_layout.py +257 -0
  900. qiskit/transpiler/passes/layout/vf2_post_layout.py +419 -0
  901. qiskit/transpiler/passes/layout/vf2_utils.py +260 -0
  902. qiskit/transpiler/passes/optimization/__init__.py +38 -0
  903. qiskit/transpiler/passes/optimization/_gate_extension.py +80 -0
  904. qiskit/transpiler/passes/optimization/collect_1q_runs.py +31 -0
  905. qiskit/transpiler/passes/optimization/collect_2q_blocks.py +35 -0
  906. qiskit/transpiler/passes/optimization/collect_and_collapse.py +115 -0
  907. qiskit/transpiler/passes/optimization/collect_cliffords.py +97 -0
  908. qiskit/transpiler/passes/optimization/collect_linear_functions.py +80 -0
  909. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +227 -0
  910. qiskit/transpiler/passes/optimization/commutation_analysis.py +93 -0
  911. qiskit/transpiler/passes/optimization/commutative_cancellation.py +207 -0
  912. qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +97 -0
  913. qiskit/transpiler/passes/optimization/consolidate_blocks.py +219 -0
  914. qiskit/transpiler/passes/optimization/crosstalk_adaptive_schedule.py +732 -0
  915. qiskit/transpiler/passes/optimization/cx_cancellation.py +55 -0
  916. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +160 -0
  917. qiskit/transpiler/passes/optimization/hoare_opt.py +416 -0
  918. qiskit/transpiler/passes/optimization/inverse_cancellation.py +177 -0
  919. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +149 -0
  920. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +268 -0
  921. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +263 -0
  922. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +384 -0
  923. qiskit/transpiler/passes/optimization/optimize_cliffords.py +89 -0
  924. qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +71 -0
  925. qiskit/transpiler/passes/optimization/remove_diagonal_gates_before_measure.py +69 -0
  926. qiskit/transpiler/passes/optimization/remove_reset_in_zero_state.py +37 -0
  927. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +47 -0
  928. qiskit/transpiler/passes/optimization/template_matching/__init__.py +19 -0
  929. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +749 -0
  930. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +454 -0
  931. qiskit/transpiler/passes/optimization/template_matching/maximal_matches.py +77 -0
  932. qiskit/transpiler/passes/optimization/template_matching/template_matching.py +370 -0
  933. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +629 -0
  934. qiskit/transpiler/passes/optimization/template_optimization.py +158 -0
  935. qiskit/transpiler/passes/routing/__init__.py +21 -0
  936. qiskit/transpiler/passes/routing/algorithms/__init__.py +33 -0
  937. qiskit/transpiler/passes/routing/algorithms/token_swapper.py +105 -0
  938. qiskit/transpiler/passes/routing/algorithms/types.py +46 -0
  939. qiskit/transpiler/passes/routing/algorithms/util.py +103 -0
  940. qiskit/transpiler/passes/routing/basic_swap.py +155 -0
  941. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/__init__.py +25 -0
  942. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_block.py +60 -0
  943. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +387 -0
  944. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/pauli_2q_evolution_commutation.py +141 -0
  945. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +306 -0
  946. qiskit/transpiler/passes/routing/layout_transformation.py +118 -0
  947. qiskit/transpiler/passes/routing/lookahead_swap.py +384 -0
  948. qiskit/transpiler/passes/routing/sabre_swap.py +430 -0
  949. qiskit/transpiler/passes/routing/stochastic_swap.py +512 -0
  950. qiskit/transpiler/passes/routing/utils.py +35 -0
  951. qiskit/transpiler/passes/scheduling/__init__.py +27 -0
  952. qiskit/transpiler/passes/scheduling/alap.py +155 -0
  953. qiskit/transpiler/passes/scheduling/alignments/__init__.py +81 -0
  954. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +256 -0
  955. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +75 -0
  956. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +97 -0
  957. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +241 -0
  958. qiskit/transpiler/passes/scheduling/asap.py +177 -0
  959. qiskit/transpiler/passes/scheduling/base_scheduler.py +289 -0
  960. qiskit/transpiler/passes/scheduling/calibration_creators.py +27 -0
  961. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +285 -0
  962. qiskit/transpiler/passes/scheduling/padding/__init__.py +16 -0
  963. qiskit/transpiler/passes/scheduling/padding/base_padding.py +256 -0
  964. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +408 -0
  965. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +79 -0
  966. qiskit/transpiler/passes/scheduling/rzx_templates.py +28 -0
  967. qiskit/transpiler/passes/scheduling/scheduling/__init__.py +17 -0
  968. qiskit/transpiler/passes/scheduling/scheduling/alap.py +127 -0
  969. qiskit/transpiler/passes/scheduling/scheduling/asap.py +131 -0
  970. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +89 -0
  971. qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
  972. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +135 -0
  973. qiskit/transpiler/passes/synthesis/__init__.py +19 -0
  974. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +637 -0
  975. qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +63 -0
  976. qiskit/transpiler/passes/synthesis/plugin.py +597 -0
  977. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +289 -0
  978. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +895 -0
  979. qiskit/transpiler/passes/utils/__init__.py +34 -0
  980. qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +95 -0
  981. qiskit/transpiler/passes/utils/block_to_matrix.py +47 -0
  982. qiskit/transpiler/passes/utils/check_gate_direction.py +87 -0
  983. qiskit/transpiler/passes/utils/check_map.py +94 -0
  984. qiskit/transpiler/passes/utils/contains_instruction.py +45 -0
  985. qiskit/transpiler/passes/utils/control_flow.py +61 -0
  986. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +89 -0
  987. qiskit/transpiler/passes/utils/dag_fixed_point.py +36 -0
  988. qiskit/transpiler/passes/utils/error.py +69 -0
  989. qiskit/transpiler/passes/utils/filter_op_nodes.py +65 -0
  990. qiskit/transpiler/passes/utils/fixed_point.py +48 -0
  991. qiskit/transpiler/passes/utils/gate_direction.py +347 -0
  992. qiskit/transpiler/passes/utils/gates_basis.py +75 -0
  993. qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +162 -0
  994. qiskit/transpiler/passes/utils/minimum_point.py +118 -0
  995. qiskit/transpiler/passes/utils/remove_barriers.py +49 -0
  996. qiskit/transpiler/passes/utils/remove_final_measurements.py +114 -0
  997. qiskit/transpiler/passes/utils/unroll_forloops.py +81 -0
  998. qiskit/transpiler/passmanager.py +617 -0
  999. qiskit/transpiler/passmanager_config.py +193 -0
  1000. qiskit/transpiler/preset_passmanagers/__init__.py +280 -0
  1001. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +971 -0
  1002. qiskit/transpiler/preset_passmanagers/common.py +651 -0
  1003. qiskit/transpiler/preset_passmanagers/level0.py +113 -0
  1004. qiskit/transpiler/preset_passmanagers/level1.py +120 -0
  1005. qiskit/transpiler/preset_passmanagers/level2.py +119 -0
  1006. qiskit/transpiler/preset_passmanagers/level3.py +119 -0
  1007. qiskit/transpiler/preset_passmanagers/plugin.py +345 -0
  1008. qiskit/transpiler/propertyset.py +19 -0
  1009. qiskit/transpiler/runningpassmanager.py +174 -0
  1010. qiskit/transpiler/synthesis/__init__.py +16 -0
  1011. qiskit/transpiler/synthesis/aqc/__init__.py +178 -0
  1012. qiskit/transpiler/synthesis/aqc/approximate.py +116 -0
  1013. qiskit/transpiler/synthesis/aqc/aqc.py +170 -0
  1014. qiskit/transpiler/synthesis/aqc/aqc_plugin.py +146 -0
  1015. qiskit/transpiler/synthesis/aqc/cnot_structures.py +299 -0
  1016. qiskit/transpiler/synthesis/aqc/cnot_unit_circuit.py +103 -0
  1017. qiskit/transpiler/synthesis/aqc/cnot_unit_objective.py +299 -0
  1018. qiskit/transpiler/synthesis/aqc/elementary_operations.py +108 -0
  1019. qiskit/transpiler/synthesis/aqc/fast_gradient/__init__.py +164 -0
  1020. qiskit/transpiler/synthesis/aqc/fast_gradient/fast_grad_utils.py +237 -0
  1021. qiskit/transpiler/synthesis/aqc/fast_gradient/fast_gradient.py +225 -0
  1022. qiskit/transpiler/synthesis/aqc/fast_gradient/layer.py +370 -0
  1023. qiskit/transpiler/synthesis/aqc/fast_gradient/pmatrix.py +312 -0
  1024. qiskit/transpiler/synthesis/graysynth.py +114 -0
  1025. qiskit/transpiler/target.py +1540 -0
  1026. qiskit/transpiler/timing_constraints.py +59 -0
  1027. qiskit/user_config.py +239 -0
  1028. qiskit/utils/__init__.py +66 -0
  1029. qiskit/utils/classtools.py +146 -0
  1030. qiskit/utils/deprecation.py +489 -0
  1031. qiskit/utils/lazy_tester.py +334 -0
  1032. qiskit/utils/multiprocessing.py +48 -0
  1033. qiskit/utils/optionals.py +320 -0
  1034. qiskit/utils/units.py +143 -0
  1035. qiskit/version.py +84 -0
  1036. qiskit/visualization/__init__.py +289 -0
  1037. qiskit/visualization/array.py +204 -0
  1038. qiskit/visualization/bloch.py +741 -0
  1039. qiskit/visualization/circuit/__init__.py +15 -0
  1040. qiskit/visualization/circuit/_utils.py +633 -0
  1041. qiskit/visualization/circuit/circuit_visualization.py +717 -0
  1042. qiskit/visualization/circuit/latex.py +659 -0
  1043. qiskit/visualization/circuit/matplotlib.py +1975 -0
  1044. qiskit/visualization/circuit/qcstyle.py +420 -0
  1045. qiskit/visualization/circuit/styles/bw.json +202 -0
  1046. qiskit/visualization/circuit/styles/clifford.json +202 -0
  1047. qiskit/visualization/circuit/styles/iqp-dark.json +214 -0
  1048. qiskit/visualization/circuit/styles/iqp.json +214 -0
  1049. qiskit/visualization/circuit/styles/textbook.json +202 -0
  1050. qiskit/visualization/circuit/text.py +1802 -0
  1051. qiskit/visualization/circuit_visualization.py +19 -0
  1052. qiskit/visualization/counts_visualization.py +496 -0
  1053. qiskit/visualization/dag_visualization.py +224 -0
  1054. qiskit/visualization/exceptions.py +21 -0
  1055. qiskit/visualization/gate_map.py +1461 -0
  1056. qiskit/visualization/pass_manager_visualization.py +281 -0
  1057. qiskit/visualization/pulse_v2/__init__.py +21 -0
  1058. qiskit/visualization/pulse_v2/core.py +905 -0
  1059. qiskit/visualization/pulse_v2/device_info.py +146 -0
  1060. qiskit/visualization/pulse_v2/drawings.py +253 -0
  1061. qiskit/visualization/pulse_v2/events.py +254 -0
  1062. qiskit/visualization/pulse_v2/generators/__init__.py +40 -0
  1063. qiskit/visualization/pulse_v2/generators/barrier.py +76 -0
  1064. qiskit/visualization/pulse_v2/generators/chart.py +208 -0
  1065. qiskit/visualization/pulse_v2/generators/frame.py +437 -0
  1066. qiskit/visualization/pulse_v2/generators/snapshot.py +133 -0
  1067. qiskit/visualization/pulse_v2/generators/waveform.py +649 -0
  1068. qiskit/visualization/pulse_v2/interface.py +452 -0
  1069. qiskit/visualization/pulse_v2/layouts.py +395 -0
  1070. qiskit/visualization/pulse_v2/plotters/__init__.py +17 -0
  1071. qiskit/visualization/pulse_v2/plotters/base_plotter.py +53 -0
  1072. qiskit/visualization/pulse_v2/plotters/matplotlib.py +202 -0
  1073. qiskit/visualization/pulse_v2/stylesheet.py +322 -0
  1074. qiskit/visualization/pulse_v2/types.py +242 -0
  1075. qiskit/visualization/qcstyle.py +17 -0
  1076. qiskit/visualization/state_visualization.py +1518 -0
  1077. qiskit/visualization/timeline/__init__.py +21 -0
  1078. qiskit/visualization/timeline/core.py +457 -0
  1079. qiskit/visualization/timeline/drawings.py +260 -0
  1080. qiskit/visualization/timeline/generators.py +506 -0
  1081. qiskit/visualization/timeline/interface.py +414 -0
  1082. qiskit/visualization/timeline/layouts.py +115 -0
  1083. qiskit/visualization/timeline/plotters/__init__.py +16 -0
  1084. qiskit/visualization/timeline/plotters/base_plotter.py +58 -0
  1085. qiskit/visualization/timeline/plotters/matplotlib.py +193 -0
  1086. qiskit/visualization/timeline/stylesheet.py +311 -0
  1087. qiskit/visualization/timeline/types.py +148 -0
  1088. qiskit/visualization/transition_visualization.py +364 -0
  1089. qiskit/visualization/utils.py +49 -0
  1090. qiskit-1.0.0b1.dist-info/LICENSE.txt +203 -0
  1091. qiskit-1.0.0b1.dist-info/METADATA +430 -0
  1092. qiskit-1.0.0b1.dist-info/RECORD +1095 -0
  1093. qiskit-1.0.0b1.dist-info/WHEEL +6 -0
  1094. qiskit-1.0.0b1.dist-info/entry_points.txt +49 -0
  1095. qiskit-1.0.0b1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,961 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2017, 2019.
4
+ #
5
+ # This code is licensed under the Apache License, Version 2.0. You may
6
+ # obtain a copy of this license in the LICENSE.txt file in the root directory
7
+ # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
+ #
9
+ # Any modifications or derivative works of this code must retain this
10
+ # copyright notice, and modified files need to carry a notice indicating
11
+ # that they have been altered from the originals.
12
+
13
+ """
14
+ Statevector quantum state class.
15
+ """
16
+ from __future__ import annotations
17
+ import copy
18
+ import re
19
+ from numbers import Number
20
+
21
+ import numpy as np
22
+
23
+ from qiskit.circuit.quantumcircuit import QuantumCircuit
24
+ from qiskit.circuit.instruction import Instruction
25
+ from qiskit.exceptions import QiskitError
26
+ from qiskit.quantum_info.states.quantum_state import QuantumState
27
+ from qiskit.quantum_info.operators.mixins.tolerances import TolerancesMixin
28
+ from qiskit.quantum_info.operators.operator import Operator, BaseOperator
29
+ from qiskit.quantum_info.operators.symplectic import Pauli, SparsePauliOp
30
+ from qiskit.quantum_info.operators.op_shape import OpShape
31
+ from qiskit.quantum_info.operators.predicates import matrix_equal
32
+
33
+ from qiskit._accelerate.pauli_expval import (
34
+ expval_pauli_no_x,
35
+ expval_pauli_with_x,
36
+ )
37
+
38
+
39
+ class Statevector(QuantumState, TolerancesMixin):
40
+ """Statevector class"""
41
+
42
+ def __init__(
43
+ self,
44
+ data: np.ndarray | list | Statevector | Operator | QuantumCircuit | Instruction,
45
+ dims: int | tuple | list | None = None,
46
+ ):
47
+ """Initialize a statevector object.
48
+
49
+ Args:
50
+ data (np.array or list or Statevector or Operator or QuantumCircuit or
51
+ qiskit.circuit.Instruction):
52
+ Data from which the statevector can be constructed. This can be either a complex
53
+ vector, another statevector, a ``Operator`` with only one column or a
54
+ ``QuantumCircuit`` or ``Instruction``. If the data is a circuit or instruction,
55
+ the statevector is constructed by assuming that all qubits are initialized to the
56
+ zero state.
57
+ dims (int or tuple or list): Optional. The subsystem dimension of
58
+ the state (See additional information).
59
+
60
+ Raises:
61
+ QiskitError: if input data is not valid.
62
+
63
+ Additional Information:
64
+ The ``dims`` kwarg can be None, an integer, or an iterable of
65
+ integers.
66
+
67
+ * ``Iterable`` -- the subsystem dimensions are the values in the list
68
+ with the total number of subsystems given by the length of the list.
69
+
70
+ * ``Int`` or ``None`` -- the length of the input vector
71
+ specifies the total dimension of the density matrix. If it is a
72
+ power of two the state will be initialized as an N-qubit state.
73
+ If it is not a power of two the state will have a single
74
+ d-dimensional subsystem.
75
+ """
76
+ if isinstance(data, (list, np.ndarray)):
77
+ # Finally we check if the input is a raw vector in either a
78
+ # python list or numpy array format.
79
+ self._data = np.asarray(data, dtype=complex)
80
+ elif isinstance(data, Statevector):
81
+ self._data = data._data
82
+ if dims is None:
83
+ dims = data._op_shape._dims_l
84
+ elif isinstance(data, Operator):
85
+ # We allow conversion of column-vector operators to Statevectors
86
+ input_dim, _ = data.dim
87
+ if input_dim != 1:
88
+ raise QiskitError("Input Operator is not a column-vector.")
89
+ self._data = np.ravel(data.data)
90
+ elif isinstance(data, (QuantumCircuit, Instruction)):
91
+ self._data = Statevector.from_instruction(data).data
92
+ else:
93
+ raise QiskitError("Invalid input data format for Statevector")
94
+ # Check that the input is a numpy vector or column-vector numpy
95
+ # matrix. If it is a column-vector matrix reshape to a vector.
96
+ ndim = self._data.ndim
97
+ shape = self._data.shape
98
+ if ndim != 1:
99
+ if ndim == 2 and shape[1] == 1:
100
+ self._data = np.reshape(self._data, shape[0])
101
+ shape = self._data.shape
102
+ elif ndim != 2 or shape[1] != 1:
103
+ raise QiskitError("Invalid input: not a vector or column-vector.")
104
+ super().__init__(op_shape=OpShape.auto(shape=shape, dims_l=dims, num_qubits_r=0))
105
+
106
+ def __array__(self, dtype=None):
107
+ if dtype:
108
+ return np.asarray(self.data, dtype=dtype)
109
+ return self.data
110
+
111
+ def __eq__(self, other):
112
+ return super().__eq__(other) and np.allclose(
113
+ self._data, other._data, rtol=self.rtol, atol=self.atol
114
+ )
115
+
116
+ def __repr__(self):
117
+ prefix = "Statevector("
118
+ pad = len(prefix) * " "
119
+ return "{}{},\n{}dims={})".format(
120
+ prefix,
121
+ np.array2string(self._data, separator=", ", prefix=prefix),
122
+ pad,
123
+ self._op_shape.dims_l(),
124
+ )
125
+
126
+ @property
127
+ def settings(self) -> dict:
128
+ """Return settings."""
129
+ return {"data": self._data, "dims": self._op_shape.dims_l()}
130
+
131
+ def draw(self, output: str | None = None, **drawer_args):
132
+ """Return a visualization of the Statevector.
133
+
134
+ **repr**: ASCII TextMatrix of the state's ``__repr__``.
135
+
136
+ **text**: ASCII TextMatrix that can be printed in the console.
137
+
138
+ **latex**: An IPython Latex object for displaying in Jupyter Notebooks.
139
+
140
+ **latex_source**: Raw, uncompiled ASCII source to generate array using LaTeX.
141
+
142
+ **qsphere**: Matplotlib figure, rendering of statevector using `plot_state_qsphere()`.
143
+
144
+ **hinton**: Matplotlib figure, rendering of statevector using `plot_state_hinton()`.
145
+
146
+ **bloch**: Matplotlib figure, rendering of statevector using `plot_bloch_multivector()`.
147
+
148
+ **city**: Matplotlib figure, rendering of statevector using `plot_state_city()`.
149
+
150
+ **paulivec**: Matplotlib figure, rendering of statevector using `plot_state_paulivec()`.
151
+
152
+ Args:
153
+ output (str): Select the output method to use for drawing the
154
+ state. Valid choices are `repr`, `text`, `latex`, `latex_source`,
155
+ `qsphere`, `hinton`, `bloch`, `city`, or `paulivec`. Default is `repr`.
156
+ Default can be changed by adding the line ``state_drawer = <default>`` to
157
+ ``~/.qiskit/settings.conf`` under ``[default]``.
158
+ drawer_args: Arguments to be passed directly to the relevant drawing
159
+ function or constructor (`TextMatrix()`, `array_to_latex()`,
160
+ `plot_state_qsphere()`, `plot_state_hinton()` or `plot_bloch_multivector()`).
161
+ See the relevant function under `qiskit.visualization` for that function's
162
+ documentation.
163
+
164
+ Returns:
165
+ :class:`matplotlib.Figure` or :class:`str` or
166
+ :class:`TextMatrix` or :class:`IPython.display.Latex`:
167
+ Drawing of the Statevector.
168
+
169
+ Raises:
170
+ ValueError: when an invalid output method is selected.
171
+
172
+ Examples:
173
+
174
+ Plot one of the Bell states
175
+
176
+ .. plot::
177
+ :include-source:
178
+
179
+ from numpy import sqrt
180
+ from qiskit.quantum_info import Statevector
181
+ sv=Statevector([1/sqrt(2), 0, 0, -1/sqrt(2)])
182
+ sv.draw(output='hinton')
183
+
184
+ """
185
+ # pylint: disable=cyclic-import
186
+ from qiskit.visualization.state_visualization import state_drawer
187
+
188
+ return state_drawer(self, output=output, **drawer_args)
189
+
190
+ def _ipython_display_(self):
191
+ out = self.draw()
192
+ if isinstance(out, str):
193
+ print(out)
194
+ else:
195
+ from IPython.display import display
196
+
197
+ display(out)
198
+
199
+ def __getitem__(self, key: int | str) -> np.complex128:
200
+ """Return Statevector item either by index or binary label
201
+ Args:
202
+ key (int or str): index or corresponding binary label, e.g. '01' = 1.
203
+
204
+ Returns:
205
+ numpy.complex128: Statevector item.
206
+
207
+ Raises:
208
+ QiskitError: if key is not valid.
209
+ """
210
+ if isinstance(key, str):
211
+ try:
212
+ key = int(key, 2)
213
+ except ValueError:
214
+ raise QiskitError(f"Key '{key}' is not a valid binary string.") from None
215
+ if isinstance(key, int):
216
+ if key >= self.dim:
217
+ raise QiskitError(f"Key {key} is greater than Statevector dimension {self.dim}.")
218
+ if key < 0:
219
+ raise QiskitError(f"Key {key} is not a valid positive value.")
220
+ return self._data[key]
221
+ else:
222
+ raise QiskitError("Key must be int or a valid binary string.")
223
+
224
+ def __iter__(self):
225
+ yield from self._data
226
+
227
+ def __len__(self):
228
+ return len(self._data)
229
+
230
+ @property
231
+ def data(self) -> np.ndarray:
232
+ """Return data."""
233
+ return self._data
234
+
235
+ def is_valid(self, atol: float | None = None, rtol: float | None = None) -> bool:
236
+ """Return True if a Statevector has norm 1."""
237
+ if atol is None:
238
+ atol = self.atol
239
+ if rtol is None:
240
+ rtol = self.rtol
241
+ norm = np.linalg.norm(self.data)
242
+ return np.allclose(norm, 1, rtol=rtol, atol=atol)
243
+
244
+ def to_operator(self) -> Operator:
245
+ """Convert state to a rank-1 projector operator"""
246
+ mat = np.outer(self.data, np.conj(self.data))
247
+ return Operator(mat, input_dims=self.dims(), output_dims=self.dims())
248
+
249
+ def conjugate(self) -> Statevector:
250
+ """Return the conjugate of the operator."""
251
+ return Statevector(np.conj(self.data), dims=self.dims())
252
+
253
+ def trace(self) -> np.float64:
254
+ """Return the trace of the quantum state as a density matrix."""
255
+ return np.sum(np.abs(self.data) ** 2)
256
+
257
+ def purity(self) -> np.float64:
258
+ """Return the purity of the quantum state."""
259
+ # For a valid statevector the purity is always 1, however if we simply
260
+ # have an arbitrary vector (not correctly normalized) then the
261
+ # purity is equivalent to the trace squared:
262
+ # P(|psi>) = Tr[|psi><psi|psi><psi|] = |<psi|psi>|^2
263
+ return self.trace() ** 2
264
+
265
+ def tensor(self, other: Statevector) -> Statevector:
266
+ """Return the tensor product state self ⊗ other.
267
+
268
+ Args:
269
+ other (Statevector): a quantum state object.
270
+
271
+ Returns:
272
+ Statevector: the tensor product operator self ⊗ other.
273
+
274
+ Raises:
275
+ QiskitError: if other is not a quantum state.
276
+ """
277
+ if not isinstance(other, Statevector):
278
+ other = Statevector(other)
279
+ ret = copy.copy(self)
280
+ ret._op_shape = self._op_shape.tensor(other._op_shape)
281
+ ret._data = np.kron(self._data, other._data)
282
+ return ret
283
+
284
+ def inner(self, other: Statevector) -> np.complex128:
285
+ r"""Return the inner product of self and other as
286
+ :math:`\langle self| other \rangle`.
287
+
288
+ Args:
289
+ other (Statevector): a quantum state object.
290
+
291
+ Returns:
292
+ np.complex128: the inner product of self and other, :math:`\langle self| other \rangle`.
293
+
294
+ Raises:
295
+ QiskitError: if other is not a quantum state or has different dimension.
296
+ """
297
+ if not isinstance(other, Statevector):
298
+ other = Statevector(other)
299
+ if self.dims() != other.dims():
300
+ raise QiskitError(
301
+ f"Statevector dimensions do not match: {self.dims()} and {other.dims()}."
302
+ )
303
+ inner = np.vdot(self.data, other.data)
304
+ return inner
305
+
306
+ def expand(self, other: Statevector) -> Statevector:
307
+ """Return the tensor product state other ⊗ self.
308
+
309
+ Args:
310
+ other (Statevector): a quantum state object.
311
+
312
+ Returns:
313
+ Statevector: the tensor product state other ⊗ self.
314
+
315
+ Raises:
316
+ QiskitError: if other is not a quantum state.
317
+ """
318
+ if not isinstance(other, Statevector):
319
+ other = Statevector(other)
320
+ ret = copy.copy(self)
321
+ ret._op_shape = self._op_shape.expand(other._op_shape)
322
+ ret._data = np.kron(other._data, self._data)
323
+ return ret
324
+
325
+ def _add(self, other):
326
+ """Return the linear combination self + other.
327
+
328
+ Args:
329
+ other (Statevector): a quantum state object.
330
+
331
+ Returns:
332
+ Statevector: the linear combination self + other.
333
+
334
+ Raises:
335
+ QiskitError: if other is not a quantum state, or has
336
+ incompatible dimensions.
337
+ """
338
+ if not isinstance(other, Statevector):
339
+ other = Statevector(other)
340
+ self._op_shape._validate_add(other._op_shape)
341
+ ret = copy.copy(self)
342
+ ret._data = self.data + other.data
343
+ return ret
344
+
345
+ def _multiply(self, other):
346
+ """Return the scalar multiplied state self * other.
347
+
348
+ Args:
349
+ other (complex): a complex number.
350
+
351
+ Returns:
352
+ Statevector: the scalar multiplied state other * self.
353
+
354
+ Raises:
355
+ QiskitError: if other is not a valid complex number.
356
+ """
357
+ if not isinstance(other, Number):
358
+ raise QiskitError("other is not a number")
359
+ ret = copy.copy(self)
360
+ ret._data = other * self.data
361
+ return ret
362
+
363
+ def evolve(
364
+ self, other: Operator | QuantumCircuit | Instruction, qargs: list[int] | None = None
365
+ ) -> Statevector:
366
+ """Evolve a quantum state by the operator.
367
+
368
+ Args:
369
+ other (Operator | QuantumCircuit | circuit.Instruction): The operator to evolve by.
370
+ qargs (list): a list of Statevector subsystem positions to apply
371
+ the operator on.
372
+
373
+ Returns:
374
+ Statevector: the output quantum state.
375
+
376
+ Raises:
377
+ QiskitError: if the operator dimension does not match the
378
+ specified Statevector subsystem dimensions.
379
+ """
380
+ if qargs is None:
381
+ qargs = getattr(other, "qargs", None)
382
+
383
+ # Get return vector
384
+ ret = copy.copy(self)
385
+
386
+ # Evolution by a circuit or instruction
387
+ if isinstance(other, QuantumCircuit):
388
+ other = other.to_instruction()
389
+ if isinstance(other, Instruction):
390
+ if self.num_qubits is None:
391
+ raise QiskitError("Cannot apply QuantumCircuit to non-qubit Statevector.")
392
+ return self._evolve_instruction(ret, other, qargs=qargs)
393
+
394
+ # Evolution by an Operator
395
+ if not isinstance(other, Operator):
396
+ dims = self.dims(qargs=qargs)
397
+ other = Operator(other, input_dims=dims, output_dims=dims)
398
+
399
+ # check dimension
400
+ if self.dims(qargs) != other.input_dims():
401
+ raise QiskitError(
402
+ "Operator input dimensions are not equal to statevector subsystem dimensions."
403
+ )
404
+ return Statevector._evolve_operator(ret, other, qargs=qargs)
405
+
406
+ def equiv(
407
+ self, other: Statevector, rtol: float | None = None, atol: float | None = None
408
+ ) -> bool:
409
+ """Return True if other is equivalent as a statevector up to global phase.
410
+
411
+ .. note::
412
+
413
+ If other is not a Statevector, but can be used to initialize a statevector object,
414
+ this will check that Statevector(other) is equivalent to the current statevector up
415
+ to global phase.
416
+
417
+ Args:
418
+ other (Statevector): an object from which a ``Statevector`` can be constructed.
419
+ rtol (float): relative tolerance value for comparison.
420
+ atol (float): absolute tolerance value for comparison.
421
+
422
+ Returns:
423
+ bool: True if statevectors are equivalent up to global phase.
424
+ """
425
+ if not isinstance(other, Statevector):
426
+ try:
427
+ other = Statevector(other)
428
+ except QiskitError:
429
+ return False
430
+ if self.dim != other.dim:
431
+ return False
432
+ if atol is None:
433
+ atol = self.atol
434
+ if rtol is None:
435
+ rtol = self.rtol
436
+ return matrix_equal(self.data, other.data, ignore_phase=True, rtol=rtol, atol=atol)
437
+
438
+ def reverse_qargs(self) -> Statevector:
439
+ r"""Return a Statevector with reversed subsystem ordering.
440
+
441
+ For a tensor product state this is equivalent to reversing the order
442
+ of tensor product subsystems. For a statevector
443
+ :math:`|\psi \rangle = |\psi_{n-1} \rangle \otimes ... \otimes |\psi_0 \rangle`
444
+ the returned statevector will be
445
+ :math:`|\psi_{0} \rangle \otimes ... \otimes |\psi_{n-1} \rangle`.
446
+
447
+ Returns:
448
+ Statevector: the Statevector with reversed subsystem order.
449
+ """
450
+ ret = copy.copy(self)
451
+ axes = tuple(range(self._op_shape._num_qargs_l - 1, -1, -1))
452
+ ret._data = np.reshape(
453
+ np.transpose(np.reshape(self.data, self._op_shape.tensor_shape), axes),
454
+ self._op_shape.shape,
455
+ )
456
+ ret._op_shape = self._op_shape.reverse()
457
+ return ret
458
+
459
+ def _expectation_value_pauli(self, pauli, qargs=None):
460
+ """Compute the expectation value of a Pauli.
461
+
462
+ Args:
463
+ pauli (Pauli): a Pauli operator to evaluate expval of.
464
+ qargs (None or list): subsystems to apply operator on.
465
+
466
+ Returns:
467
+ complex: the expectation value.
468
+ """
469
+ n_pauli = len(pauli)
470
+ if qargs is None:
471
+ qubits = np.arange(n_pauli)
472
+ else:
473
+ qubits = np.array(qargs)
474
+
475
+ x_mask = np.dot(1 << qubits, pauli.x)
476
+ z_mask = np.dot(1 << qubits, pauli.z)
477
+ pauli_phase = (-1j) ** pauli.phase if pauli.phase else 1
478
+
479
+ if x_mask + z_mask == 0:
480
+ return pauli_phase * np.linalg.norm(self.data)
481
+
482
+ if x_mask == 0:
483
+ return pauli_phase * expval_pauli_no_x(self.data, self.num_qubits, z_mask)
484
+
485
+ x_max = qubits[pauli.x][-1]
486
+ y_phase = (-1j) ** pauli._count_y()
487
+ y_phase = y_phase[0]
488
+
489
+ return pauli_phase * expval_pauli_with_x(
490
+ self.data, self.num_qubits, z_mask, x_mask, y_phase, x_max
491
+ )
492
+
493
+ def expectation_value(
494
+ self, oper: BaseOperator | QuantumCircuit | Instruction, qargs: None | list[int] = None
495
+ ) -> complex:
496
+ """Compute the expectation value of an operator.
497
+
498
+ Args:
499
+ oper (Operator): an operator to evaluate expval of.
500
+ qargs (None or list): subsystems to apply operator on.
501
+
502
+ Returns:
503
+ complex: the expectation value.
504
+ """
505
+ if isinstance(oper, Pauli):
506
+ return self._expectation_value_pauli(oper, qargs)
507
+
508
+ if isinstance(oper, SparsePauliOp):
509
+ return sum(
510
+ coeff * self._expectation_value_pauli(Pauli((z, x)), qargs)
511
+ for z, x, coeff in zip(oper.paulis.z, oper.paulis.x, oper.coeffs)
512
+ )
513
+
514
+ val = self.evolve(oper, qargs=qargs)
515
+ conj = self.conjugate()
516
+ return np.dot(conj.data, val.data)
517
+
518
+ def probabilities(
519
+ self, qargs: None | list[int] = None, decimals: None | int = None
520
+ ) -> np.ndarray:
521
+ """Return the subsystem measurement probability vector.
522
+
523
+ Measurement probabilities are with respect to measurement in the
524
+ computation (diagonal) basis.
525
+
526
+ Args:
527
+ qargs (None or list): subsystems to return probabilities for,
528
+ if None return for all subsystems (Default: None).
529
+ decimals (None or int): the number of decimal places to round
530
+ values. If None no rounding is done (Default: None).
531
+
532
+ Returns:
533
+ np.array: The Numpy vector array of probabilities.
534
+
535
+ Examples:
536
+
537
+ Consider a 2-qubit product state
538
+ :math:`|\\psi\\rangle=|+\\rangle\\otimes|0\\rangle`.
539
+
540
+ .. code-block::
541
+
542
+ from qiskit.quantum_info import Statevector
543
+
544
+ psi = Statevector.from_label('+0')
545
+
546
+ # Probabilities for measuring both qubits
547
+ probs = psi.probabilities()
548
+ print('probs: {}'.format(probs))
549
+
550
+ # Probabilities for measuring only qubit-0
551
+ probs_qubit_0 = psi.probabilities([0])
552
+ print('Qubit-0 probs: {}'.format(probs_qubit_0))
553
+
554
+ # Probabilities for measuring only qubit-1
555
+ probs_qubit_1 = psi.probabilities([1])
556
+ print('Qubit-1 probs: {}'.format(probs_qubit_1))
557
+
558
+ .. parsed-literal::
559
+
560
+ probs: [0.5 0. 0.5 0. ]
561
+ Qubit-0 probs: [1. 0.]
562
+ Qubit-1 probs: [0.5 0.5]
563
+
564
+ We can also permute the order of qubits in the ``qargs`` list
565
+ to change the qubit position in the probabilities output
566
+
567
+ .. code-block::
568
+
569
+ from qiskit.quantum_info import Statevector
570
+
571
+ psi = Statevector.from_label('+0')
572
+
573
+ # Probabilities for measuring both qubits
574
+ probs = psi.probabilities([0, 1])
575
+ print('probs: {}'.format(probs))
576
+
577
+ # Probabilities for measuring both qubits
578
+ # but swapping qubits 0 and 1 in output
579
+ probs_swapped = psi.probabilities([1, 0])
580
+ print('Swapped probs: {}'.format(probs_swapped))
581
+
582
+ .. parsed-literal::
583
+
584
+ probs: [0.5 0. 0.5 0. ]
585
+ Swapped probs: [0.5 0.5 0. 0. ]
586
+
587
+ """
588
+ probs = self._subsystem_probabilities(
589
+ np.abs(self.data) ** 2, self._op_shape.dims_l(), qargs=qargs
590
+ )
591
+
592
+ # to account for roundoff errors, we clip
593
+ probs = np.clip(probs, a_min=0, a_max=1)
594
+
595
+ if decimals is not None:
596
+ probs = probs.round(decimals=decimals)
597
+
598
+ return probs
599
+
600
+ def reset(self, qargs: list[int] | None = None) -> Statevector:
601
+ """Reset state or subsystems to the 0-state.
602
+
603
+ Args:
604
+ qargs (list or None): subsystems to reset, if None all
605
+ subsystems will be reset to their 0-state
606
+ (Default: None).
607
+
608
+ Returns:
609
+ Statevector: the reset state.
610
+
611
+ Additional Information:
612
+ If all subsystems are reset this will return the ground state
613
+ on all subsystems. If only a some subsystems are reset this
614
+ function will perform a measurement on those subsystems and
615
+ evolve the subsystems so that the collapsed post-measurement
616
+ states are rotated to the 0-state. The RNG seed for this
617
+ sampling can be set using the :meth:`seed` method.
618
+ """
619
+ if qargs is None:
620
+ # Resetting all qubits does not require sampling or RNG
621
+ ret = copy.copy(self)
622
+ state = np.zeros(self._op_shape.shape, dtype=complex)
623
+ state[0] = 1
624
+ ret._data = state
625
+ return ret
626
+
627
+ # Sample a single measurement outcome
628
+ dims = self.dims(qargs)
629
+ probs = self.probabilities(qargs)
630
+ sample = self._rng.choice(len(probs), p=probs, size=1)
631
+
632
+ # Convert to projector for state update
633
+ proj = np.zeros(len(probs), dtype=complex)
634
+ proj[sample] = 1 / np.sqrt(probs[sample])
635
+
636
+ # Rotate outcome to 0
637
+ reset = np.eye(len(probs))
638
+ reset[0, 0] = 0
639
+ reset[sample, sample] = 0
640
+ reset[0, sample] = 1
641
+
642
+ # compose with reset projection
643
+ reset = np.dot(reset, np.diag(proj))
644
+ return self.evolve(Operator(reset, input_dims=dims, output_dims=dims), qargs=qargs)
645
+
646
+ @classmethod
647
+ def from_label(cls, label: str) -> Statevector:
648
+ """Return a tensor product of Pauli X,Y,Z eigenstates.
649
+
650
+ .. list-table:: Single-qubit state labels
651
+ :header-rows: 1
652
+
653
+ * - Label
654
+ - Statevector
655
+ * - ``"0"``
656
+ - :math:`[1, 0]`
657
+ * - ``"1"``
658
+ - :math:`[0, 1]`
659
+ * - ``"+"``
660
+ - :math:`[1 / \\sqrt{2}, 1 / \\sqrt{2}]`
661
+ * - ``"-"``
662
+ - :math:`[1 / \\sqrt{2}, -1 / \\sqrt{2}]`
663
+ * - ``"r"``
664
+ - :math:`[1 / \\sqrt{2}, i / \\sqrt{2}]`
665
+ * - ``"l"``
666
+ - :math:`[1 / \\sqrt{2}, -i / \\sqrt{2}]`
667
+
668
+ Args:
669
+ label (string): a eigenstate string ket label (see table for
670
+ allowed values).
671
+
672
+ Returns:
673
+ Statevector: The N-qubit basis state density matrix.
674
+
675
+ Raises:
676
+ QiskitError: if the label contains invalid characters, or the
677
+ length of the label is larger than an explicitly
678
+ specified num_qubits.
679
+ """
680
+ # Check label is valid
681
+ if re.match(r"^[01rl\-+]+$", label) is None:
682
+ raise QiskitError("Label contains invalid characters.")
683
+ # We can prepare Z-eigenstates by converting the computational
684
+ # basis bit-string to an integer and preparing that unit vector
685
+ # However, for X-basis states, we will prepare a Z-eigenstate first
686
+ # then apply Hadamard gates to rotate 0 and 1s to + and -.
687
+ z_label = label
688
+ xy_states = False
689
+ if re.match("^[01]+$", label) is None:
690
+ # We have X or Y eigenstates so replace +,r with 0 and
691
+ # -,l with 1 and prepare the corresponding Z state
692
+ xy_states = True
693
+ z_label = z_label.replace("+", "0")
694
+ z_label = z_label.replace("r", "0")
695
+ z_label = z_label.replace("-", "1")
696
+ z_label = z_label.replace("l", "1")
697
+ # Initialize Z eigenstate vector
698
+ num_qubits = len(label)
699
+ data = np.zeros(1 << num_qubits, dtype=complex)
700
+ pos = int(z_label, 2)
701
+ data[pos] = 1
702
+ state = Statevector(data)
703
+ if xy_states:
704
+ # Apply hadamards to all qubits in X eigenstates
705
+ x_mat = np.array([[1, 1], [1, -1]], dtype=complex) / np.sqrt(2)
706
+ # Apply S.H to qubits in Y eigenstates
707
+ y_mat = np.dot(np.diag([1, 1j]), x_mat)
708
+ for qubit, char in enumerate(reversed(label)):
709
+ if char in ["+", "-"]:
710
+ state = state.evolve(x_mat, qargs=[qubit])
711
+ elif char in ["r", "l"]:
712
+ state = state.evolve(y_mat, qargs=[qubit])
713
+ return state
714
+
715
+ @staticmethod
716
+ def from_int(i: int, dims: int | tuple | list) -> Statevector:
717
+ """Return a computational basis statevector.
718
+
719
+ Args:
720
+ i (int): the basis state element.
721
+ dims (int or tuple or list): The subsystem dimensions of the statevector
722
+ (See additional information).
723
+
724
+ Returns:
725
+ Statevector: The computational basis state :math:`|i\\rangle`.
726
+
727
+ Additional Information:
728
+ The ``dims`` kwarg can be an integer or an iterable of integers.
729
+
730
+ * ``Iterable`` -- the subsystem dimensions are the values in the list
731
+ with the total number of subsystems given by the length of the list.
732
+
733
+ * ``Int`` -- the integer specifies the total dimension of the
734
+ state. If it is a power of two the state will be initialized
735
+ as an N-qubit state. If it is not a power of two the state
736
+ will have a single d-dimensional subsystem.
737
+ """
738
+ size = np.prod(dims)
739
+ state = np.zeros(size, dtype=complex)
740
+ state[i] = 1.0
741
+ return Statevector(state, dims=dims)
742
+
743
+ @classmethod
744
+ def from_instruction(cls, instruction: Instruction | QuantumCircuit) -> Statevector:
745
+ """Return the output statevector of an instruction.
746
+
747
+ The statevector is initialized in the state :math:`|{0,\\ldots,0}\\rangle` of the
748
+ same number of qubits as the input instruction or circuit, evolved
749
+ by the input instruction, and the output statevector returned.
750
+
751
+ Args:
752
+ instruction (qiskit.circuit.Instruction or QuantumCircuit): instruction or circuit
753
+
754
+ Returns:
755
+ Statevector: The final statevector.
756
+
757
+ Raises:
758
+ QiskitError: if the instruction contains invalid instructions for
759
+ the statevector simulation.
760
+ """
761
+ # Convert circuit to an instruction
762
+ if isinstance(instruction, QuantumCircuit):
763
+ instruction = instruction.to_instruction()
764
+ # Initialize an the statevector in the all |0> state
765
+ init = np.zeros(2**instruction.num_qubits, dtype=complex)
766
+ init[0] = 1.0
767
+ vec = Statevector(init, dims=instruction.num_qubits * (2,))
768
+ return Statevector._evolve_instruction(vec, instruction)
769
+
770
+ def to_dict(self, decimals: None | int = None) -> dict:
771
+ r"""Convert the statevector to dictionary form.
772
+
773
+ This dictionary representation uses a Ket-like notation where the
774
+ dictionary keys are qudit strings for the subsystem basis vectors.
775
+ If any subsystem has a dimension greater than 10 comma delimiters are
776
+ inserted between integers so that subsystems can be distinguished.
777
+
778
+ Args:
779
+ decimals (None or int): the number of decimal places to round
780
+ values. If None no rounding is done
781
+ (Default: None).
782
+
783
+ Returns:
784
+ dict: the dictionary form of the Statevector.
785
+
786
+ Example:
787
+
788
+ The ket-form of a 2-qubit statevector
789
+ :math:`|\psi\rangle = |-\rangle\otimes |0\rangle`
790
+
791
+ .. code-block::
792
+
793
+ from qiskit.quantum_info import Statevector
794
+
795
+ psi = Statevector.from_label('-0')
796
+ print(psi.to_dict())
797
+
798
+ .. parsed-literal::
799
+
800
+ {'00': (0.7071067811865475+0j), '10': (-0.7071067811865475+0j)}
801
+
802
+ For non-qubit subsystems the integer range can go from 0 to 9. For
803
+ example in a qutrit system
804
+
805
+ .. code-block::
806
+
807
+ import numpy as np
808
+ from qiskit.quantum_info import Statevector
809
+
810
+ vec = np.zeros(9)
811
+ vec[0] = 1 / np.sqrt(2)
812
+ vec[-1] = 1 / np.sqrt(2)
813
+ psi = Statevector(vec, dims=(3, 3))
814
+ print(psi.to_dict())
815
+
816
+ .. parsed-literal::
817
+
818
+ {'00': (0.7071067811865475+0j), '22': (0.7071067811865475+0j)}
819
+
820
+ For large subsystem dimensions delimiters are required. The
821
+ following example is for a 20-dimensional system consisting of
822
+ a qubit and 10-dimensional qudit.
823
+
824
+ .. code-block::
825
+
826
+ import numpy as np
827
+ from qiskit.quantum_info import Statevector
828
+
829
+ vec = np.zeros(2 * 10)
830
+ vec[0] = 1 / np.sqrt(2)
831
+ vec[-1] = 1 / np.sqrt(2)
832
+ psi = Statevector(vec, dims=(2, 10))
833
+ print(psi.to_dict())
834
+
835
+ .. parsed-literal::
836
+
837
+ {'00': (0.7071067811865475+0j), '91': (0.7071067811865475+0j)}
838
+
839
+ """
840
+ return self._vector_to_dict(
841
+ self.data, self._op_shape.dims_l(), decimals=decimals, string_labels=True
842
+ )
843
+
844
+ @staticmethod
845
+ def _evolve_operator(statevec, oper, qargs=None):
846
+ """Evolve a qudit statevector"""
847
+ new_shape = statevec._op_shape.compose(oper._op_shape, qargs=qargs)
848
+ if qargs is None:
849
+ # Full system evolution
850
+ statevec._data = np.dot(oper._data, statevec._data)
851
+ statevec._op_shape = new_shape
852
+ return statevec
853
+
854
+ # Get transpose axes
855
+ num_qargs = statevec._op_shape.num_qargs[0]
856
+ indices = [num_qargs - 1 - i for i in reversed(qargs)]
857
+ axes = indices + [i for i in range(num_qargs) if i not in indices]
858
+ axes_inv = np.argsort(axes).tolist()
859
+
860
+ # Calculate contraction dimensions
861
+ contract_dim = oper._op_shape.shape[1]
862
+ contract_shape = (contract_dim, statevec._op_shape.shape[0] // contract_dim)
863
+
864
+ # Reshape and transpose input array for contraction
865
+ tensor = np.transpose(
866
+ np.reshape(statevec.data, statevec._op_shape.tensor_shape),
867
+ axes,
868
+ )
869
+ tensor_shape = tensor.shape
870
+
871
+ # Perform contraction
872
+ tensor = np.reshape(
873
+ np.dot(oper.data, np.reshape(tensor, contract_shape)),
874
+ tensor_shape,
875
+ )
876
+
877
+ # Transpose back to original subsystem spec and flatten
878
+ statevec._data = np.reshape(np.transpose(tensor, axes_inv), new_shape.shape[0])
879
+
880
+ # Update dimension
881
+ statevec._op_shape = new_shape
882
+ return statevec
883
+
884
+ @staticmethod
885
+ def _evolve_instruction(statevec, obj, qargs=None):
886
+ """Update the current Statevector by applying an instruction."""
887
+ from qiskit.circuit.reset import Reset
888
+ from qiskit.circuit.barrier import Barrier
889
+
890
+ # pylint complains about a cyclic import since the following Initialize file
891
+ # imports the StatePreparation, which again requires the Statevector (this file),
892
+ # but as this is a local import, it's not actually an issue and can be ignored
893
+ # pylint: disable=cyclic-import
894
+ from qiskit.circuit.library.data_preparation.initializer import Initialize
895
+
896
+ mat = Operator._instruction_to_matrix(obj)
897
+ if mat is not None:
898
+ # Perform the composition and inplace update the current state
899
+ # of the operator
900
+ return Statevector._evolve_operator(statevec, Operator(mat), qargs=qargs)
901
+
902
+ # Special instruction types
903
+ if isinstance(obj, Reset):
904
+ statevec._data = statevec.reset(qargs)._data
905
+ return statevec
906
+ if isinstance(obj, Barrier):
907
+ return statevec
908
+ if isinstance(obj, Initialize):
909
+ # state is initialized to labels in the initialize object
910
+ if all(isinstance(param, str) for param in obj.params):
911
+ initialization = Statevector.from_label("".join(obj.params))._data
912
+ # state is initialized to an integer
913
+ # here we're only checking the length as (1) a length-1 object necessarily means the
914
+ # state is described by an integer (as labels were already covered) and (2) the int
915
+ # was cast to a complex and we cannot do an int typecheck anyways
916
+ elif len(obj.params) == 1:
917
+ state = int(np.real(obj.params[0]))
918
+ initialization = Statevector.from_int(state, (2,) * obj.num_qubits)._data
919
+ # state is initialized to the statevector
920
+ else:
921
+ initialization = np.asarray(obj.params, dtype=complex)
922
+
923
+ if qargs is None:
924
+ statevec._data = initialization
925
+ else:
926
+ # if we act on a subsystem we first need to reset and then apply the
927
+ # state preparation
928
+ statevec._data = statevec.reset(qargs)._data
929
+ mat = np.zeros((2 ** len(qargs), 2 ** len(qargs)), dtype=complex)
930
+ mat[:, 0] = initialization
931
+ statevec = Statevector._evolve_operator(statevec, Operator(mat), qargs=qargs)
932
+
933
+ return statevec
934
+
935
+ # If the instruction doesn't have a matrix defined we use its
936
+ # circuit decomposition definition if it exists, otherwise we
937
+ # cannot compose this gate and raise an error.
938
+ if obj.definition is None:
939
+ raise QiskitError(f"Cannot apply Instruction: {obj.name}")
940
+ if not isinstance(obj.definition, QuantumCircuit):
941
+ raise QiskitError(
942
+ "{} instruction definition is {}; expected QuantumCircuit".format(
943
+ obj.name, type(obj.definition)
944
+ )
945
+ )
946
+
947
+ if obj.definition.global_phase:
948
+ statevec._data *= np.exp(1j * float(obj.definition.global_phase))
949
+ qubits = {qubit: i for i, qubit in enumerate(obj.definition.qubits)}
950
+ for instruction in obj.definition:
951
+ if instruction.clbits:
952
+ raise QiskitError(
953
+ f"Cannot apply instruction with classical bits: {instruction.operation.name}"
954
+ )
955
+ # Get the integer position of the flat register
956
+ if qargs is None:
957
+ new_qargs = [qubits[tup] for tup in instruction.qubits]
958
+ else:
959
+ new_qargs = [qargs[qubits[tup]] for tup in instruction.qubits]
960
+ Statevector._evolve_instruction(statevec, instruction.operation, qargs=new_qargs)
961
+ return statevec