qiskit 1.3.0__cp39-abi3-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (836) hide show
  1. qiskit/VERSION.txt +1 -0
  2. qiskit/__init__.py +146 -0
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/_numpy_compat.py +73 -0
  5. qiskit/assembler/__init__.py +42 -0
  6. qiskit/assembler/assemble_circuits.py +451 -0
  7. qiskit/assembler/assemble_schedules.py +367 -0
  8. qiskit/assembler/disassemble.py +310 -0
  9. qiskit/assembler/run_config.py +77 -0
  10. qiskit/circuit/__init__.py +1313 -0
  11. qiskit/circuit/_classical_resource_map.py +148 -0
  12. qiskit/circuit/_standard_gates_commutations.py +3849 -0
  13. qiskit/circuit/_utils.py +167 -0
  14. qiskit/circuit/add_control.py +274 -0
  15. qiskit/circuit/annotated_operation.py +279 -0
  16. qiskit/circuit/barrier.py +50 -0
  17. qiskit/circuit/bit.py +94 -0
  18. qiskit/circuit/classical/__init__.py +41 -0
  19. qiskit/circuit/classical/expr/__init__.py +238 -0
  20. qiskit/circuit/classical/expr/constructors.py +556 -0
  21. qiskit/circuit/classical/expr/expr.py +397 -0
  22. qiskit/circuit/classical/expr/visitors.py +300 -0
  23. qiskit/circuit/classical/types/__init__.py +109 -0
  24. qiskit/circuit/classical/types/ordering.py +222 -0
  25. qiskit/circuit/classical/types/types.py +117 -0
  26. qiskit/circuit/classicalfunction/__init__.py +140 -0
  27. qiskit/circuit/classicalfunction/boolean_expression.py +129 -0
  28. qiskit/circuit/classicalfunction/classical_element.py +54 -0
  29. qiskit/circuit/classicalfunction/classical_function_visitor.py +155 -0
  30. qiskit/circuit/classicalfunction/classicalfunction.py +173 -0
  31. qiskit/circuit/classicalfunction/exceptions.py +35 -0
  32. qiskit/circuit/classicalfunction/types.py +18 -0
  33. qiskit/circuit/classicalfunction/utils.py +91 -0
  34. qiskit/circuit/classicalregister.py +57 -0
  35. qiskit/circuit/commutation_checker.py +106 -0
  36. qiskit/circuit/commutation_library.py +20 -0
  37. qiskit/circuit/controlflow/__init__.py +28 -0
  38. qiskit/circuit/controlflow/_builder_utils.py +207 -0
  39. qiskit/circuit/controlflow/break_loop.py +56 -0
  40. qiskit/circuit/controlflow/builder.py +691 -0
  41. qiskit/circuit/controlflow/continue_loop.py +58 -0
  42. qiskit/circuit/controlflow/control_flow.py +84 -0
  43. qiskit/circuit/controlflow/for_loop.py +217 -0
  44. qiskit/circuit/controlflow/if_else.py +511 -0
  45. qiskit/circuit/controlflow/switch_case.py +417 -0
  46. qiskit/circuit/controlflow/while_loop.py +171 -0
  47. qiskit/circuit/controlledgate.py +274 -0
  48. qiskit/circuit/delay.py +123 -0
  49. qiskit/circuit/duration.py +95 -0
  50. qiskit/circuit/equivalence.py +94 -0
  51. qiskit/circuit/equivalence_library.py +18 -0
  52. qiskit/circuit/exceptions.py +19 -0
  53. qiskit/circuit/gate.py +263 -0
  54. qiskit/circuit/instruction.py +697 -0
  55. qiskit/circuit/instructionset.py +179 -0
  56. qiskit/circuit/library/__init__.py +668 -0
  57. qiskit/circuit/library/arithmetic/__init__.py +34 -0
  58. qiskit/circuit/library/arithmetic/adders/__init__.py +18 -0
  59. qiskit/circuit/library/arithmetic/adders/adder.py +210 -0
  60. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +123 -0
  61. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +129 -0
  62. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +95 -0
  63. qiskit/circuit/library/arithmetic/exact_reciprocal.py +88 -0
  64. qiskit/circuit/library/arithmetic/functional_pauli_rotations.py +114 -0
  65. qiskit/circuit/library/arithmetic/integer_comparator.py +243 -0
  66. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +196 -0
  67. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +189 -0
  68. qiskit/circuit/library/arithmetic/multipliers/__init__.py +17 -0
  69. qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +145 -0
  70. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +192 -0
  71. qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +108 -0
  72. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +353 -0
  73. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +277 -0
  74. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +317 -0
  75. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +335 -0
  76. qiskit/circuit/library/arithmetic/quadratic_form.py +198 -0
  77. qiskit/circuit/library/arithmetic/weighted_adder.py +337 -0
  78. qiskit/circuit/library/basis_change/__init__.py +15 -0
  79. qiskit/circuit/library/basis_change/qft.py +313 -0
  80. qiskit/circuit/library/blueprintcircuit.py +280 -0
  81. qiskit/circuit/library/boolean_logic/__init__.py +18 -0
  82. qiskit/circuit/library/boolean_logic/inner_product.py +155 -0
  83. qiskit/circuit/library/boolean_logic/quantum_and.py +200 -0
  84. qiskit/circuit/library/boolean_logic/quantum_or.py +202 -0
  85. qiskit/circuit/library/boolean_logic/quantum_xor.py +165 -0
  86. qiskit/circuit/library/data_preparation/__init__.py +57 -0
  87. qiskit/circuit/library/data_preparation/_z_feature_map.py +115 -0
  88. qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
  89. qiskit/circuit/library/data_preparation/initializer.py +107 -0
  90. qiskit/circuit/library/data_preparation/pauli_feature_map.py +656 -0
  91. qiskit/circuit/library/data_preparation/state_preparation.py +336 -0
  92. qiskit/circuit/library/fourier_checking.py +158 -0
  93. qiskit/circuit/library/generalized_gates/__init__.py +30 -0
  94. qiskit/circuit/library/generalized_gates/diagonal.py +159 -0
  95. qiskit/circuit/library/generalized_gates/gms.py +174 -0
  96. qiskit/circuit/library/generalized_gates/gr.py +215 -0
  97. qiskit/circuit/library/generalized_gates/isometry.py +370 -0
  98. qiskit/circuit/library/generalized_gates/linear_function.py +318 -0
  99. qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +143 -0
  100. qiskit/circuit/library/generalized_gates/mcmt.py +316 -0
  101. qiskit/circuit/library/generalized_gates/pauli.py +85 -0
  102. qiskit/circuit/library/generalized_gates/permutation.py +194 -0
  103. qiskit/circuit/library/generalized_gates/rv.py +96 -0
  104. qiskit/circuit/library/generalized_gates/uc.py +213 -0
  105. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +164 -0
  106. qiskit/circuit/library/generalized_gates/ucrx.py +32 -0
  107. qiskit/circuit/library/generalized_gates/ucry.py +32 -0
  108. qiskit/circuit/library/generalized_gates/ucrz.py +32 -0
  109. qiskit/circuit/library/generalized_gates/unitary.py +215 -0
  110. qiskit/circuit/library/graph_state.py +169 -0
  111. qiskit/circuit/library/grover_operator.py +579 -0
  112. qiskit/circuit/library/hamiltonian_gate.py +142 -0
  113. qiskit/circuit/library/hidden_linear_function.py +161 -0
  114. qiskit/circuit/library/iqp.py +175 -0
  115. qiskit/circuit/library/n_local/__init__.py +45 -0
  116. qiskit/circuit/library/n_local/efficient_su2.py +277 -0
  117. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +515 -0
  118. qiskit/circuit/library/n_local/excitation_preserving.py +297 -0
  119. qiskit/circuit/library/n_local/n_local.py +1472 -0
  120. qiskit/circuit/library/n_local/pauli_two_design.py +243 -0
  121. qiskit/circuit/library/n_local/qaoa_ansatz.py +366 -0
  122. qiskit/circuit/library/n_local/real_amplitudes.py +306 -0
  123. qiskit/circuit/library/n_local/two_local.py +289 -0
  124. qiskit/circuit/library/overlap.py +182 -0
  125. qiskit/circuit/library/pauli_evolution.py +186 -0
  126. qiskit/circuit/library/phase_estimation.py +175 -0
  127. qiskit/circuit/library/phase_oracle.py +153 -0
  128. qiskit/circuit/library/quantum_volume.py +167 -0
  129. qiskit/circuit/library/standard_gates/__init__.py +142 -0
  130. qiskit/circuit/library/standard_gates/dcx.py +78 -0
  131. qiskit/circuit/library/standard_gates/ecr.py +130 -0
  132. qiskit/circuit/library/standard_gates/equivalence_library.py +1800 -0
  133. qiskit/circuit/library/standard_gates/global_phase.py +85 -0
  134. qiskit/circuit/library/standard_gates/h.py +258 -0
  135. qiskit/circuit/library/standard_gates/i.py +76 -0
  136. qiskit/circuit/library/standard_gates/iswap.py +134 -0
  137. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +405 -0
  138. qiskit/circuit/library/standard_gates/p.py +441 -0
  139. qiskit/circuit/library/standard_gates/r.py +117 -0
  140. qiskit/circuit/library/standard_gates/rx.py +303 -0
  141. qiskit/circuit/library/standard_gates/rxx.py +183 -0
  142. qiskit/circuit/library/standard_gates/ry.py +298 -0
  143. qiskit/circuit/library/standard_gates/ryy.py +183 -0
  144. qiskit/circuit/library/standard_gates/rz.py +319 -0
  145. qiskit/circuit/library/standard_gates/rzx.py +229 -0
  146. qiskit/circuit/library/standard_gates/rzz.py +196 -0
  147. qiskit/circuit/library/standard_gates/s.py +428 -0
  148. qiskit/circuit/library/standard_gates/swap.py +288 -0
  149. qiskit/circuit/library/standard_gates/sx.py +315 -0
  150. qiskit/circuit/library/standard_gates/t.py +179 -0
  151. qiskit/circuit/library/standard_gates/u.py +403 -0
  152. qiskit/circuit/library/standard_gates/u1.py +501 -0
  153. qiskit/circuit/library/standard_gates/u2.py +149 -0
  154. qiskit/circuit/library/standard_gates/u3.py +436 -0
  155. qiskit/circuit/library/standard_gates/x.py +1529 -0
  156. qiskit/circuit/library/standard_gates/xx_minus_yy.py +235 -0
  157. qiskit/circuit/library/standard_gates/xx_plus_yy.py +239 -0
  158. qiskit/circuit/library/standard_gates/y.py +262 -0
  159. qiskit/circuit/library/standard_gates/z.py +348 -0
  160. qiskit/circuit/library/templates/__init__.py +92 -0
  161. qiskit/circuit/library/templates/clifford/__init__.py +33 -0
  162. qiskit/circuit/library/templates/clifford/clifford_2_1.py +34 -0
  163. qiskit/circuit/library/templates/clifford/clifford_2_2.py +35 -0
  164. qiskit/circuit/library/templates/clifford/clifford_2_3.py +34 -0
  165. qiskit/circuit/library/templates/clifford/clifford_2_4.py +34 -0
  166. qiskit/circuit/library/templates/clifford/clifford_3_1.py +35 -0
  167. qiskit/circuit/library/templates/clifford/clifford_4_1.py +38 -0
  168. qiskit/circuit/library/templates/clifford/clifford_4_2.py +37 -0
  169. qiskit/circuit/library/templates/clifford/clifford_4_3.py +38 -0
  170. qiskit/circuit/library/templates/clifford/clifford_4_4.py +37 -0
  171. qiskit/circuit/library/templates/clifford/clifford_5_1.py +40 -0
  172. qiskit/circuit/library/templates/clifford/clifford_6_1.py +40 -0
  173. qiskit/circuit/library/templates/clifford/clifford_6_2.py +40 -0
  174. qiskit/circuit/library/templates/clifford/clifford_6_3.py +40 -0
  175. qiskit/circuit/library/templates/clifford/clifford_6_4.py +38 -0
  176. qiskit/circuit/library/templates/clifford/clifford_6_5.py +40 -0
  177. qiskit/circuit/library/templates/clifford/clifford_8_1.py +42 -0
  178. qiskit/circuit/library/templates/clifford/clifford_8_2.py +42 -0
  179. qiskit/circuit/library/templates/clifford/clifford_8_3.py +41 -0
  180. qiskit/circuit/library/templates/nct/__init__.py +67 -0
  181. qiskit/circuit/library/templates/nct/template_nct_2a_1.py +34 -0
  182. qiskit/circuit/library/templates/nct/template_nct_2a_2.py +35 -0
  183. qiskit/circuit/library/templates/nct/template_nct_2a_3.py +37 -0
  184. qiskit/circuit/library/templates/nct/template_nct_4a_1.py +43 -0
  185. qiskit/circuit/library/templates/nct/template_nct_4a_2.py +41 -0
  186. qiskit/circuit/library/templates/nct/template_nct_4a_3.py +39 -0
  187. qiskit/circuit/library/templates/nct/template_nct_4b_1.py +41 -0
  188. qiskit/circuit/library/templates/nct/template_nct_4b_2.py +39 -0
  189. qiskit/circuit/library/templates/nct/template_nct_5a_1.py +40 -0
  190. qiskit/circuit/library/templates/nct/template_nct_5a_2.py +40 -0
  191. qiskit/circuit/library/templates/nct/template_nct_5a_3.py +40 -0
  192. qiskit/circuit/library/templates/nct/template_nct_5a_4.py +39 -0
  193. qiskit/circuit/library/templates/nct/template_nct_6a_1.py +40 -0
  194. qiskit/circuit/library/templates/nct/template_nct_6a_2.py +41 -0
  195. qiskit/circuit/library/templates/nct/template_nct_6a_3.py +41 -0
  196. qiskit/circuit/library/templates/nct/template_nct_6a_4.py +41 -0
  197. qiskit/circuit/library/templates/nct/template_nct_6b_1.py +41 -0
  198. qiskit/circuit/library/templates/nct/template_nct_6b_2.py +41 -0
  199. qiskit/circuit/library/templates/nct/template_nct_6c_1.py +41 -0
  200. qiskit/circuit/library/templates/nct/template_nct_7a_1.py +43 -0
  201. qiskit/circuit/library/templates/nct/template_nct_7b_1.py +43 -0
  202. qiskit/circuit/library/templates/nct/template_nct_7c_1.py +43 -0
  203. qiskit/circuit/library/templates/nct/template_nct_7d_1.py +43 -0
  204. qiskit/circuit/library/templates/nct/template_nct_7e_1.py +43 -0
  205. qiskit/circuit/library/templates/nct/template_nct_9a_1.py +45 -0
  206. qiskit/circuit/library/templates/nct/template_nct_9c_1.py +43 -0
  207. qiskit/circuit/library/templates/nct/template_nct_9c_10.py +44 -0
  208. qiskit/circuit/library/templates/nct/template_nct_9c_11.py +44 -0
  209. qiskit/circuit/library/templates/nct/template_nct_9c_12.py +44 -0
  210. qiskit/circuit/library/templates/nct/template_nct_9c_2.py +44 -0
  211. qiskit/circuit/library/templates/nct/template_nct_9c_3.py +44 -0
  212. qiskit/circuit/library/templates/nct/template_nct_9c_4.py +44 -0
  213. qiskit/circuit/library/templates/nct/template_nct_9c_5.py +44 -0
  214. qiskit/circuit/library/templates/nct/template_nct_9c_6.py +44 -0
  215. qiskit/circuit/library/templates/nct/template_nct_9c_7.py +44 -0
  216. qiskit/circuit/library/templates/nct/template_nct_9c_8.py +44 -0
  217. qiskit/circuit/library/templates/nct/template_nct_9c_9.py +44 -0
  218. qiskit/circuit/library/templates/nct/template_nct_9d_1.py +43 -0
  219. qiskit/circuit/library/templates/nct/template_nct_9d_10.py +44 -0
  220. qiskit/circuit/library/templates/nct/template_nct_9d_2.py +44 -0
  221. qiskit/circuit/library/templates/nct/template_nct_9d_3.py +44 -0
  222. qiskit/circuit/library/templates/nct/template_nct_9d_4.py +44 -0
  223. qiskit/circuit/library/templates/nct/template_nct_9d_5.py +44 -0
  224. qiskit/circuit/library/templates/nct/template_nct_9d_6.py +44 -0
  225. qiskit/circuit/library/templates/nct/template_nct_9d_7.py +44 -0
  226. qiskit/circuit/library/templates/nct/template_nct_9d_8.py +44 -0
  227. qiskit/circuit/library/templates/nct/template_nct_9d_9.py +44 -0
  228. qiskit/circuit/library/templates/rzx/__init__.py +25 -0
  229. qiskit/circuit/library/templates/rzx/rzx_cy.py +47 -0
  230. qiskit/circuit/library/templates/rzx/rzx_xz.py +54 -0
  231. qiskit/circuit/library/templates/rzx/rzx_yz.py +45 -0
  232. qiskit/circuit/library/templates/rzx/rzx_zz1.py +69 -0
  233. qiskit/circuit/library/templates/rzx/rzx_zz2.py +59 -0
  234. qiskit/circuit/library/templates/rzx/rzx_zz3.py +59 -0
  235. qiskit/circuit/measure.py +44 -0
  236. qiskit/circuit/operation.py +67 -0
  237. qiskit/circuit/parameter.py +178 -0
  238. qiskit/circuit/parameterexpression.py +692 -0
  239. qiskit/circuit/parametertable.py +119 -0
  240. qiskit/circuit/parametervector.py +120 -0
  241. qiskit/circuit/quantumcircuit.py +6829 -0
  242. qiskit/circuit/quantumcircuitdata.py +136 -0
  243. qiskit/circuit/quantumregister.py +75 -0
  244. qiskit/circuit/random/__init__.py +15 -0
  245. qiskit/circuit/random/utils.py +358 -0
  246. qiskit/circuit/register.py +233 -0
  247. qiskit/circuit/reset.py +34 -0
  248. qiskit/circuit/singleton.py +606 -0
  249. qiskit/circuit/store.py +97 -0
  250. qiskit/circuit/tools/__init__.py +16 -0
  251. qiskit/circuit/tools/pi_check.py +190 -0
  252. qiskit/circuit/twirling.py +145 -0
  253. qiskit/compiler/__init__.py +33 -0
  254. qiskit/compiler/assembler.py +681 -0
  255. qiskit/compiler/scheduler.py +109 -0
  256. qiskit/compiler/sequencer.py +71 -0
  257. qiskit/compiler/transpiler.py +533 -0
  258. qiskit/converters/__init__.py +74 -0
  259. qiskit/converters/circuit_to_dag.py +78 -0
  260. qiskit/converters/circuit_to_dagdependency.py +51 -0
  261. qiskit/converters/circuit_to_dagdependency_v2.py +47 -0
  262. qiskit/converters/circuit_to_gate.py +107 -0
  263. qiskit/converters/circuit_to_instruction.py +155 -0
  264. qiskit/converters/dag_to_circuit.py +79 -0
  265. qiskit/converters/dag_to_dagdependency.py +55 -0
  266. qiskit/converters/dag_to_dagdependency_v2.py +44 -0
  267. qiskit/converters/dagdependency_to_circuit.py +46 -0
  268. qiskit/converters/dagdependency_to_dag.py +54 -0
  269. qiskit/dagcircuit/__init__.py +44 -0
  270. qiskit/dagcircuit/collect_blocks.py +391 -0
  271. qiskit/dagcircuit/dagcircuit.py +24 -0
  272. qiskit/dagcircuit/dagdependency.py +646 -0
  273. qiskit/dagcircuit/dagdependency_v2.py +641 -0
  274. qiskit/dagcircuit/dagdepnode.py +160 -0
  275. qiskit/dagcircuit/dagnode.py +176 -0
  276. qiskit/dagcircuit/exceptions.py +42 -0
  277. qiskit/exceptions.py +153 -0
  278. qiskit/passmanager/__init__.py +240 -0
  279. qiskit/passmanager/base_tasks.py +230 -0
  280. qiskit/passmanager/compilation_status.py +74 -0
  281. qiskit/passmanager/exceptions.py +19 -0
  282. qiskit/passmanager/flow_controllers.py +116 -0
  283. qiskit/passmanager/passmanager.py +333 -0
  284. qiskit/primitives/__init__.py +481 -0
  285. qiskit/primitives/backend_estimator.py +486 -0
  286. qiskit/primitives/backend_estimator_v2.py +434 -0
  287. qiskit/primitives/backend_sampler.py +222 -0
  288. qiskit/primitives/backend_sampler_v2.py +339 -0
  289. qiskit/primitives/base/__init__.py +20 -0
  290. qiskit/primitives/base/base_estimator.py +252 -0
  291. qiskit/primitives/base/base_primitive.py +45 -0
  292. qiskit/primitives/base/base_primitive_job.py +78 -0
  293. qiskit/primitives/base/base_result.py +65 -0
  294. qiskit/primitives/base/base_sampler.py +204 -0
  295. qiskit/primitives/base/estimator_result.py +46 -0
  296. qiskit/primitives/base/sampler_result.py +45 -0
  297. qiskit/primitives/base/validation.py +231 -0
  298. qiskit/primitives/containers/__init__.py +26 -0
  299. qiskit/primitives/containers/bindings_array.py +389 -0
  300. qiskit/primitives/containers/bit_array.py +741 -0
  301. qiskit/primitives/containers/data_bin.py +173 -0
  302. qiskit/primitives/containers/estimator_pub.py +222 -0
  303. qiskit/primitives/containers/object_array.py +94 -0
  304. qiskit/primitives/containers/observables_array.py +279 -0
  305. qiskit/primitives/containers/primitive_result.py +53 -0
  306. qiskit/primitives/containers/pub_result.py +51 -0
  307. qiskit/primitives/containers/sampler_pub.py +193 -0
  308. qiskit/primitives/containers/sampler_pub_result.py +74 -0
  309. qiskit/primitives/containers/shape.py +129 -0
  310. qiskit/primitives/estimator.py +172 -0
  311. qiskit/primitives/primitive_job.py +81 -0
  312. qiskit/primitives/sampler.py +162 -0
  313. qiskit/primitives/statevector_estimator.py +174 -0
  314. qiskit/primitives/statevector_sampler.py +292 -0
  315. qiskit/primitives/utils.py +247 -0
  316. qiskit/providers/__init__.py +803 -0
  317. qiskit/providers/backend.py +667 -0
  318. qiskit/providers/backend_compat.py +472 -0
  319. qiskit/providers/basic_provider/__init__.py +45 -0
  320. qiskit/providers/basic_provider/basic_provider.py +101 -0
  321. qiskit/providers/basic_provider/basic_provider_job.py +65 -0
  322. qiskit/providers/basic_provider/basic_provider_tools.py +218 -0
  323. qiskit/providers/basic_provider/basic_simulator.py +821 -0
  324. qiskit/providers/basic_provider/exceptions.py +30 -0
  325. qiskit/providers/exceptions.py +45 -0
  326. qiskit/providers/fake_provider/__init__.py +105 -0
  327. qiskit/providers/fake_provider/backends_v1/__init__.py +22 -0
  328. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +18 -0
  329. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +1 -0
  330. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +1 -0
  331. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +37 -0
  332. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +1 -0
  333. qiskit/providers/fake_provider/backends_v1/fake_20q/__init__.py +18 -0
  334. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +1 -0
  335. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +43 -0
  336. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +1 -0
  337. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +18 -0
  338. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +1 -0
  339. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +1 -0
  340. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +50 -0
  341. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +1 -0
  342. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +18 -0
  343. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +1 -0
  344. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +41 -0
  345. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +1 -0
  346. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +18 -0
  347. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +1 -0
  348. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +1 -0
  349. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +44 -0
  350. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +1 -0
  351. qiskit/providers/fake_provider/fake_1q.py +91 -0
  352. qiskit/providers/fake_provider/fake_backend.py +165 -0
  353. qiskit/providers/fake_provider/fake_openpulse_2q.py +391 -0
  354. qiskit/providers/fake_provider/fake_openpulse_3q.py +340 -0
  355. qiskit/providers/fake_provider/fake_pulse_backend.py +49 -0
  356. qiskit/providers/fake_provider/fake_qasm_backend.py +77 -0
  357. qiskit/providers/fake_provider/generic_backend_v2.py +1035 -0
  358. qiskit/providers/fake_provider/utils/__init__.py +15 -0
  359. qiskit/providers/fake_provider/utils/backend_converter.py +150 -0
  360. qiskit/providers/fake_provider/utils/json_decoder.py +109 -0
  361. qiskit/providers/job.py +147 -0
  362. qiskit/providers/jobstatus.py +30 -0
  363. qiskit/providers/models/__init__.py +89 -0
  364. qiskit/providers/models/backendconfiguration.py +1040 -0
  365. qiskit/providers/models/backendproperties.py +517 -0
  366. qiskit/providers/models/backendstatus.py +94 -0
  367. qiskit/providers/models/jobstatus.py +66 -0
  368. qiskit/providers/models/pulsedefaults.py +305 -0
  369. qiskit/providers/options.py +273 -0
  370. qiskit/providers/provider.py +95 -0
  371. qiskit/providers/providerutils.py +110 -0
  372. qiskit/pulse/__init__.py +158 -0
  373. qiskit/pulse/builder.py +2254 -0
  374. qiskit/pulse/calibration_entries.py +381 -0
  375. qiskit/pulse/channels.py +227 -0
  376. qiskit/pulse/configuration.py +245 -0
  377. qiskit/pulse/exceptions.py +45 -0
  378. qiskit/pulse/filters.py +309 -0
  379. qiskit/pulse/instruction_schedule_map.py +424 -0
  380. qiskit/pulse/instructions/__init__.py +67 -0
  381. qiskit/pulse/instructions/acquire.py +150 -0
  382. qiskit/pulse/instructions/delay.py +71 -0
  383. qiskit/pulse/instructions/directives.py +154 -0
  384. qiskit/pulse/instructions/frequency.py +135 -0
  385. qiskit/pulse/instructions/instruction.py +270 -0
  386. qiskit/pulse/instructions/phase.py +152 -0
  387. qiskit/pulse/instructions/play.py +99 -0
  388. qiskit/pulse/instructions/reference.py +100 -0
  389. qiskit/pulse/instructions/snapshot.py +82 -0
  390. qiskit/pulse/library/__init__.py +97 -0
  391. qiskit/pulse/library/continuous.py +430 -0
  392. qiskit/pulse/library/pulse.py +148 -0
  393. qiskit/pulse/library/samplers/__init__.py +15 -0
  394. qiskit/pulse/library/samplers/decorators.py +295 -0
  395. qiskit/pulse/library/samplers/strategies.py +71 -0
  396. qiskit/pulse/library/symbolic_pulses.py +1988 -0
  397. qiskit/pulse/library/waveform.py +136 -0
  398. qiskit/pulse/macros.py +262 -0
  399. qiskit/pulse/parameter_manager.py +445 -0
  400. qiskit/pulse/parser.py +314 -0
  401. qiskit/pulse/reference_manager.py +58 -0
  402. qiskit/pulse/schedule.py +1854 -0
  403. qiskit/pulse/transforms/__init__.py +106 -0
  404. qiskit/pulse/transforms/alignments.py +406 -0
  405. qiskit/pulse/transforms/base_transforms.py +71 -0
  406. qiskit/pulse/transforms/canonicalization.py +498 -0
  407. qiskit/pulse/transforms/dag.py +122 -0
  408. qiskit/pulse/utils.py +149 -0
  409. qiskit/qasm/libs/dummy/stdgates.inc +75 -0
  410. qiskit/qasm/libs/qelib1.inc +266 -0
  411. qiskit/qasm/libs/stdgates.inc +82 -0
  412. qiskit/qasm2/__init__.py +654 -0
  413. qiskit/qasm2/exceptions.py +27 -0
  414. qiskit/qasm2/export.py +372 -0
  415. qiskit/qasm2/parse.py +452 -0
  416. qiskit/qasm3/__init__.py +367 -0
  417. qiskit/qasm3/ast.py +738 -0
  418. qiskit/qasm3/exceptions.py +27 -0
  419. qiskit/qasm3/experimental.py +70 -0
  420. qiskit/qasm3/exporter.py +1299 -0
  421. qiskit/qasm3/printer.py +577 -0
  422. qiskit/qobj/__init__.py +75 -0
  423. qiskit/qobj/common.py +81 -0
  424. qiskit/qobj/converters/__init__.py +18 -0
  425. qiskit/qobj/converters/lo_config.py +177 -0
  426. qiskit/qobj/converters/pulse_instruction.py +897 -0
  427. qiskit/qobj/pulse_qobj.py +709 -0
  428. qiskit/qobj/qasm_qobj.py +708 -0
  429. qiskit/qobj/utils.py +46 -0
  430. qiskit/qpy/__init__.py +1822 -0
  431. qiskit/qpy/binary_io/__init__.py +36 -0
  432. qiskit/qpy/binary_io/circuits.py +1475 -0
  433. qiskit/qpy/binary_io/schedules.py +635 -0
  434. qiskit/qpy/binary_io/value.py +1025 -0
  435. qiskit/qpy/common.py +350 -0
  436. qiskit/qpy/exceptions.py +53 -0
  437. qiskit/qpy/formats.py +401 -0
  438. qiskit/qpy/interface.py +377 -0
  439. qiskit/qpy/type_keys.py +572 -0
  440. qiskit/quantum_info/__init__.py +162 -0
  441. qiskit/quantum_info/analysis/__init__.py +17 -0
  442. qiskit/quantum_info/analysis/average.py +47 -0
  443. qiskit/quantum_info/analysis/distance.py +102 -0
  444. qiskit/quantum_info/analysis/make_observable.py +44 -0
  445. qiskit/quantum_info/analysis/z2_symmetries.py +484 -0
  446. qiskit/quantum_info/operators/__init__.py +28 -0
  447. qiskit/quantum_info/operators/base_operator.py +145 -0
  448. qiskit/quantum_info/operators/channel/__init__.py +29 -0
  449. qiskit/quantum_info/operators/channel/chi.py +191 -0
  450. qiskit/quantum_info/operators/channel/choi.py +218 -0
  451. qiskit/quantum_info/operators/channel/kraus.py +337 -0
  452. qiskit/quantum_info/operators/channel/ptm.py +204 -0
  453. qiskit/quantum_info/operators/channel/quantum_channel.py +348 -0
  454. qiskit/quantum_info/operators/channel/stinespring.py +296 -0
  455. qiskit/quantum_info/operators/channel/superop.py +377 -0
  456. qiskit/quantum_info/operators/channel/transformations.py +475 -0
  457. qiskit/quantum_info/operators/custom_iterator.py +48 -0
  458. qiskit/quantum_info/operators/dihedral/__init__.py +18 -0
  459. qiskit/quantum_info/operators/dihedral/dihedral.py +509 -0
  460. qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +216 -0
  461. qiskit/quantum_info/operators/dihedral/polynomial.py +313 -0
  462. qiskit/quantum_info/operators/dihedral/random.py +64 -0
  463. qiskit/quantum_info/operators/linear_op.py +25 -0
  464. qiskit/quantum_info/operators/measures.py +418 -0
  465. qiskit/quantum_info/operators/mixins/__init__.py +52 -0
  466. qiskit/quantum_info/operators/mixins/adjoint.py +52 -0
  467. qiskit/quantum_info/operators/mixins/group.py +171 -0
  468. qiskit/quantum_info/operators/mixins/linear.py +84 -0
  469. qiskit/quantum_info/operators/mixins/multiply.py +62 -0
  470. qiskit/quantum_info/operators/mixins/tolerances.py +72 -0
  471. qiskit/quantum_info/operators/op_shape.py +525 -0
  472. qiskit/quantum_info/operators/operator.py +865 -0
  473. qiskit/quantum_info/operators/operator_utils.py +76 -0
  474. qiskit/quantum_info/operators/predicates.py +183 -0
  475. qiskit/quantum_info/operators/random.py +154 -0
  476. qiskit/quantum_info/operators/scalar_op.py +254 -0
  477. qiskit/quantum_info/operators/symplectic/__init__.py +23 -0
  478. qiskit/quantum_info/operators/symplectic/base_pauli.py +719 -0
  479. qiskit/quantum_info/operators/symplectic/clifford.py +1030 -0
  480. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +558 -0
  481. qiskit/quantum_info/operators/symplectic/pauli.py +753 -0
  482. qiskit/quantum_info/operators/symplectic/pauli_list.py +1230 -0
  483. qiskit/quantum_info/operators/symplectic/pauli_utils.py +40 -0
  484. qiskit/quantum_info/operators/symplectic/random.py +117 -0
  485. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1196 -0
  486. qiskit/quantum_info/operators/utils/__init__.py +20 -0
  487. qiskit/quantum_info/operators/utils/anti_commutator.py +36 -0
  488. qiskit/quantum_info/operators/utils/commutator.py +36 -0
  489. qiskit/quantum_info/operators/utils/double_commutator.py +76 -0
  490. qiskit/quantum_info/quaternion.py +156 -0
  491. qiskit/quantum_info/random.py +26 -0
  492. qiskit/quantum_info/states/__init__.py +28 -0
  493. qiskit/quantum_info/states/densitymatrix.py +845 -0
  494. qiskit/quantum_info/states/measures.py +288 -0
  495. qiskit/quantum_info/states/quantum_state.py +503 -0
  496. qiskit/quantum_info/states/random.py +157 -0
  497. qiskit/quantum_info/states/stabilizerstate.py +773 -0
  498. qiskit/quantum_info/states/statevector.py +958 -0
  499. qiskit/quantum_info/states/utils.py +247 -0
  500. qiskit/result/__init__.py +73 -0
  501. qiskit/result/counts.py +189 -0
  502. qiskit/result/distributions/__init__.py +17 -0
  503. qiskit/result/distributions/probability.py +100 -0
  504. qiskit/result/distributions/quasi.py +154 -0
  505. qiskit/result/exceptions.py +40 -0
  506. qiskit/result/mitigation/__init__.py +13 -0
  507. qiskit/result/mitigation/base_readout_mitigator.py +79 -0
  508. qiskit/result/mitigation/correlated_readout_mitigator.py +277 -0
  509. qiskit/result/mitigation/local_readout_mitigator.py +328 -0
  510. qiskit/result/mitigation/utils.py +217 -0
  511. qiskit/result/models.py +234 -0
  512. qiskit/result/postprocess.py +239 -0
  513. qiskit/result/result.py +392 -0
  514. qiskit/result/sampled_expval.py +75 -0
  515. qiskit/result/utils.py +295 -0
  516. qiskit/scheduler/__init__.py +40 -0
  517. qiskit/scheduler/config.py +37 -0
  518. qiskit/scheduler/lowering.py +187 -0
  519. qiskit/scheduler/methods/__init__.py +15 -0
  520. qiskit/scheduler/methods/basic.py +140 -0
  521. qiskit/scheduler/schedule_circuit.py +69 -0
  522. qiskit/scheduler/sequence.py +104 -0
  523. qiskit/synthesis/__init__.py +220 -0
  524. qiskit/synthesis/arithmetic/__init__.py +16 -0
  525. qiskit/synthesis/arithmetic/adders/__init__.py +17 -0
  526. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
  527. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +103 -0
  528. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
  529. qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
  530. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +102 -0
  531. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +99 -0
  532. qiskit/synthesis/clifford/__init__.py +19 -0
  533. qiskit/synthesis/clifford/clifford_decompose_ag.py +178 -0
  534. qiskit/synthesis/clifford/clifford_decompose_bm.py +46 -0
  535. qiskit/synthesis/clifford/clifford_decompose_full.py +64 -0
  536. qiskit/synthesis/clifford/clifford_decompose_greedy.py +58 -0
  537. qiskit/synthesis/clifford/clifford_decompose_layers.py +447 -0
  538. qiskit/synthesis/cnotdihedral/__init__.py +17 -0
  539. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +52 -0
  540. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +141 -0
  541. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_two_qubits.py +266 -0
  542. qiskit/synthesis/discrete_basis/__init__.py +16 -0
  543. qiskit/synthesis/discrete_basis/commutator_decompose.py +241 -0
  544. qiskit/synthesis/discrete_basis/gate_sequence.py +415 -0
  545. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +163 -0
  546. qiskit/synthesis/discrete_basis/solovay_kitaev.py +217 -0
  547. qiskit/synthesis/evolution/__init__.py +21 -0
  548. qiskit/synthesis/evolution/evolution_synthesis.py +48 -0
  549. qiskit/synthesis/evolution/lie_trotter.py +117 -0
  550. qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
  551. qiskit/synthesis/evolution/pauli_network.py +80 -0
  552. qiskit/synthesis/evolution/product_formula.py +311 -0
  553. qiskit/synthesis/evolution/qdrift.py +138 -0
  554. qiskit/synthesis/evolution/suzuki_trotter.py +215 -0
  555. qiskit/synthesis/linear/__init__.py +26 -0
  556. qiskit/synthesis/linear/cnot_synth.py +69 -0
  557. qiskit/synthesis/linear/linear_circuits_utils.py +128 -0
  558. qiskit/synthesis/linear/linear_depth_lnn.py +276 -0
  559. qiskit/synthesis/linear/linear_matrix_utils.py +27 -0
  560. qiskit/synthesis/linear_phase/__init__.py +17 -0
  561. qiskit/synthesis/linear_phase/cnot_phase_synth.py +206 -0
  562. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +262 -0
  563. qiskit/synthesis/linear_phase/cz_depth_lnn.py +58 -0
  564. qiskit/synthesis/multi_controlled/__init__.py +24 -0
  565. qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
  566. qiskit/synthesis/multi_controlled/mcx_synthesis.py +356 -0
  567. qiskit/synthesis/one_qubit/__init__.py +15 -0
  568. qiskit/synthesis/one_qubit/one_qubit_decompose.py +288 -0
  569. qiskit/synthesis/permutation/__init__.py +18 -0
  570. qiskit/synthesis/permutation/permutation_full.py +78 -0
  571. qiskit/synthesis/permutation/permutation_lnn.py +54 -0
  572. qiskit/synthesis/permutation/permutation_reverse_lnn.py +93 -0
  573. qiskit/synthesis/permutation/permutation_utils.py +16 -0
  574. qiskit/synthesis/qft/__init__.py +16 -0
  575. qiskit/synthesis/qft/qft_decompose_full.py +97 -0
  576. qiskit/synthesis/qft/qft_decompose_lnn.py +79 -0
  577. qiskit/synthesis/stabilizer/__init__.py +16 -0
  578. qiskit/synthesis/stabilizer/stabilizer_circuit.py +149 -0
  579. qiskit/synthesis/stabilizer/stabilizer_decompose.py +194 -0
  580. qiskit/synthesis/two_qubit/__init__.py +19 -0
  581. qiskit/synthesis/two_qubit/local_invariance.py +63 -0
  582. qiskit/synthesis/two_qubit/two_qubit_decompose.py +700 -0
  583. qiskit/synthesis/two_qubit/xx_decompose/__init__.py +19 -0
  584. qiskit/synthesis/two_qubit/xx_decompose/circuits.py +300 -0
  585. qiskit/synthesis/two_qubit/xx_decompose/decomposer.py +324 -0
  586. qiskit/synthesis/two_qubit/xx_decompose/embodiments.py +163 -0
  587. qiskit/synthesis/two_qubit/xx_decompose/paths.py +412 -0
  588. qiskit/synthesis/two_qubit/xx_decompose/polytopes.py +262 -0
  589. qiskit/synthesis/two_qubit/xx_decompose/utilities.py +40 -0
  590. qiskit/synthesis/two_qubit/xx_decompose/weyl.py +133 -0
  591. qiskit/synthesis/unitary/__init__.py +13 -0
  592. qiskit/synthesis/unitary/aqc/__init__.py +177 -0
  593. qiskit/synthesis/unitary/aqc/approximate.py +116 -0
  594. qiskit/synthesis/unitary/aqc/aqc.py +175 -0
  595. qiskit/synthesis/unitary/aqc/cnot_structures.py +300 -0
  596. qiskit/synthesis/unitary/aqc/cnot_unit_circuit.py +103 -0
  597. qiskit/synthesis/unitary/aqc/cnot_unit_objective.py +299 -0
  598. qiskit/synthesis/unitary/aqc/elementary_operations.py +108 -0
  599. qiskit/synthesis/unitary/aqc/fast_gradient/__init__.py +164 -0
  600. qiskit/synthesis/unitary/aqc/fast_gradient/fast_grad_utils.py +237 -0
  601. qiskit/synthesis/unitary/aqc/fast_gradient/fast_gradient.py +226 -0
  602. qiskit/synthesis/unitary/aqc/fast_gradient/layer.py +370 -0
  603. qiskit/synthesis/unitary/aqc/fast_gradient/pmatrix.py +312 -0
  604. qiskit/synthesis/unitary/qsd.py +288 -0
  605. qiskit/transpiler/__init__.py +1290 -0
  606. qiskit/transpiler/basepasses.py +221 -0
  607. qiskit/transpiler/coupling.py +500 -0
  608. qiskit/transpiler/exceptions.py +59 -0
  609. qiskit/transpiler/instruction_durations.py +281 -0
  610. qiskit/transpiler/layout.py +737 -0
  611. qiskit/transpiler/passes/__init__.py +312 -0
  612. qiskit/transpiler/passes/analysis/__init__.py +23 -0
  613. qiskit/transpiler/passes/analysis/count_ops.py +30 -0
  614. qiskit/transpiler/passes/analysis/count_ops_longest_path.py +26 -0
  615. qiskit/transpiler/passes/analysis/dag_longest_path.py +24 -0
  616. qiskit/transpiler/passes/analysis/depth.py +33 -0
  617. qiskit/transpiler/passes/analysis/num_qubits.py +26 -0
  618. qiskit/transpiler/passes/analysis/num_tensor_factors.py +26 -0
  619. qiskit/transpiler/passes/analysis/resource_estimation.py +41 -0
  620. qiskit/transpiler/passes/analysis/size.py +36 -0
  621. qiskit/transpiler/passes/analysis/width.py +27 -0
  622. qiskit/transpiler/passes/basis/__init__.py +19 -0
  623. qiskit/transpiler/passes/basis/basis_translator.py +137 -0
  624. qiskit/transpiler/passes/basis/decompose.py +131 -0
  625. qiskit/transpiler/passes/basis/translate_parameterized.py +175 -0
  626. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +88 -0
  627. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +109 -0
  628. qiskit/transpiler/passes/calibration/__init__.py +17 -0
  629. qiskit/transpiler/passes/calibration/base_builder.py +79 -0
  630. qiskit/transpiler/passes/calibration/builders.py +20 -0
  631. qiskit/transpiler/passes/calibration/exceptions.py +22 -0
  632. qiskit/transpiler/passes/calibration/pulse_gate.py +100 -0
  633. qiskit/transpiler/passes/calibration/rx_builder.py +164 -0
  634. qiskit/transpiler/passes/calibration/rzx_builder.py +411 -0
  635. qiskit/transpiler/passes/calibration/rzx_templates.py +51 -0
  636. qiskit/transpiler/passes/layout/__init__.py +26 -0
  637. qiskit/transpiler/passes/layout/_csp_custom_solver.py +65 -0
  638. qiskit/transpiler/passes/layout/apply_layout.py +123 -0
  639. qiskit/transpiler/passes/layout/csp_layout.py +132 -0
  640. qiskit/transpiler/passes/layout/dense_layout.py +202 -0
  641. qiskit/transpiler/passes/layout/disjoint_utils.py +219 -0
  642. qiskit/transpiler/passes/layout/enlarge_with_ancilla.py +49 -0
  643. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +117 -0
  644. qiskit/transpiler/passes/layout/layout_2q_distance.py +77 -0
  645. qiskit/transpiler/passes/layout/sabre_layout.py +487 -0
  646. qiskit/transpiler/passes/layout/sabre_pre_layout.py +225 -0
  647. qiskit/transpiler/passes/layout/set_layout.py +69 -0
  648. qiskit/transpiler/passes/layout/trivial_layout.py +66 -0
  649. qiskit/transpiler/passes/layout/vf2_layout.py +263 -0
  650. qiskit/transpiler/passes/layout/vf2_post_layout.py +419 -0
  651. qiskit/transpiler/passes/layout/vf2_utils.py +260 -0
  652. qiskit/transpiler/passes/optimization/__init__.py +43 -0
  653. qiskit/transpiler/passes/optimization/_gate_extension.py +80 -0
  654. qiskit/transpiler/passes/optimization/collect_1q_runs.py +31 -0
  655. qiskit/transpiler/passes/optimization/collect_2q_blocks.py +35 -0
  656. qiskit/transpiler/passes/optimization/collect_and_collapse.py +115 -0
  657. qiskit/transpiler/passes/optimization/collect_cliffords.py +104 -0
  658. qiskit/transpiler/passes/optimization/collect_linear_functions.py +80 -0
  659. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +227 -0
  660. qiskit/transpiler/passes/optimization/commutation_analysis.py +44 -0
  661. qiskit/transpiler/passes/optimization/commutative_cancellation.py +82 -0
  662. qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +140 -0
  663. qiskit/transpiler/passes/optimization/consolidate_blocks.py +149 -0
  664. qiskit/transpiler/passes/optimization/cx_cancellation.py +65 -0
  665. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +162 -0
  666. qiskit/transpiler/passes/optimization/elide_permutations.py +91 -0
  667. qiskit/transpiler/passes/optimization/hoare_opt.py +420 -0
  668. qiskit/transpiler/passes/optimization/inverse_cancellation.py +95 -0
  669. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +149 -0
  670. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +268 -0
  671. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +254 -0
  672. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +384 -0
  673. qiskit/transpiler/passes/optimization/optimize_annotated.py +448 -0
  674. qiskit/transpiler/passes/optimization/optimize_cliffords.py +89 -0
  675. qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +71 -0
  676. qiskit/transpiler/passes/optimization/remove_diagonal_gates_before_measure.py +41 -0
  677. qiskit/transpiler/passes/optimization/remove_final_reset.py +37 -0
  678. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +69 -0
  679. qiskit/transpiler/passes/optimization/remove_reset_in_zero_state.py +37 -0
  680. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +47 -0
  681. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +40 -0
  682. qiskit/transpiler/passes/optimization/template_matching/__init__.py +19 -0
  683. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +749 -0
  684. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +452 -0
  685. qiskit/transpiler/passes/optimization/template_matching/maximal_matches.py +77 -0
  686. qiskit/transpiler/passes/optimization/template_matching/template_matching.py +370 -0
  687. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +638 -0
  688. qiskit/transpiler/passes/optimization/template_optimization.py +158 -0
  689. qiskit/transpiler/passes/routing/__init__.py +22 -0
  690. qiskit/transpiler/passes/routing/algorithms/__init__.py +33 -0
  691. qiskit/transpiler/passes/routing/algorithms/token_swapper.py +105 -0
  692. qiskit/transpiler/passes/routing/algorithms/types.py +46 -0
  693. qiskit/transpiler/passes/routing/algorithms/util.py +103 -0
  694. qiskit/transpiler/passes/routing/basic_swap.py +166 -0
  695. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/__init__.py +25 -0
  696. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_block.py +60 -0
  697. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +395 -0
  698. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/pauli_2q_evolution_commutation.py +145 -0
  699. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +306 -0
  700. qiskit/transpiler/passes/routing/layout_transformation.py +119 -0
  701. qiskit/transpiler/passes/routing/lookahead_swap.py +390 -0
  702. qiskit/transpiler/passes/routing/sabre_swap.py +447 -0
  703. qiskit/transpiler/passes/routing/star_prerouting.py +392 -0
  704. qiskit/transpiler/passes/routing/stochastic_swap.py +532 -0
  705. qiskit/transpiler/passes/routing/utils.py +35 -0
  706. qiskit/transpiler/passes/scheduling/__init__.py +27 -0
  707. qiskit/transpiler/passes/scheduling/alap.py +153 -0
  708. qiskit/transpiler/passes/scheduling/alignments/__init__.py +81 -0
  709. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +255 -0
  710. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +78 -0
  711. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +107 -0
  712. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +250 -0
  713. qiskit/transpiler/passes/scheduling/asap.py +175 -0
  714. qiskit/transpiler/passes/scheduling/base_scheduler.py +310 -0
  715. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +312 -0
  716. qiskit/transpiler/passes/scheduling/padding/__init__.py +16 -0
  717. qiskit/transpiler/passes/scheduling/padding/base_padding.py +256 -0
  718. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +452 -0
  719. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +82 -0
  720. qiskit/transpiler/passes/scheduling/scheduling/__init__.py +17 -0
  721. qiskit/transpiler/passes/scheduling/scheduling/alap.py +127 -0
  722. qiskit/transpiler/passes/scheduling/scheduling/asap.py +131 -0
  723. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +94 -0
  724. qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
  725. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +165 -0
  726. qiskit/transpiler/passes/synthesis/__init__.py +20 -0
  727. qiskit/transpiler/passes/synthesis/aqc_plugin.py +153 -0
  728. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +854 -0
  729. qiskit/transpiler/passes/synthesis/hls_plugins.py +1559 -0
  730. qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +41 -0
  731. qiskit/transpiler/passes/synthesis/plugin.py +734 -0
  732. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +297 -0
  733. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +1076 -0
  734. qiskit/transpiler/passes/utils/__init__.py +33 -0
  735. qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +41 -0
  736. qiskit/transpiler/passes/utils/check_gate_direction.py +52 -0
  737. qiskit/transpiler/passes/utils/check_map.py +78 -0
  738. qiskit/transpiler/passes/utils/contains_instruction.py +45 -0
  739. qiskit/transpiler/passes/utils/control_flow.py +65 -0
  740. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +93 -0
  741. qiskit/transpiler/passes/utils/dag_fixed_point.py +36 -0
  742. qiskit/transpiler/passes/utils/error.py +69 -0
  743. qiskit/transpiler/passes/utils/filter_op_nodes.py +65 -0
  744. qiskit/transpiler/passes/utils/fixed_point.py +48 -0
  745. qiskit/transpiler/passes/utils/gate_direction.py +86 -0
  746. qiskit/transpiler/passes/utils/gates_basis.py +51 -0
  747. qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +163 -0
  748. qiskit/transpiler/passes/utils/minimum_point.py +118 -0
  749. qiskit/transpiler/passes/utils/remove_barriers.py +49 -0
  750. qiskit/transpiler/passes/utils/remove_final_measurements.py +114 -0
  751. qiskit/transpiler/passes/utils/unroll_forloops.py +81 -0
  752. qiskit/transpiler/passmanager.py +490 -0
  753. qiskit/transpiler/passmanager_config.py +216 -0
  754. qiskit/transpiler/preset_passmanagers/__init__.py +73 -0
  755. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +1045 -0
  756. qiskit/transpiler/preset_passmanagers/common.py +649 -0
  757. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +626 -0
  758. qiskit/transpiler/preset_passmanagers/level0.py +113 -0
  759. qiskit/transpiler/preset_passmanagers/level1.py +120 -0
  760. qiskit/transpiler/preset_passmanagers/level2.py +119 -0
  761. qiskit/transpiler/preset_passmanagers/level3.py +119 -0
  762. qiskit/transpiler/preset_passmanagers/plugin.py +353 -0
  763. qiskit/transpiler/target.py +1319 -0
  764. qiskit/transpiler/timing_constraints.py +59 -0
  765. qiskit/user_config.py +262 -0
  766. qiskit/utils/__init__.py +89 -0
  767. qiskit/utils/classtools.py +146 -0
  768. qiskit/utils/deprecate_pulse.py +119 -0
  769. qiskit/utils/deprecation.py +490 -0
  770. qiskit/utils/lazy_tester.py +363 -0
  771. qiskit/utils/multiprocessing.py +56 -0
  772. qiskit/utils/optionals.py +347 -0
  773. qiskit/utils/parallel.py +191 -0
  774. qiskit/utils/units.py +143 -0
  775. qiskit/version.py +84 -0
  776. qiskit/visualization/__init__.py +288 -0
  777. qiskit/visualization/array.py +204 -0
  778. qiskit/visualization/bloch.py +778 -0
  779. qiskit/visualization/circuit/__init__.py +15 -0
  780. qiskit/visualization/circuit/_utils.py +675 -0
  781. qiskit/visualization/circuit/circuit_visualization.py +727 -0
  782. qiskit/visualization/circuit/latex.py +661 -0
  783. qiskit/visualization/circuit/matplotlib.py +2029 -0
  784. qiskit/visualization/circuit/qcstyle.py +278 -0
  785. qiskit/visualization/circuit/styles/__init__.py +13 -0
  786. qiskit/visualization/circuit/styles/bw.json +202 -0
  787. qiskit/visualization/circuit/styles/clifford.json +202 -0
  788. qiskit/visualization/circuit/styles/iqp-dark.json +214 -0
  789. qiskit/visualization/circuit/styles/iqp.json +214 -0
  790. qiskit/visualization/circuit/styles/textbook.json +202 -0
  791. qiskit/visualization/circuit/text.py +1844 -0
  792. qiskit/visualization/circuit_visualization.py +19 -0
  793. qiskit/visualization/counts_visualization.py +481 -0
  794. qiskit/visualization/dag_visualization.py +316 -0
  795. qiskit/visualization/exceptions.py +21 -0
  796. qiskit/visualization/gate_map.py +1485 -0
  797. qiskit/visualization/library.py +37 -0
  798. qiskit/visualization/pass_manager_visualization.py +308 -0
  799. qiskit/visualization/pulse_v2/__init__.py +21 -0
  800. qiskit/visualization/pulse_v2/core.py +901 -0
  801. qiskit/visualization/pulse_v2/device_info.py +173 -0
  802. qiskit/visualization/pulse_v2/drawings.py +253 -0
  803. qiskit/visualization/pulse_v2/events.py +254 -0
  804. qiskit/visualization/pulse_v2/generators/__init__.py +40 -0
  805. qiskit/visualization/pulse_v2/generators/barrier.py +76 -0
  806. qiskit/visualization/pulse_v2/generators/chart.py +208 -0
  807. qiskit/visualization/pulse_v2/generators/frame.py +436 -0
  808. qiskit/visualization/pulse_v2/generators/snapshot.py +133 -0
  809. qiskit/visualization/pulse_v2/generators/waveform.py +645 -0
  810. qiskit/visualization/pulse_v2/interface.py +458 -0
  811. qiskit/visualization/pulse_v2/layouts.py +387 -0
  812. qiskit/visualization/pulse_v2/plotters/__init__.py +17 -0
  813. qiskit/visualization/pulse_v2/plotters/base_plotter.py +53 -0
  814. qiskit/visualization/pulse_v2/plotters/matplotlib.py +201 -0
  815. qiskit/visualization/pulse_v2/stylesheet.py +312 -0
  816. qiskit/visualization/pulse_v2/types.py +242 -0
  817. qiskit/visualization/state_visualization.py +1518 -0
  818. qiskit/visualization/timeline/__init__.py +21 -0
  819. qiskit/visualization/timeline/core.py +480 -0
  820. qiskit/visualization/timeline/drawings.py +260 -0
  821. qiskit/visualization/timeline/generators.py +506 -0
  822. qiskit/visualization/timeline/interface.py +436 -0
  823. qiskit/visualization/timeline/layouts.py +115 -0
  824. qiskit/visualization/timeline/plotters/__init__.py +16 -0
  825. qiskit/visualization/timeline/plotters/base_plotter.py +58 -0
  826. qiskit/visualization/timeline/plotters/matplotlib.py +192 -0
  827. qiskit/visualization/timeline/stylesheet.py +301 -0
  828. qiskit/visualization/timeline/types.py +148 -0
  829. qiskit/visualization/transition_visualization.py +369 -0
  830. qiskit/visualization/utils.py +49 -0
  831. qiskit-1.3.0.dist-info/LICENSE.txt +203 -0
  832. qiskit-1.3.0.dist-info/METADATA +222 -0
  833. qiskit-1.3.0.dist-info/RECORD +836 -0
  834. qiskit-1.3.0.dist-info/WHEEL +5 -0
  835. qiskit-1.3.0.dist-info/entry_points.txt +76 -0
  836. qiskit-1.3.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,773 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2017, 2021.
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
+ Stabilizer state class.
15
+ """
16
+
17
+ from __future__ import annotations
18
+
19
+ from collections.abc import Collection
20
+
21
+ import numpy as np
22
+
23
+ from qiskit.exceptions import QiskitError
24
+ from qiskit.quantum_info.operators.op_shape import OpShape
25
+ from qiskit.quantum_info.operators.operator import Operator
26
+ from qiskit.quantum_info.operators.symplectic import Clifford, Pauli, PauliList
27
+ from qiskit.quantum_info.operators.symplectic.clifford_circuits import _append_x
28
+ from qiskit.quantum_info.states.quantum_state import QuantumState
29
+ from qiskit.circuit import QuantumCircuit, Instruction
30
+
31
+
32
+ class StabilizerState(QuantumState):
33
+ """StabilizerState class.
34
+ Stabilizer simulator using the convention from reference [1].
35
+ Based on the internal class :class:`~qiskit.quantum_info.Clifford`.
36
+
37
+ .. code-block::
38
+
39
+ from qiskit import QuantumCircuit
40
+ from qiskit.quantum_info import StabilizerState, Pauli
41
+
42
+ # Bell state generation circuit
43
+ qc = QuantumCircuit(2)
44
+ qc.h(0)
45
+ qc.cx(0, 1)
46
+ stab = StabilizerState(qc)
47
+
48
+ # Print the StabilizerState
49
+ print(stab)
50
+
51
+ # Calculate the StabilizerState measurement probabilities dictionary
52
+ print (stab.probabilities_dict())
53
+
54
+ # Calculate expectation value of the StabilizerState
55
+ print (stab.expectation_value(Pauli('ZZ')))
56
+
57
+ .. code-block:: text
58
+
59
+ StabilizerState(StabilizerTable: ['+XX', '+ZZ'])
60
+ {'00': 0.5, '11': 0.5}
61
+ 1
62
+
63
+ Given a list of stabilizers, :meth:`qiskit.quantum_info.StabilizerState.from_stabilizer_list`
64
+ returns a state stabilized by the list
65
+
66
+ .. code-block:: python
67
+
68
+ from qiskit.quantum_info import StabilizerState
69
+
70
+ stabilizer_list = ["ZXX", "-XYX", "+ZYY"]
71
+ stab = StabilizerState.from_stabilizer_list(stabilizer_list)
72
+
73
+
74
+ References:
75
+ 1. S. Aaronson, D. Gottesman, *Improved Simulation of Stabilizer Circuits*,
76
+ Phys. Rev. A 70, 052328 (2004).
77
+ `arXiv:quant-ph/0406196 <https://arxiv.org/abs/quant-ph/0406196>`_
78
+ """
79
+
80
+ def __init__(
81
+ self,
82
+ data: StabilizerState | Clifford | Pauli | QuantumCircuit | Instruction,
83
+ validate: bool = True,
84
+ ):
85
+ """Initialize a StabilizerState object.
86
+
87
+ Args:
88
+ data (StabilizerState or Clifford or Pauli or QuantumCircuit or
89
+ qiskit.circuit.Instruction):
90
+ Data from which the stabilizer state can be constructed.
91
+ validate (boolean): validate that the stabilizer state data is
92
+ a valid Clifford.
93
+ """
94
+
95
+ # Initialize from another StabilizerState
96
+ if isinstance(data, StabilizerState):
97
+ self._data = data._data
98
+ # Initialize from a Pauli
99
+ elif isinstance(data, Pauli):
100
+ self._data = Clifford(data.to_instruction())
101
+ # Initialize from a Clifford, QuantumCircuit or Instruction
102
+ else:
103
+ self._data = Clifford(data, validate)
104
+
105
+ # Initialize
106
+ super().__init__(op_shape=OpShape.auto(num_qubits_r=self._data.num_qubits, num_qubits_l=0))
107
+
108
+ @classmethod
109
+ def from_stabilizer_list(
110
+ cls,
111
+ stabilizers: Collection[str],
112
+ allow_redundant: bool = False,
113
+ allow_underconstrained: bool = False,
114
+ ) -> StabilizerState:
115
+ """Create a stabilizer state from the collection of stabilizers.
116
+
117
+ Args:
118
+ stabilizers (Collection[str]): list of stabilizer strings
119
+ allow_redundant (bool): allow redundant stabilizers (i.e., some stabilizers
120
+ can be products of the others)
121
+ allow_underconstrained (bool): allow underconstrained set of stabilizers (i.e.,
122
+ the stabilizers do not specify a unique state)
123
+
124
+ Return:
125
+ StabilizerState: a state stabilized by stabilizers.
126
+ """
127
+
128
+ # pylint: disable=cyclic-import
129
+ from qiskit.synthesis.stabilizer import synth_circuit_from_stabilizers
130
+
131
+ circuit = synth_circuit_from_stabilizers(
132
+ stabilizers,
133
+ allow_redundant=allow_redundant,
134
+ allow_underconstrained=allow_underconstrained,
135
+ )
136
+ return cls(circuit)
137
+
138
+ def __eq__(self, other):
139
+ return (self._data.stab == other._data.stab).all()
140
+
141
+ def __repr__(self):
142
+ return f"StabilizerState({self._data.to_labels(mode='S')})"
143
+
144
+ @property
145
+ def clifford(self):
146
+ """Return StabilizerState Clifford data"""
147
+ return self._data
148
+
149
+ def is_valid(self, atol=None, rtol=None):
150
+ """Return True if a valid StabilizerState."""
151
+ return self._data.is_unitary()
152
+
153
+ def _add(self, other):
154
+ raise NotImplementedError(f"{type(self)} does not support addition")
155
+
156
+ def _multiply(self, other):
157
+ raise NotImplementedError(f"{type(self)} does not support scalar multiplication")
158
+
159
+ def trace(self) -> float:
160
+ """Return the trace of the stabilizer state as a density matrix,
161
+ which equals to 1, since it is always a pure state.
162
+
163
+ Returns:
164
+ float: the trace (should equal 1).
165
+
166
+ Raises:
167
+ QiskitError: if input is not a StabilizerState.
168
+ """
169
+ if not self.is_valid():
170
+ raise QiskitError("StabilizerState is not a valid quantum state.")
171
+ return 1.0
172
+
173
+ def purity(self) -> float:
174
+ """Return the purity of the quantum state,
175
+ which equals to 1, since it is always a pure state.
176
+
177
+ Returns:
178
+ float: the purity (should equal 1).
179
+
180
+ Raises:
181
+ QiskitError: if input is not a StabilizerState.
182
+ """
183
+ if not self.is_valid():
184
+ raise QiskitError("StabilizerState is not a valid quantum state.")
185
+ return 1.0
186
+
187
+ def to_operator(self) -> Operator:
188
+ """Convert state to matrix operator class"""
189
+ return Clifford(self.clifford).to_operator()
190
+
191
+ def conjugate(self):
192
+ """Return the conjugate of the operator."""
193
+ ret = self.copy()
194
+ ret._data = ret._data.conjugate()
195
+ return ret
196
+
197
+ def tensor(self, other: StabilizerState) -> StabilizerState:
198
+ """Return the tensor product stabilizer state self ⊗ other.
199
+
200
+ Args:
201
+ other (StabilizerState): a stabilizer state object.
202
+
203
+ Returns:
204
+ StabilizerState: the tensor product operator self ⊗ other.
205
+
206
+ Raises:
207
+ QiskitError: if other is not a StabilizerState.
208
+ """
209
+ if not isinstance(other, StabilizerState):
210
+ other = StabilizerState(other)
211
+ ret = self.copy()
212
+ ret._data = self.clifford.tensor(other.clifford)
213
+ return ret
214
+
215
+ def expand(self, other: StabilizerState) -> StabilizerState:
216
+ """Return the tensor product stabilizer state other ⊗ self.
217
+
218
+ Args:
219
+ other (StabilizerState): a stabilizer state object.
220
+
221
+ Returns:
222
+ StabilizerState: the tensor product operator other ⊗ self.
223
+
224
+ Raises:
225
+ QiskitError: if other is not a StabilizerState.
226
+ """
227
+ if not isinstance(other, StabilizerState):
228
+ other = StabilizerState(other)
229
+ ret = self.copy()
230
+ ret._data = self.clifford.expand(other.clifford)
231
+ return ret
232
+
233
+ def evolve(
234
+ self, other: Clifford | QuantumCircuit | Instruction, qargs: list | None = None
235
+ ) -> StabilizerState:
236
+ """Evolve a stabilizer state by a Clifford operator.
237
+
238
+ Args:
239
+ other (Clifford or QuantumCircuit or qiskit.circuit.Instruction):
240
+ The Clifford operator to evolve by.
241
+ qargs (list): a list of stabilizer subsystem positions to apply the operator on.
242
+
243
+ Returns:
244
+ StabilizerState: the output stabilizer state.
245
+
246
+ Raises:
247
+ QiskitError: if other is not a StabilizerState.
248
+ QiskitError: if the operator dimension does not match the
249
+ specified StabilizerState subsystem dimensions.
250
+ """
251
+ if not isinstance(other, StabilizerState):
252
+ other = StabilizerState(other)
253
+ ret = self.copy()
254
+ ret._data = self.clifford.compose(other.clifford, qargs=qargs)
255
+ return ret
256
+
257
+ def expectation_value(self, oper: Pauli, qargs: None | list = None) -> complex:
258
+ """Compute the expectation value of a Pauli operator.
259
+
260
+ Args:
261
+ oper (Pauli): a Pauli operator to evaluate expval.
262
+ qargs (None or list): subsystems to apply the operator on.
263
+
264
+ Returns:
265
+ complex: the expectation value (only 0 or 1 or -1 or i or -i).
266
+
267
+ Raises:
268
+ QiskitError: if oper is not a Pauli operator.
269
+ """
270
+ if not isinstance(oper, Pauli):
271
+ raise QiskitError("Operator for expectation value is not a Pauli operator.")
272
+
273
+ num_qubits = self.clifford.num_qubits
274
+ if qargs is None:
275
+ qubits = range(num_qubits)
276
+ else:
277
+ qubits = qargs
278
+
279
+ # Construct Pauli on num_qubits
280
+ pauli = Pauli(num_qubits * "I")
281
+ phase = 0
282
+ pauli_phase = (-1j) ** oper.phase if oper.phase else 1
283
+
284
+ for pos, qubit in enumerate(qubits):
285
+ pauli.x[qubit] = oper.x[pos]
286
+ pauli.z[qubit] = oper.z[pos]
287
+ phase += pauli.x[qubit] & pauli.z[qubit]
288
+
289
+ # Check if there is a stabilizer that anti-commutes with an odd number of qubits
290
+ # If so the expectation value is 0
291
+ for p in range(num_qubits):
292
+ num_anti = 0
293
+ num_anti += np.count_nonzero(pauli.z & self.clifford.stab_x[p])
294
+ num_anti += np.count_nonzero(pauli.x & self.clifford.stab_z[p])
295
+ if num_anti % 2 == 1:
296
+ return 0
297
+
298
+ # Otherwise pauli is (-1)^a prod_j S_j^b_j for Clifford stabilizers
299
+ # If pauli anti-commutes with D_j then b_j = 1.
300
+ # Multiply pauli by stabilizers with anti-commuting destabilisers
301
+ pauli_z = (pauli.z).copy() # Make a copy of pauli.z
302
+ for p in range(num_qubits):
303
+ # Check if destabilizer anti-commutes
304
+ num_anti = 0
305
+ num_anti += np.count_nonzero(pauli.z & self.clifford.destab_x[p])
306
+ num_anti += np.count_nonzero(pauli.x & self.clifford.destab_z[p])
307
+ if num_anti % 2 == 0:
308
+ continue
309
+
310
+ # If anti-commutes multiply Pauli by stabilizer
311
+ phase += 2 * self.clifford.stab_phase[p]
312
+ phase += np.count_nonzero(self.clifford.stab_z[p] & self.clifford.stab_x[p])
313
+ phase += 2 * np.count_nonzero(pauli_z & self.clifford.stab_x[p])
314
+ pauli_z = pauli_z ^ self.clifford.stab_z[p]
315
+
316
+ # For valid stabilizers, `phase` can only be 0 (= 1) or 2 (= -1) at this point.
317
+ if phase % 4 != 0:
318
+ return -pauli_phase
319
+
320
+ return pauli_phase
321
+
322
+ def equiv(self, other: StabilizerState) -> bool:
323
+ """Return True if the two generating sets generate the same stabilizer group.
324
+
325
+ Args:
326
+ other (StabilizerState): another StabilizerState.
327
+
328
+ Returns:
329
+ bool: True if other has a generating set that generates the same StabilizerState.
330
+ """
331
+ if not isinstance(other, StabilizerState):
332
+ try:
333
+ other = StabilizerState(other)
334
+ except QiskitError:
335
+ return False
336
+
337
+ num_qubits = self.num_qubits
338
+ if other.num_qubits != num_qubits:
339
+ return False
340
+
341
+ pauli_orig = PauliList.from_symplectic(
342
+ self._data.stab_z, self._data.stab_x, 2 * self._data.stab_phase
343
+ )
344
+ pauli_other = PauliList.from_symplectic(
345
+ other._data.stab_z, other._data.stab_x, 2 * other._data.stab_phase
346
+ )
347
+
348
+ # Check that each stabilizer from the original set commutes with each stabilizer
349
+ # from the other set
350
+ if not np.all([pauli.commutes(pauli_other) for pauli in pauli_orig]):
351
+ return False
352
+
353
+ # Compute the expected value of each stabilizer from the original set on the stabilizer state
354
+ # determined by the other set. The two stabilizer states coincide if and only if the
355
+ # expected value is +1 for each stabilizer
356
+ for i in range(num_qubits):
357
+ exp_val = self.expectation_value(pauli_other[i])
358
+ if exp_val != 1:
359
+ return False
360
+
361
+ return True
362
+
363
+ def probabilities(self, qargs: None | list = None, decimals: None | int = None) -> np.ndarray:
364
+ """Return the subsystem measurement probability vector.
365
+
366
+ Measurement probabilities are with respect to measurement in the
367
+ computation (diagonal) basis.
368
+
369
+ Args:
370
+ qargs (None or list): subsystems to return probabilities for,
371
+ if None return for all subsystems (Default: None).
372
+ decimals (None or int): the number of decimal places to round
373
+ values. If None no rounding is done (Default: None).
374
+
375
+ Returns:
376
+ np.array: The Numpy vector array of probabilities.
377
+ """
378
+ probs_dict = self.probabilities_dict(qargs, decimals)
379
+ if qargs is None:
380
+ qargs = range(self.clifford.num_qubits)
381
+ probs = np.zeros(2 ** len(qargs))
382
+
383
+ for key, value in probs_dict.items():
384
+ place = int(key, 2)
385
+ probs[place] = value
386
+
387
+ return probs
388
+
389
+ def probabilities_dict_from_bitstring(
390
+ self,
391
+ outcome_bitstring: str,
392
+ qargs: None | list = None,
393
+ decimals: None | int = None,
394
+ ) -> dict[str, float]:
395
+ """Return the subsystem measurement probability dictionary utilizing
396
+ a targeted outcome_bitstring to perform the measurement for. This
397
+ will calculate a probability for only a single targeted
398
+ outcome_bitstring value, giving a performance boost over calculating
399
+ all possible outcomes.
400
+
401
+ Measurement probabilities are with respect to measurement in the
402
+ computation (diagonal) basis.
403
+
404
+ This dictionary representation uses a Ket-like notation where the
405
+ dictionary keys are qudit strings for the subsystem basis vectors.
406
+ If any subsystem has a dimension greater than 10 comma delimiters are
407
+ inserted between integers so that subsystems can be distinguished.
408
+
409
+ Args:
410
+ outcome_bitstring (None or str): targeted outcome bitstring
411
+ to perform a measurement calculation for, this will significantly
412
+ reduce the number of calculation performed (Default: None)
413
+ qargs (None or list): subsystems to return probabilities for,
414
+ if None return for all subsystems (Default: None).
415
+ decimals (None or int): the number of decimal places to round
416
+ values. If None no rounding is done (Default: None)
417
+
418
+ Returns:
419
+ dict[str, float]: The measurement probabilities in dict (ket) form.
420
+ """
421
+ return self._get_probabilities_dict(
422
+ outcome_bitstring=outcome_bitstring, qargs=qargs, decimals=decimals
423
+ )
424
+
425
+ def probabilities_dict(
426
+ self, qargs: None | list = None, decimals: None | int = None
427
+ ) -> dict[str, float]:
428
+ """Return the subsystem measurement probability dictionary.
429
+
430
+ Measurement probabilities are with respect to measurement in the
431
+ computation (diagonal) basis.
432
+
433
+ This dictionary representation uses a Ket-like notation where the
434
+ dictionary keys are qudit strings for the subsystem basis vectors.
435
+ If any subsystem has a dimension greater than 10 comma delimiters are
436
+ inserted between integers so that subsystems can be distinguished.
437
+
438
+ Args:
439
+ qargs (None or list): subsystems to return probabilities for,
440
+ if None return for all subsystems (Default: None).
441
+ decimals (None or int): the number of decimal places to round
442
+ values. If None no rounding is done (Default: None).
443
+
444
+ Returns:
445
+ dict: The measurement probabilities in dict (key) form.
446
+ """
447
+ return self._get_probabilities_dict(outcome_bitstring=None, qargs=qargs, decimals=decimals)
448
+
449
+ def reset(self, qargs: list | None = None) -> StabilizerState:
450
+ """Reset state or subsystems to the 0-state.
451
+
452
+ Args:
453
+ qargs (list or None): subsystems to reset, if None all
454
+ subsystems will be reset to their 0-state
455
+ (Default: None).
456
+
457
+ Returns:
458
+ StabilizerState: the reset state.
459
+
460
+ Additional Information:
461
+ If all subsystems are reset this will return the ground state
462
+ on all subsystems. If only some subsystems are reset this
463
+ function will perform a measurement on those subsystems and
464
+ evolve the subsystems so that the collapsed post-measurement
465
+ states are rotated to the 0-state. The RNG seed for this
466
+ sampling can be set using the :meth:`seed` method.
467
+ """
468
+ # Resetting all qubits does not require sampling or RNG
469
+ if qargs is None:
470
+ return StabilizerState(Clifford(np.eye(2 * self.clifford.num_qubits)))
471
+
472
+ randbits = self._rng.integers(2, size=len(qargs))
473
+ ret = self.copy()
474
+
475
+ for bit, qubit in enumerate(qargs):
476
+ # Apply measurement and get classical outcome
477
+ outcome = ret._measure_and_update(qubit, randbits[bit])
478
+
479
+ # Use the outcome to apply X gate to any qubits left in the
480
+ # |1> state after measure, then discard outcome.
481
+ if outcome == 1:
482
+ _append_x(ret.clifford, qubit)
483
+
484
+ return ret
485
+
486
+ def measure(self, qargs: list | None = None) -> tuple:
487
+ """Measure subsystems and return outcome and post-measure state.
488
+
489
+ Note that this function uses the QuantumStates internal random
490
+ number generator for sampling the measurement outcome. The RNG
491
+ seed can be set using the :meth:`seed` method.
492
+
493
+ Args:
494
+ qargs (list or None): subsystems to sample measurements for,
495
+ if None sample measurement of all
496
+ subsystems (Default: None).
497
+
498
+ Returns:
499
+ tuple: the pair ``(outcome, state)`` where ``outcome`` is the
500
+ measurement outcome string label, and ``state`` is the
501
+ collapsed post-measurement stabilizer state for the
502
+ corresponding outcome.
503
+ """
504
+ if qargs is None:
505
+ qargs = range(self.clifford.num_qubits)
506
+
507
+ randbits = self._rng.integers(2, size=len(qargs))
508
+ ret = self.copy()
509
+
510
+ outcome = ""
511
+ for bit, qubit in enumerate(qargs):
512
+ outcome = str(ret._measure_and_update(qubit, randbits[bit])) + outcome
513
+
514
+ return outcome, ret
515
+
516
+ def sample_memory(self, shots: int, qargs: None | list = None) -> np.ndarray:
517
+ """Sample a list of qubit measurement outcomes in the computational basis.
518
+
519
+ Args:
520
+ shots (int): number of samples to generate.
521
+ qargs (None or list): subsystems to sample measurements for,
522
+ if None sample measurement of all
523
+ subsystems (Default: None).
524
+
525
+ Returns:
526
+ np.array: list of sampled counts if the order sampled.
527
+
528
+ Additional Information:
529
+
530
+ This function implements the measurement :meth:`measure` method.
531
+
532
+ The seed for random number generator used for sampling can be
533
+ set to a fixed value by using the stats :meth:`seed` method.
534
+ """
535
+ memory = []
536
+ for _ in range(shots):
537
+ # copy the StabilizerState since measure updates it
538
+ stab = self.copy()
539
+ memory.append(stab.measure(qargs)[0])
540
+ return memory
541
+
542
+ # -----------------------------------------------------------------------
543
+ # Helper functions for calculating the measurement
544
+ # -----------------------------------------------------------------------
545
+ def _measure_and_update(self, qubit, randbit):
546
+ """Measure a single qubit and return outcome and post-measure state.
547
+
548
+ Note that this function uses the QuantumStates internal random
549
+ number generator for sampling the measurement outcome. The RNG
550
+ seed can be set using the :meth:`seed` method.
551
+
552
+ Note that stabilizer state measurements only have three probabilities:
553
+ (p0, p1) = (0.5, 0.5), (1, 0), or (0, 1)
554
+ The random case happens if there is a row anti-commuting with Z[qubit]
555
+ """
556
+
557
+ num_qubits = self.clifford.num_qubits
558
+ clifford = self.clifford
559
+ stab_x = self.clifford.stab_x
560
+
561
+ # Check if there exists stabilizer anticommuting with Z[qubit]
562
+ # in this case the measurement outcome is random
563
+ z_anticommuting = np.any(stab_x[:, qubit])
564
+
565
+ if z_anticommuting == 0:
566
+ # Deterministic outcome - measuring it will not change the StabilizerState
567
+ aux_pauli = Pauli(num_qubits * "I")
568
+ for i in range(num_qubits):
569
+ if clifford.x[i][qubit]:
570
+ aux_pauli = self._rowsum_deterministic(clifford, aux_pauli, i + num_qubits)
571
+ outcome = aux_pauli.phase
572
+ return outcome
573
+
574
+ else:
575
+ # Non-deterministic outcome
576
+ outcome = randbit
577
+ p_qubit = np.min(np.nonzero(stab_x[:, qubit]))
578
+ p_qubit += num_qubits
579
+
580
+ # Updating the StabilizerState
581
+ for i in range(2 * num_qubits):
582
+ # the last condition is not in the AG paper but we seem to need it
583
+ if (clifford.x[i][qubit]) and (i != p_qubit) and (i != (p_qubit - num_qubits)):
584
+ self._rowsum_nondeterministic(clifford, i, p_qubit)
585
+
586
+ clifford.destab[p_qubit - num_qubits] = clifford.stab[p_qubit - num_qubits].copy()
587
+ clifford.x[p_qubit] = np.zeros(num_qubits)
588
+ clifford.z[p_qubit] = np.zeros(num_qubits)
589
+ clifford.z[p_qubit][qubit] = True
590
+ clifford.phase[p_qubit] = outcome
591
+ return outcome
592
+
593
+ @staticmethod
594
+ def _phase_exponent(x1, z1, x2, z2):
595
+ """Exponent g of i such that Pauli(x1,z1) * Pauli(x2,z2) = i^g Pauli(x1+x2,z1+z2)"""
596
+ # pylint: disable=invalid-name
597
+
598
+ phase = (x2 * z1 * (1 + 2 * z2 + 2 * x1) - x1 * z2 * (1 + 2 * z1 + 2 * x2)) % 4
599
+ if phase < 0:
600
+ phase += 4 # now phase in {0, 1, 3}
601
+
602
+ if phase == 2:
603
+ raise QiskitError("Invalid rowsum phase exponent in measurement calculation.")
604
+ return phase
605
+
606
+ @staticmethod
607
+ def _rowsum(accum_pauli, accum_phase, row_pauli, row_phase):
608
+ """Aaronson-Gottesman rowsum helper function"""
609
+
610
+ newr = 2 * row_phase + 2 * accum_phase
611
+
612
+ for qubit in range(row_pauli.num_qubits):
613
+ newr += StabilizerState._phase_exponent(
614
+ row_pauli.x[qubit], row_pauli.z[qubit], accum_pauli.x[qubit], accum_pauli.z[qubit]
615
+ )
616
+ newr %= 4
617
+ if (newr != 0) & (newr != 2):
618
+ raise QiskitError("Invalid rowsum in measurement calculation.")
619
+
620
+ accum_phase = int(newr == 2)
621
+ accum_pauli.x ^= row_pauli.x
622
+ accum_pauli.z ^= row_pauli.z
623
+ return accum_pauli, accum_phase
624
+
625
+ @staticmethod
626
+ def _rowsum_nondeterministic(clifford, accum, row):
627
+ """Updating StabilizerState Clifford in the
628
+ non-deterministic rowsum calculation.
629
+ row and accum are rows in the StabilizerState Clifford."""
630
+
631
+ row_phase = clifford.phase[row]
632
+ accum_phase = clifford.phase[accum]
633
+
634
+ z = clifford.z
635
+ x = clifford.x
636
+ row_pauli = Pauli((z[row], x[row]))
637
+ accum_pauli = Pauli((z[accum], x[accum]))
638
+
639
+ accum_pauli, accum_phase = StabilizerState._rowsum(
640
+ accum_pauli, accum_phase, row_pauli, row_phase
641
+ )
642
+
643
+ clifford.phase[accum] = accum_phase
644
+ x[accum] = accum_pauli.x
645
+ z[accum] = accum_pauli.z
646
+
647
+ @staticmethod
648
+ def _rowsum_deterministic(clifford, aux_pauli, row):
649
+ """Updating an auxiliary Pauli aux_pauli in the
650
+ deterministic rowsum calculation.
651
+ The StabilizerState itself is not updated."""
652
+
653
+ row_phase = clifford.phase[row]
654
+ accum_phase = aux_pauli.phase
655
+
656
+ accum_pauli = aux_pauli
657
+ row_pauli = Pauli((clifford.z[row], clifford.x[row]))
658
+
659
+ accum_pauli, accum_phase = StabilizerState._rowsum(
660
+ accum_pauli, accum_phase, row_pauli, row_phase
661
+ )
662
+
663
+ aux_pauli = accum_pauli
664
+ aux_pauli.phase = accum_phase
665
+ return aux_pauli
666
+
667
+ # -----------------------------------------------------------------------
668
+ # Helper functions for calculating the probabilities
669
+ # -----------------------------------------------------------------------
670
+ def _get_probabilities(
671
+ self,
672
+ qubits: range,
673
+ outcome: list[str],
674
+ outcome_prob: float,
675
+ probs: dict[str, float],
676
+ outcome_bitstring: str = None,
677
+ ):
678
+ """Recursive helper function for calculating the probabilities
679
+
680
+ Args:
681
+ qubits (range): range of qubits
682
+ outcome (list[str]): outcome being built
683
+ outcome_prob (float): probability of the outcome
684
+ probs (dict[str, float]): holds the outcomes and probability results
685
+ outcome_bitstring (str): target outcome to measure which reduces measurements, None
686
+ if not targeting a specific target
687
+ """
688
+ qubit_for_branching: int = -1
689
+
690
+ ret: StabilizerState = self.copy()
691
+
692
+ # Find outcomes for each qubit
693
+ for i in range(len(qubits)):
694
+ if outcome[i] == "X":
695
+ # Retrieve the qubit for the current measurement
696
+ qubit = qubits[(len(qubits) - i - 1)]
697
+ # Determine if the probability is deterministic
698
+ if not any(ret.clifford.stab_x[:, qubit]):
699
+ single_qubit_outcome: np.int64 = ret._measure_and_update(qubit, 0)
700
+ if outcome_bitstring is None or (
701
+ int(outcome_bitstring[i]) == single_qubit_outcome
702
+ ):
703
+ # No outcome_bitstring target, or using outcome_bitstring target and
704
+ # the single_qubit_outcome equals the desired outcome_bitstring target value,
705
+ # then use current outcome_prob value
706
+ outcome[i] = str(single_qubit_outcome)
707
+ else:
708
+ # If the single_qubit_outcome does not equal the outcome_bitsring target
709
+ # then we know that the probability will be 0
710
+ outcome[i] = str(outcome_bitstring[i])
711
+ outcome_prob = 0
712
+ else:
713
+ qubit_for_branching = i
714
+
715
+ if qubit_for_branching == -1:
716
+ str_outcome = "".join(outcome)
717
+ probs[str_outcome] = outcome_prob
718
+ return
719
+
720
+ for single_qubit_outcome in (
721
+ range(0, 2)
722
+ if (outcome_bitstring is None)
723
+ else [int(outcome_bitstring[qubit_for_branching])]
724
+ ):
725
+ new_outcome = outcome.copy()
726
+ new_outcome[qubit_for_branching] = str(single_qubit_outcome)
727
+
728
+ stab_cpy = ret.copy()
729
+ stab_cpy._measure_and_update(
730
+ qubits[(len(qubits) - qubit_for_branching - 1)], single_qubit_outcome
731
+ )
732
+ stab_cpy._get_probabilities(
733
+ qubits, new_outcome, (0.5 * outcome_prob), probs, outcome_bitstring
734
+ )
735
+
736
+ def _get_probabilities_dict(
737
+ self,
738
+ outcome_bitstring: None | str = None,
739
+ qargs: None | list = None,
740
+ decimals: None | int = None,
741
+ ) -> dict[str, float]:
742
+ """Helper Function for calculating the subsystem measurement probability dictionary.
743
+ When the targeted outcome_bitstring value is set, then only the single outcome_bitstring
744
+ probability will be calculated.
745
+
746
+ Args:
747
+ outcome_bitstring (None or str): targeted outcome bitstring
748
+ to perform a measurement calculation for, this will significantly
749
+ reduce the number of calculation performed (Default: None)
750
+ qargs (None or list): subsystems to return probabilities for,
751
+ if None return for all subsystems (Default: None).
752
+ decimals (None or int): the number of decimal places to round
753
+ values. If None no rounding is done (Default: None).
754
+
755
+ Returns:
756
+ dict: The measurement probabilities in dict (key) form.
757
+ """
758
+ if qargs is None:
759
+ qubits = range(self.clifford.num_qubits)
760
+ else:
761
+ qubits = qargs
762
+
763
+ outcome = ["X"] * len(qubits)
764
+ outcome_prob = 1.0
765
+ probs: dict[str, float] = {} # Probabilities dict to return with the measured values
766
+
767
+ self._get_probabilities(qubits, outcome, outcome_prob, probs, outcome_bitstring)
768
+
769
+ if decimals is not None:
770
+ for key, value in probs.items():
771
+ probs[key] = round(value, decimals)
772
+
773
+ return probs