qiskit 1.4.2__cp39-abi3-macosx_11_0_arm64.whl → 2.0.0__cp39-abi3-macosx_11_0_arm64.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 (459) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +3 -9
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/circuit/__init__.py +35 -10
  5. qiskit/circuit/{add_control.py → _add_control.py} +32 -12
  6. qiskit/circuit/_classical_resource_map.py +5 -3
  7. qiskit/circuit/barrier.py +3 -7
  8. qiskit/circuit/classical/expr/__init__.py +31 -3
  9. qiskit/circuit/classical/expr/constructors.py +236 -28
  10. qiskit/circuit/classical/expr/expr.py +104 -3
  11. qiskit/circuit/classical/expr/visitors.py +75 -0
  12. qiskit/circuit/classical/types/__init__.py +12 -8
  13. qiskit/circuit/classical/types/ordering.py +14 -7
  14. qiskit/circuit/classical/types/types.py +36 -0
  15. qiskit/circuit/commutation_checker.py +34 -7
  16. qiskit/circuit/controlflow/__init__.py +32 -1
  17. qiskit/circuit/controlflow/_builder_utils.py +9 -5
  18. qiskit/circuit/controlflow/box.py +163 -0
  19. qiskit/circuit/controlflow/break_loop.py +1 -1
  20. qiskit/circuit/controlflow/builder.py +139 -39
  21. qiskit/circuit/controlflow/continue_loop.py +1 -3
  22. qiskit/circuit/controlflow/control_flow.py +10 -0
  23. qiskit/circuit/controlflow/for_loop.py +2 -1
  24. qiskit/circuit/controlflow/if_else.py +3 -16
  25. qiskit/circuit/controlflow/switch_case.py +2 -8
  26. qiskit/circuit/controlflow/while_loop.py +2 -7
  27. qiskit/circuit/controlledgate.py +2 -4
  28. qiskit/circuit/delay.py +40 -11
  29. qiskit/circuit/duration.py +0 -15
  30. qiskit/circuit/gate.py +2 -4
  31. qiskit/circuit/instruction.py +2 -141
  32. qiskit/circuit/instructionset.py +7 -54
  33. qiskit/circuit/library/__init__.py +469 -154
  34. qiskit/circuit/library/arithmetic/__init__.py +16 -10
  35. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  36. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +2 -2
  37. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
  38. qiskit/circuit/library/arithmetic/exact_reciprocal.py +64 -21
  39. qiskit/circuit/library/arithmetic/integer_comparator.py +37 -80
  40. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +169 -2
  41. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +59 -5
  42. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +154 -6
  43. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +114 -4
  44. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +191 -15
  45. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +93 -39
  46. qiskit/circuit/library/arithmetic/quadratic_form.py +168 -2
  47. qiskit/circuit/library/arithmetic/weighted_adder.py +73 -1
  48. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  49. qiskit/circuit/library/blueprintcircuit.py +52 -16
  50. qiskit/circuit/library/data_preparation/initializer.py +1 -1
  51. qiskit/circuit/library/data_preparation/pauli_feature_map.py +4 -4
  52. qiskit/circuit/library/data_preparation/state_preparation.py +1 -1
  53. qiskit/circuit/library/generalized_gates/gms.py +1 -1
  54. qiskit/circuit/library/generalized_gates/isometry.py +1 -1
  55. qiskit/circuit/library/generalized_gates/pauli.py +1 -2
  56. qiskit/circuit/library/generalized_gates/uc.py +97 -7
  57. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +1 -1
  58. qiskit/circuit/library/generalized_gates/unitary.py +4 -2
  59. qiskit/circuit/library/graph_state.py +1 -0
  60. qiskit/circuit/library/hamiltonian_gate.py +1 -1
  61. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  62. qiskit/circuit/library/n_local/n_local.py +1 -1
  63. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  64. qiskit/circuit/library/overlap.py +2 -2
  65. qiskit/circuit/library/pauli_evolution.py +39 -24
  66. qiskit/circuit/library/phase_oracle.py +130 -51
  67. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  68. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  69. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  70. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  71. qiskit/circuit/library/standard_gates/h.py +4 -9
  72. qiskit/circuit/library/standard_gates/i.py +2 -2
  73. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  74. qiskit/circuit/library/standard_gates/p.py +15 -34
  75. qiskit/circuit/library/standard_gates/r.py +7 -10
  76. qiskit/circuit/library/standard_gates/rx.py +5 -15
  77. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  78. qiskit/circuit/library/standard_gates/ry.py +5 -17
  79. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  80. qiskit/circuit/library/standard_gates/rz.py +5 -17
  81. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  82. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  83. qiskit/circuit/library/standard_gates/s.py +6 -15
  84. qiskit/circuit/library/standard_gates/swap.py +4 -11
  85. qiskit/circuit/library/standard_gates/sx.py +7 -12
  86. qiskit/circuit/library/standard_gates/t.py +6 -7
  87. qiskit/circuit/library/standard_gates/u.py +2 -10
  88. qiskit/circuit/library/standard_gates/u1.py +5 -16
  89. qiskit/circuit/library/standard_gates/u2.py +2 -6
  90. qiskit/circuit/library/standard_gates/u3.py +3 -11
  91. qiskit/circuit/library/standard_gates/x.py +14 -62
  92. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  94. qiskit/circuit/library/standard_gates/y.py +4 -9
  95. qiskit/circuit/library/standard_gates/z.py +5 -15
  96. qiskit/circuit/measure.py +11 -2
  97. qiskit/circuit/parameterexpression.py +7 -1
  98. qiskit/circuit/quantumcircuit.py +890 -564
  99. qiskit/circuit/random/utils.py +12 -6
  100. qiskit/circuit/reset.py +5 -2
  101. qiskit/circuit/singleton.py +5 -11
  102. qiskit/circuit/store.py +0 -8
  103. qiskit/compiler/__init__.py +1 -7
  104. qiskit/compiler/transpiler.py +38 -196
  105. qiskit/converters/circuit_to_dag.py +6 -4
  106. qiskit/converters/circuit_to_dagdependency.py +0 -2
  107. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  108. qiskit/converters/circuit_to_gate.py +1 -1
  109. qiskit/converters/circuit_to_instruction.py +16 -29
  110. qiskit/converters/dag_to_circuit.py +7 -8
  111. qiskit/converters/dag_to_dagdependency.py +0 -1
  112. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  113. qiskit/converters/dagdependency_to_circuit.py +0 -6
  114. qiskit/converters/dagdependency_to_dag.py +0 -6
  115. qiskit/dagcircuit/collect_blocks.py +32 -20
  116. qiskit/dagcircuit/dagdependency.py +3 -37
  117. qiskit/dagcircuit/dagdependency_v2.py +5 -82
  118. qiskit/dagcircuit/dagnode.py +14 -2
  119. qiskit/passmanager/__init__.py +24 -6
  120. qiskit/passmanager/passmanager.py +26 -24
  121. qiskit/primitives/__init__.py +44 -35
  122. qiskit/primitives/backend_estimator_v2.py +102 -23
  123. qiskit/primitives/backend_sampler_v2.py +5 -20
  124. qiskit/primitives/base/__init__.py +4 -4
  125. qiskit/primitives/base/base_estimator.py +77 -82
  126. qiskit/primitives/base/base_primitive_job.py +2 -2
  127. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  128. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  129. qiskit/primitives/base/base_sampler.py +52 -60
  130. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  131. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  132. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  133. qiskit/primitives/containers/bindings_array.py +3 -1
  134. qiskit/primitives/containers/bit_array.py +23 -0
  135. qiskit/primitives/containers/data_bin.py +3 -1
  136. qiskit/primitives/containers/observables_array.py +19 -2
  137. qiskit/primitives/statevector_sampler.py +6 -8
  138. qiskit/primitives/utils.py +14 -189
  139. qiskit/providers/__init__.py +4 -130
  140. qiskit/providers/backend.py +11 -314
  141. qiskit/providers/basic_provider/__init__.py +3 -1
  142. qiskit/providers/basic_provider/basic_provider.py +29 -9
  143. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  144. qiskit/providers/exceptions.py +0 -33
  145. qiskit/providers/fake_provider/__init__.py +0 -37
  146. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  147. qiskit/qasm2/__init__.py +21 -6
  148. qiskit/qasm2/export.py +2 -10
  149. qiskit/qasm2/parse.py +11 -25
  150. qiskit/qasm3/__init__.py +5 -1
  151. qiskit/qasm3/ast.py +44 -0
  152. qiskit/qasm3/exporter.py +65 -27
  153. qiskit/qasm3/printer.py +35 -4
  154. qiskit/qpy/__init__.py +162 -19
  155. qiskit/qpy/binary_io/__init__.py +0 -1
  156. qiskit/qpy/binary_io/circuits.py +98 -130
  157. qiskit/qpy/binary_io/schedules.py +69 -439
  158. qiskit/qpy/binary_io/value.py +154 -31
  159. qiskit/qpy/common.py +10 -7
  160. qiskit/qpy/formats.py +41 -0
  161. qiskit/qpy/interface.py +34 -81
  162. qiskit/qpy/type_keys.py +58 -221
  163. qiskit/quantum_info/analysis/distance.py +3 -1
  164. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  165. qiskit/quantum_info/operators/operator.py +6 -2
  166. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  167. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  168. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  169. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  170. qiskit/quantum_info/states/densitymatrix.py +16 -6
  171. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  172. qiskit/quantum_info/states/statevector.py +16 -6
  173. qiskit/result/__init__.py +5 -17
  174. qiskit/result/models.py +18 -11
  175. qiskit/result/result.py +38 -134
  176. qiskit/result/sampled_expval.py +1 -2
  177. qiskit/result/utils.py +3 -4
  178. qiskit/synthesis/__init__.py +21 -1
  179. qiskit/synthesis/arithmetic/__init__.py +3 -1
  180. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  181. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  182. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  183. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  184. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  185. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  186. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  187. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  188. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  189. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  190. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  191. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  192. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  193. qiskit/synthesis/evolution/lie_trotter.py +10 -7
  194. qiskit/synthesis/evolution/product_formula.py +44 -35
  195. qiskit/synthesis/evolution/qdrift.py +17 -24
  196. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  197. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  198. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  199. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  200. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  201. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  202. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  203. qiskit/synthesis/two_qubit/__init__.py +1 -0
  204. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  205. qiskit/transpiler/__init__.py +32 -232
  206. qiskit/transpiler/basepasses.py +20 -51
  207. qiskit/transpiler/layout.py +1 -1
  208. qiskit/transpiler/passes/__init__.py +4 -40
  209. qiskit/transpiler/passes/basis/basis_translator.py +5 -4
  210. qiskit/transpiler/passes/basis/decompose.py +1 -15
  211. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  212. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  213. qiskit/transpiler/passes/layout/apply_layout.py +4 -0
  214. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  215. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +3 -4
  216. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  217. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  218. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  219. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  220. qiskit/transpiler/passes/optimization/__init__.py +2 -3
  221. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  222. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  223. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  224. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  225. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  226. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  227. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  228. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  229. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  230. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  231. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  232. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  233. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  234. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  235. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -0
  236. qiskit/transpiler/passes/routing/__init__.py +0 -1
  237. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  238. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  239. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  240. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  241. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  242. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  243. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  244. qiskit/transpiler/passes/scheduling/padding/base_padding.py +32 -4
  245. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +25 -63
  246. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +12 -4
  247. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  248. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  249. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  250. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +134 -62
  251. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  252. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  253. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  254. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  255. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  256. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  257. qiskit/transpiler/passes/utils/__init__.py +0 -1
  258. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  259. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  260. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  261. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  262. qiskit/transpiler/passmanager.py +13 -0
  263. qiskit/transpiler/passmanager_config.py +5 -81
  264. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  265. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  266. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +107 -322
  267. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  268. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  269. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  270. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  271. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  272. qiskit/transpiler/target.py +78 -524
  273. qiskit/user_config.py +8 -4
  274. qiskit/utils/__init__.py +13 -12
  275. qiskit/utils/deprecation.py +4 -112
  276. qiskit/utils/optionals.py +11 -4
  277. qiskit/utils/parallel.py +214 -87
  278. qiskit/utils/units.py +4 -1
  279. qiskit/visualization/__init__.py +3 -7
  280. qiskit/visualization/array.py +4 -1
  281. qiskit/visualization/bloch.py +1 -1
  282. qiskit/visualization/circuit/_utils.py +19 -19
  283. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  284. qiskit/visualization/circuit/matplotlib.py +13 -23
  285. qiskit/visualization/circuit/text.py +7 -3
  286. qiskit/visualization/counts_visualization.py +4 -0
  287. qiskit/visualization/dag_visualization.py +2 -1
  288. qiskit/visualization/gate_map.py +39 -154
  289. qiskit/visualization/library.py +4 -1
  290. qiskit/visualization/pass_manager_visualization.py +6 -2
  291. qiskit/visualization/state_visualization.py +19 -2
  292. qiskit/visualization/timeline/core.py +19 -13
  293. qiskit/visualization/timeline/interface.py +19 -18
  294. qiskit/visualization/timeline/plotters/matplotlib.py +4 -1
  295. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/METADATA +4 -3
  296. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/RECORD +300 -447
  297. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/WHEEL +2 -1
  298. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/entry_points.txt +8 -2
  299. qiskit/assembler/__init__.py +0 -42
  300. qiskit/assembler/assemble_circuits.py +0 -451
  301. qiskit/assembler/assemble_schedules.py +0 -367
  302. qiskit/assembler/disassemble.py +0 -310
  303. qiskit/assembler/run_config.py +0 -77
  304. qiskit/circuit/bit.py +0 -106
  305. qiskit/circuit/classicalfunction/__init__.py +0 -152
  306. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  307. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  308. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  309. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  310. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  311. qiskit/circuit/classicalfunction/types.py +0 -18
  312. qiskit/circuit/classicalfunction/utils.py +0 -91
  313. qiskit/circuit/classicalregister.py +0 -57
  314. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  315. qiskit/circuit/quantumregister.py +0 -75
  316. qiskit/circuit/register.py +0 -246
  317. qiskit/compiler/assembler.py +0 -689
  318. qiskit/compiler/scheduler.py +0 -109
  319. qiskit/compiler/sequencer.py +0 -71
  320. qiskit/primitives/backend_estimator.py +0 -486
  321. qiskit/primitives/backend_sampler.py +0 -222
  322. qiskit/primitives/estimator.py +0 -172
  323. qiskit/primitives/sampler.py +0 -162
  324. qiskit/providers/backend_compat.py +0 -507
  325. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  326. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  327. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  328. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  329. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  330. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  332. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  333. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  335. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  336. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  337. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  338. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  339. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  340. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  341. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  342. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  343. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  344. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  345. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  346. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  347. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  348. qiskit/providers/fake_provider/fake_1q.py +0 -91
  349. qiskit/providers/fake_provider/fake_backend.py +0 -165
  350. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  351. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  352. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  353. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  354. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  355. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  356. qiskit/providers/models/__init__.py +0 -89
  357. qiskit/providers/models/backendconfiguration.py +0 -1040
  358. qiskit/providers/models/backendproperties.py +0 -535
  359. qiskit/providers/models/backendstatus.py +0 -104
  360. qiskit/providers/models/jobstatus.py +0 -77
  361. qiskit/providers/models/pulsedefaults.py +0 -305
  362. qiskit/providers/provider.py +0 -95
  363. qiskit/pulse/__init__.py +0 -158
  364. qiskit/pulse/builder.py +0 -2262
  365. qiskit/pulse/calibration_entries.py +0 -381
  366. qiskit/pulse/channels.py +0 -227
  367. qiskit/pulse/configuration.py +0 -245
  368. qiskit/pulse/exceptions.py +0 -45
  369. qiskit/pulse/filters.py +0 -309
  370. qiskit/pulse/instruction_schedule_map.py +0 -424
  371. qiskit/pulse/instructions/__init__.py +0 -67
  372. qiskit/pulse/instructions/acquire.py +0 -150
  373. qiskit/pulse/instructions/delay.py +0 -71
  374. qiskit/pulse/instructions/directives.py +0 -154
  375. qiskit/pulse/instructions/frequency.py +0 -135
  376. qiskit/pulse/instructions/instruction.py +0 -270
  377. qiskit/pulse/instructions/phase.py +0 -152
  378. qiskit/pulse/instructions/play.py +0 -99
  379. qiskit/pulse/instructions/reference.py +0 -100
  380. qiskit/pulse/instructions/snapshot.py +0 -82
  381. qiskit/pulse/library/__init__.py +0 -97
  382. qiskit/pulse/library/continuous.py +0 -430
  383. qiskit/pulse/library/pulse.py +0 -148
  384. qiskit/pulse/library/samplers/__init__.py +0 -15
  385. qiskit/pulse/library/samplers/decorators.py +0 -295
  386. qiskit/pulse/library/samplers/strategies.py +0 -71
  387. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  388. qiskit/pulse/library/waveform.py +0 -136
  389. qiskit/pulse/macros.py +0 -262
  390. qiskit/pulse/parameter_manager.py +0 -445
  391. qiskit/pulse/parser.py +0 -314
  392. qiskit/pulse/reference_manager.py +0 -58
  393. qiskit/pulse/schedule.py +0 -1854
  394. qiskit/pulse/transforms/__init__.py +0 -106
  395. qiskit/pulse/transforms/alignments.py +0 -406
  396. qiskit/pulse/transforms/base_transforms.py +0 -71
  397. qiskit/pulse/transforms/canonicalization.py +0 -498
  398. qiskit/pulse/transforms/dag.py +0 -122
  399. qiskit/pulse/utils.py +0 -149
  400. qiskit/qobj/__init__.py +0 -75
  401. qiskit/qobj/common.py +0 -81
  402. qiskit/qobj/converters/__init__.py +0 -18
  403. qiskit/qobj/converters/lo_config.py +0 -177
  404. qiskit/qobj/converters/pulse_instruction.py +0 -897
  405. qiskit/qobj/pulse_qobj.py +0 -709
  406. qiskit/qobj/qasm_qobj.py +0 -708
  407. qiskit/qobj/utils.py +0 -46
  408. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  409. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  410. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  411. qiskit/result/mitigation/utils.py +0 -217
  412. qiskit/scheduler/__init__.py +0 -40
  413. qiskit/scheduler/config.py +0 -37
  414. qiskit/scheduler/lowering.py +0 -187
  415. qiskit/scheduler/methods/__init__.py +0 -15
  416. qiskit/scheduler/methods/basic.py +0 -140
  417. qiskit/scheduler/schedule_circuit.py +0 -69
  418. qiskit/scheduler/sequence.py +0 -104
  419. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  420. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  421. qiskit/transpiler/passes/calibration/builders.py +0 -20
  422. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  423. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  424. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  425. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  426. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  427. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  428. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  429. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  430. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  431. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  432. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  433. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  434. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  435. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  436. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  437. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  438. qiskit/utils/deprecate_pulse.py +0 -119
  439. qiskit/utils/multiprocessing.py +0 -56
  440. qiskit/visualization/pulse_v2/__init__.py +0 -21
  441. qiskit/visualization/pulse_v2/core.py +0 -901
  442. qiskit/visualization/pulse_v2/device_info.py +0 -173
  443. qiskit/visualization/pulse_v2/drawings.py +0 -253
  444. qiskit/visualization/pulse_v2/events.py +0 -254
  445. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  446. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  447. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  448. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  449. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  450. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  451. qiskit/visualization/pulse_v2/interface.py +0 -459
  452. qiskit/visualization/pulse_v2/layouts.py +0 -387
  453. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  454. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  455. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  456. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  457. qiskit/visualization/pulse_v2/types.py +0 -242
  458. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
  459. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/top_level.txt +0 -0
qiskit/qpy/type_keys.py CHANGED
@@ -30,6 +30,7 @@ from qiskit.circuit import (
30
30
  CASE_DEFAULT,
31
31
  Clbit,
32
32
  ClassicalRegister,
33
+ Duration,
33
34
  )
34
35
  from qiskit.circuit.annotated_operation import AnnotatedOperation, Modifier
35
36
  from qiskit.circuit.classical import expr, types
@@ -37,36 +38,6 @@ from qiskit.circuit.library import PauliEvolutionGate
37
38
  from qiskit.circuit.parameter import Parameter
38
39
  from qiskit.circuit.parameterexpression import ParameterExpression
39
40
  from qiskit.circuit.parametervector import ParameterVectorElement
40
- from qiskit.pulse.channels import (
41
- Channel,
42
- DriveChannel,
43
- MeasureChannel,
44
- ControlChannel,
45
- AcquireChannel,
46
- MemorySlot,
47
- RegisterSlot,
48
- )
49
- from qiskit.pulse.configuration import Discriminator, Kernel
50
- from qiskit.pulse.instructions import (
51
- Acquire,
52
- Play,
53
- Delay,
54
- SetFrequency,
55
- ShiftFrequency,
56
- SetPhase,
57
- ShiftPhase,
58
- RelativeBarrier,
59
- TimeBlockade,
60
- Reference,
61
- )
62
- from qiskit.pulse.library import Waveform, SymbolicPulse
63
- from qiskit.pulse.schedule import ScheduleBlock
64
- from qiskit.pulse.transforms.alignments import (
65
- AlignLeft,
66
- AlignRight,
67
- AlignSequential,
68
- AlignEquispaced,
69
- )
70
41
  from qiskit.qpy import exceptions
71
42
 
72
43
 
@@ -168,7 +139,7 @@ class Condition(IntEnum):
168
139
 
169
140
 
170
141
  class Container(TypeKeyBase):
171
- """Typle key enum for container-like object."""
142
+ """Type key enum for container-like object."""
172
143
 
173
144
  RANGE = b"r"
174
145
  TUPLE = b"t"
@@ -220,125 +191,13 @@ class CircuitInstruction(TypeKeyBase):
220
191
  raise NotImplementedError
221
192
 
222
193
 
223
- class ScheduleAlignment(TypeKeyBase):
224
- """Type key enum for schedule block alignment context object."""
225
-
226
- LEFT = b"l"
227
- RIGHT = b"r"
228
- SEQUENTIAL = b"s"
229
- EQUISPACED = b"e"
230
-
231
- # AlignFunc is not serializable due to the callable in context parameter
232
-
233
- @classmethod
234
- def assign(cls, obj):
235
- if isinstance(obj, AlignLeft):
236
- return cls.LEFT
237
- if isinstance(obj, AlignRight):
238
- return cls.RIGHT
239
- if isinstance(obj, AlignSequential):
240
- return cls.SEQUENTIAL
241
- if isinstance(obj, AlignEquispaced):
242
- return cls.EQUISPACED
243
-
244
- raise exceptions.QpyError(
245
- f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
246
- )
247
-
248
- @classmethod
249
- def retrieve(cls, type_key):
250
- if type_key == cls.LEFT:
251
- return AlignLeft
252
- if type_key == cls.RIGHT:
253
- return AlignRight
254
- if type_key == cls.SEQUENTIAL:
255
- return AlignSequential
256
- if type_key == cls.EQUISPACED:
257
- return AlignEquispaced
258
-
259
- raise exceptions.QpyError(
260
- f"A class corresponding to type key '{type_key}' is not found in {cls.__name__} namespace."
261
- )
262
-
263
-
264
- class ScheduleInstruction(TypeKeyBase):
265
- """Type key enum for schedule instruction object."""
266
-
267
- ACQUIRE = b"a"
268
- PLAY = b"p"
269
- DELAY = b"d"
270
- SET_FREQUENCY = b"f"
271
- SHIFT_FREQUENCY = b"g"
272
- SET_PHASE = b"q"
273
- SHIFT_PHASE = b"r"
274
- BARRIER = b"b"
275
- TIME_BLOCKADE = b"t"
276
- REFERENCE = b"y"
277
-
278
- # 's' is reserved by ScheduleBlock, i.e. block can be nested as an element.
279
- # Call instruction is not supported by QPY.
280
- # This instruction has been excluded from ScheduleBlock instructions with
281
- # qiskit-terra/#8005 and new instruction Reference will be added instead.
282
- # Call is only applied to Schedule which is not supported by QPY.
283
- # Also snapshot is not suppored because of its limited usecase.
284
-
285
- @classmethod
286
- def assign(cls, obj):
287
- if isinstance(obj, Acquire):
288
- return cls.ACQUIRE
289
- if isinstance(obj, Play):
290
- return cls.PLAY
291
- if isinstance(obj, Delay):
292
- return cls.DELAY
293
- if isinstance(obj, SetFrequency):
294
- return cls.SET_FREQUENCY
295
- if isinstance(obj, ShiftFrequency):
296
- return cls.SHIFT_FREQUENCY
297
- if isinstance(obj, SetPhase):
298
- return cls.SET_PHASE
299
- if isinstance(obj, ShiftPhase):
300
- return cls.SHIFT_PHASE
301
- if isinstance(obj, RelativeBarrier):
302
- return cls.BARRIER
303
- if isinstance(obj, TimeBlockade):
304
- return cls.TIME_BLOCKADE
305
- if isinstance(obj, Reference):
306
- return cls.REFERENCE
307
-
308
- raise exceptions.QpyError(
309
- f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
310
- )
311
-
312
- @classmethod
313
- def retrieve(cls, type_key):
314
- if type_key == cls.ACQUIRE:
315
- return Acquire
316
- if type_key == cls.PLAY:
317
- return Play
318
- if type_key == cls.DELAY:
319
- return Delay
320
- if type_key == cls.SET_FREQUENCY:
321
- return SetFrequency
322
- if type_key == cls.SHIFT_FREQUENCY:
323
- return ShiftFrequency
324
- if type_key == cls.SET_PHASE:
325
- return SetPhase
326
- if type_key == cls.SHIFT_PHASE:
327
- return ShiftPhase
328
- if type_key == cls.BARRIER:
329
- return RelativeBarrier
330
- if type_key == cls.TIME_BLOCKADE:
331
- return TimeBlockade
332
- if type_key == cls.REFERENCE:
333
- return Reference
334
-
335
- raise exceptions.QpyError(
336
- f"A class corresponding to type key '{type_key}' is not found in {cls.__name__} namespace."
337
- )
338
-
339
-
340
194
  class ScheduleOperand(TypeKeyBase):
341
- """Type key enum for schedule instruction operand object."""
195
+ """Type key enum for schedule instruction operand object.
196
+
197
+ Note: This class is kept post pulse-removal to allow reading of
198
+ legacy payloads containing pulse gates without breaking the entire
199
+ load flow.
200
+ """
342
201
 
343
202
  WAVEFORM = b"w"
344
203
  SYMBOLIC_PULSE = b"s"
@@ -353,92 +212,27 @@ class ScheduleOperand(TypeKeyBase):
353
212
  OPERAND_STR = b"o"
354
213
 
355
214
  @classmethod
356
- def assign(cls, obj):
357
- if isinstance(obj, Waveform):
358
- return cls.WAVEFORM
359
- if isinstance(obj, SymbolicPulse):
360
- return cls.SYMBOLIC_PULSE
361
- if isinstance(obj, Channel):
362
- return cls.CHANNEL
363
- if isinstance(obj, str):
364
- return cls.OPERAND_STR
365
- if isinstance(obj, Kernel):
366
- return cls.KERNEL
367
- if isinstance(obj, Discriminator):
368
- return cls.DISCRIMINATOR
369
-
370
- raise exceptions.QpyError(
371
- f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
372
- )
373
-
374
- @classmethod
375
- def retrieve(cls, type_key):
215
+ def assign(cls, _):
376
216
  raise NotImplementedError
377
217
 
378
-
379
- class ScheduleChannel(TypeKeyBase):
380
- """Type key enum for schedule channel object."""
381
-
382
- DRIVE = b"d"
383
- CONTROL = b"c"
384
- MEASURE = b"m"
385
- ACQURE = b"a"
386
- MEM_SLOT = b"e"
387
- REG_SLOT = b"r"
388
-
389
- # SnapShot channel is not defined because of its limited usecase.
390
-
391
- @classmethod
392
- def assign(cls, obj):
393
- if isinstance(obj, DriveChannel):
394
- return cls.DRIVE
395
- if isinstance(obj, ControlChannel):
396
- return cls.CONTROL
397
- if isinstance(obj, MeasureChannel):
398
- return cls.MEASURE
399
- if isinstance(obj, AcquireChannel):
400
- return cls.ACQURE
401
- if isinstance(obj, MemorySlot):
402
- return cls.MEM_SLOT
403
- if isinstance(obj, RegisterSlot):
404
- return cls.REG_SLOT
405
-
406
- raise exceptions.QpyError(
407
- f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
408
- )
409
-
410
218
  @classmethod
411
- def retrieve(cls, type_key):
412
- if type_key == cls.DRIVE:
413
- return DriveChannel
414
- if type_key == cls.CONTROL:
415
- return ControlChannel
416
- if type_key == cls.MEASURE:
417
- return MeasureChannel
418
- if type_key == cls.ACQURE:
419
- return AcquireChannel
420
- if type_key == cls.MEM_SLOT:
421
- return MemorySlot
422
- if type_key == cls.REG_SLOT:
423
- return RegisterSlot
424
-
425
- raise exceptions.QpyError(
426
- f"A class corresponding to type key '{type_key}' is not found in {cls.__name__} namespace."
427
- )
219
+ def retrieve(cls, _):
220
+ raise NotImplementedError
428
221
 
429
222
 
430
223
  class Program(TypeKeyBase):
431
- """Typle key enum for program that QPY supports."""
224
+ """Type key enum for program that QPY supports."""
432
225
 
433
226
  CIRCUIT = b"q"
227
+ # This is left for backward compatibility, for identifying payloads of type `ScheduleBlock`
228
+ # and raising accordingly. `ScheduleBlock` support has been removed in Qiskit 2.0 as part
229
+ # of the pulse package removal in that version.
434
230
  SCHEDULE_BLOCK = b"s"
435
231
 
436
232
  @classmethod
437
233
  def assign(cls, obj):
438
234
  if isinstance(obj, QuantumCircuit):
439
235
  return cls.CIRCUIT
440
- if isinstance(obj, ScheduleBlock):
441
- return cls.SCHEDULE_BLOCK
442
236
 
443
237
  raise exceptions.QpyError(
444
238
  f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
@@ -453,6 +247,7 @@ class Expression(TypeKeyBase):
453
247
  """Type keys for the ``EXPRESSION`` QPY item."""
454
248
 
455
249
  VAR = b"x"
250
+ STRETCH = b"s"
456
251
  VALUE = b"v"
457
252
  CAST = b"c"
458
253
  UNARY = b"u"
@@ -479,6 +274,8 @@ class ExprVarDeclaration(TypeKeyBase):
479
274
  INPUT = b"I"
480
275
  CAPTURE = b"C"
481
276
  LOCAL = b"L"
277
+ STRETCH_CAPTURE = b"A"
278
+ STRETCH_LOCAL = b"O"
482
279
 
483
280
  @classmethod
484
281
  def assign(cls, obj):
@@ -494,6 +291,8 @@ class ExprType(TypeKeyBase):
494
291
 
495
292
  BOOL = b"b"
496
293
  UINT = b"u"
294
+ FLOAT = b"f"
295
+ DURATION = b"d"
497
296
 
498
297
  @classmethod
499
298
  def assign(cls, obj):
@@ -538,6 +337,8 @@ class ExprValue(TypeKeyBase):
538
337
 
539
338
  BOOL = b"b"
540
339
  INT = b"i"
340
+ FLOAT = b"f"
341
+ DURATION = b"t"
541
342
 
542
343
  @classmethod
543
344
  def assign(cls, obj):
@@ -545,6 +346,42 @@ class ExprValue(TypeKeyBase):
545
346
  return cls.BOOL
546
347
  if isinstance(obj, int):
547
348
  return cls.INT
349
+ if isinstance(obj, float):
350
+ return cls.FLOAT
351
+ if isinstance(obj, Duration):
352
+ return cls.DURATION
353
+ raise exceptions.QpyError(
354
+ f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
355
+ )
356
+
357
+ @classmethod
358
+ def retrieve(cls, type_key):
359
+ raise NotImplementedError
360
+
361
+
362
+ class CircuitDuration(TypeKeyBase):
363
+ """Type keys for the ``DURATION`` QPY item."""
364
+
365
+ DT = b"t"
366
+ NS = b"n"
367
+ US = b"u"
368
+ MS = b"m"
369
+ S = b"s"
370
+
371
+ @classmethod
372
+ def assign(cls, obj):
373
+ if isinstance(obj, Duration):
374
+ unit = obj.unit()
375
+ if unit == "dt":
376
+ return cls.DT
377
+ if unit == "ns":
378
+ return cls.NS
379
+ if unit == "us":
380
+ return cls.US
381
+ if unit == "ms":
382
+ return cls.MS
383
+ if unit == "s":
384
+ return cls.S
548
385
  raise exceptions.QpyError(
549
386
  f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
550
387
  )
@@ -74,7 +74,9 @@ def hellinger_fidelity(dist_p: dict, dist_q: dict) -> float:
74
74
 
75
75
  Example:
76
76
 
77
- .. code-block::
77
+ .. plot::
78
+ :include-source:
79
+ :nofigs:
78
80
 
79
81
  from qiskit import QuantumCircuit
80
82
  from qiskit.quantum_info.analysis import hellinger_fidelity
@@ -46,7 +46,9 @@ class CNOTDihedral(BaseOperator, AdjointMixin):
46
46
  The phase polynomial is a polynomial of degree at most 3,
47
47
  in :math:`N` variables, whose coefficients are in the ring Z_8 with 8 elements.
48
48
 
49
- .. code-block::
49
+ .. plot::
50
+ :include-source:
51
+ :nofigs:
50
52
 
51
53
  from qiskit import QuantumCircuit
52
54
  from qiskit.quantum_info import CNOTDihedral
@@ -61,7 +61,9 @@ class Operator(LinearOp):
61
61
  :math:`|\psi\rangle=|0\rangle (\rho = |0\rangle\langle 0|)` changes it to the
62
62
  one state :math:`|\psi\rangle=|1\rangle (\rho = |1\rangle\langle 1|)`:
63
63
 
64
- .. code-block:: python
64
+ .. plot::
65
+ :include-source:
66
+ :nofigs:
65
67
 
66
68
  >>> import numpy as np
67
69
  >>> from qiskit.quantum_info import Operator
@@ -204,6 +206,8 @@ class Operator(LinearOp):
204
206
 
205
207
  Raises:
206
208
  ValueError: when an invalid output method is selected.
209
+ MissingOptionalLibrary: If SymPy isn't installed and ``'latex'`` or
210
+ ``'latex_source'`` is selected for ``output``.
207
211
 
208
212
  """
209
213
  # pylint: disable=cyclic-import
@@ -236,7 +240,7 @@ class Operator(LinearOp):
236
240
  def _ipython_display_(self):
237
241
  out = self.draw()
238
242
  if isinstance(out, str):
239
- print(out)
243
+ print(out) # pylint: disable=bad-builtin
240
244
  else:
241
245
  from IPython.display import display
242
246
 
@@ -72,7 +72,9 @@ class Clifford(BaseOperator, AdjointMixin, Operation):
72
72
  be obtained by calling the :meth:`to_dict` method. This representation is
73
73
  also used if a Clifford object is printed as in the following example
74
74
 
75
- .. code-block::
75
+ .. plot::
76
+ :include-source:
77
+ :nofigs:
76
78
 
77
79
  from qiskit import QuantumCircuit
78
80
  from qiskit.quantum_info import Clifford
@@ -142,7 +142,9 @@ class Pauli(BasePauli):
142
142
 
143
143
  For example
144
144
 
145
- .. code-block:: python
145
+ .. plot::
146
+ :include-source:
147
+ :nofigs:
146
148
 
147
149
  from qiskit.quantum_info import Pauli
148
150
 
@@ -583,7 +585,7 @@ class Pauli(BasePauli):
583
585
  other (Pauli or Clifford or QuantumCircuit): The Clifford operator to evolve by.
584
586
  qargs (list): a list of qubits to apply the Clifford to.
585
587
  frame (string): ``'h'`` for Heisenberg (default) or ``'s'`` for
586
- Schrödinger framework.
588
+ Schrödinger framework.
587
589
 
588
590
  Returns:
589
591
  Pauli: the Pauli :math:`C^\dagger.P.C` (Heisenberg picture)
@@ -54,7 +54,10 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
54
54
 
55
55
  For example,
56
56
 
57
- .. code-block::
57
+ .. plot::
58
+ :include-source:
59
+ :nofigs:
60
+ :context: reset
58
61
 
59
62
  import numpy as np
60
63
 
@@ -93,7 +96,10 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
93
96
  operator which accepts integer, lists, or slices for selecting subsets
94
97
  of PauliList. If integer is given, it returns Pauli not PauliList.
95
98
 
96
- .. code-block::
99
+ .. plot::
100
+ :include-source:
101
+ :nofigs:
102
+ :context:
97
103
 
98
104
  pauli_list = PauliList(["XX", "ZZ", "IZ"])
99
105
  print("Integer: ", repr(pauli_list[1]))
@@ -542,7 +548,9 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
542
548
 
543
549
  Consider sorting all a random ordering of all 2-qubit Paulis
544
550
 
545
- .. code-block::
551
+ .. plot::
552
+ :include-source:
553
+ :nofigs:
546
554
 
547
555
  from numpy.random import shuffle
548
556
  from qiskit.quantum_info.operators import PauliList
@@ -593,7 +601,9 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
593
601
 
594
602
  **Example**
595
603
 
596
- .. code-block::
604
+ .. plot::
605
+ :include-source:
606
+ :nofigs:
597
607
 
598
608
  from qiskit.quantum_info.operators import PauliList
599
609
 
@@ -1214,7 +1224,9 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
1214
1224
  qubit_wise (bool): whether the commutation rule is applied to the whole operator,
1215
1225
  or on a per-qubit basis. For example:
1216
1226
 
1217
- .. code-block:: python
1227
+ .. plot::
1228
+ :include-source:
1229
+ :nofigs:
1218
1230
 
1219
1231
  >>> from qiskit.quantum_info import PauliList
1220
1232
  >>> op = PauliList(["XX", "YY", "IZ", "ZZ"])
@@ -30,6 +30,7 @@ from qiskit._accelerate.sparse_pauli_op import (
30
30
  to_matrix_sparse,
31
31
  unordered_unique,
32
32
  )
33
+ from qiskit._accelerate.sparse_observable import SparseObservable
33
34
  from qiskit.circuit.parameter import Parameter
34
35
  from qiskit.circuit.parameterexpression import ParameterExpression
35
36
  from qiskit.circuit.parametertable import ParameterView
@@ -69,7 +70,9 @@ class SparsePauliOp(LinearOp):
69
70
  configure this by passing ``np.ndarray`` with a different dtype. For example, a parameterized
70
71
  :class:`SparsePauliOp` can be made as follows:
71
72
 
72
- .. code-block:: python
73
+ .. plot::
74
+ :include-source:
75
+ :nofigs:
73
76
 
74
77
  >>> import numpy as np
75
78
  >>> from qiskit.circuit import ParameterVector
@@ -539,7 +542,9 @@ class SparsePauliOp(LinearOp):
539
542
 
540
543
  Here is an example of how to use SparsePauliOp argsort.
541
544
 
542
- .. code-block::
545
+ .. plot::
546
+ :include-source:
547
+ :nofigs:
543
548
 
544
549
  import numpy as np
545
550
  from qiskit.quantum_info import SparsePauliOp
@@ -608,7 +613,9 @@ class SparsePauliOp(LinearOp):
608
613
 
609
614
  Here is an example of how to use SparsePauliOp sort.
610
615
 
611
- .. code-block::
616
+ .. plot::
617
+ :include-source:
618
+ :nofigs:
612
619
 
613
620
  import numpy as np
614
621
  from qiskit.quantum_info import SparsePauliOp
@@ -801,7 +808,9 @@ class SparsePauliOp(LinearOp):
801
808
 
802
809
  can be constructed as
803
810
 
804
- .. code-block:: python
811
+ .. plot::
812
+ :include-source:
813
+ :nofigs:
805
814
 
806
815
  from qiskit.quantum_info import SparsePauliOp
807
816
 
@@ -867,7 +876,9 @@ class SparsePauliOp(LinearOp):
867
876
 
868
877
  can be constructed as
869
878
 
870
- .. code-block:: python
879
+ .. plot::
880
+ :include-source:
881
+ :nofigs:
871
882
 
872
883
  from qiskit.quantum_info import SparsePauliOp
873
884
 
@@ -919,6 +930,27 @@ class SparsePauliOp(LinearOp):
919
930
  paulis = PauliList(labels)
920
931
  return SparsePauliOp(paulis, coeffs, copy=False)
921
932
 
933
+ @staticmethod
934
+ def from_sparse_observable(obs: SparseObservable) -> SparsePauliOp:
935
+ r"""Initialize from a :class:`.SparseObservable`.
936
+
937
+ .. warning::
938
+
939
+ A :class:`.SparseObservable` can efficiently represent eigenstate projectors
940
+ (such as :math:`|0\langle\rangle 0|`), but a :class:`.SparsePauliOp` **cannot**.
941
+ If the input ``obs`` has :math:`n` single-qubit projectors, the resulting
942
+ :class:`.SparsePauliOp` will use :math:`2^n` terms, which is an exponentially
943
+ expensive representation that can quickly run out of memory.
944
+
945
+ Args:
946
+ obs: The :class:`.SparseObservable` to convert.
947
+
948
+ Returns:
949
+ A :class:`.SparsePauliOp` version of the observable.
950
+ """
951
+ as_sparse_list = obs.as_paulis().to_sparse_list()
952
+ return SparsePauliOp.from_sparse_list(as_sparse_list, obs.num_qubits)
953
+
922
954
  def to_list(self, array: bool = False):
923
955
  """Convert to a list Pauli string labels and coefficients.
924
956
 
@@ -1072,7 +1104,9 @@ class SparsePauliOp(LinearOp):
1072
1104
  qubit_wise (bool): whether the commutation rule is applied to the whole operator,
1073
1105
  or on a per-qubit basis. For example:
1074
1106
 
1075
- .. code-block:: python
1107
+ .. plot::
1108
+ :include-source:
1109
+ :nofigs:
1076
1110
 
1077
1111
  >>> from qiskit.quantum_info import SparsePauliOp
1078
1112
  >>> op = SparsePauliOp.from_list([("XX", 2), ("YY", 1), ("IZ",2j), ("ZZ",1j)])
@@ -180,7 +180,7 @@ class DensityMatrix(QuantumState, TolerancesMixin):
180
180
  def _ipython_display_(self):
181
181
  out = self.draw()
182
182
  if isinstance(out, str):
183
- print(out)
183
+ print(out) # pylint: disable=bad-builtin
184
184
  else:
185
185
  from IPython.display import display
186
186
 
@@ -443,7 +443,9 @@ class DensityMatrix(QuantumState, TolerancesMixin):
443
443
  with :math:`\\rho_1=|+\\rangle\\!\\langle+|`,
444
444
  :math:`\\rho_0=|0\\rangle\\!\\langle0|`.
445
445
 
446
- .. code-block::
446
+ .. plot::
447
+ :include-source:
448
+ :nofigs:
447
449
 
448
450
  from qiskit.quantum_info import DensityMatrix
449
451
 
@@ -470,7 +472,9 @@ class DensityMatrix(QuantumState, TolerancesMixin):
470
472
  We can also permute the order of qubits in the ``qargs`` list
471
473
  to change the qubit position in the probabilities output
472
474
 
473
- .. code-block::
475
+ .. plot::
476
+ :include-source:
477
+ :nofigs:
474
478
 
475
479
  from qiskit.quantum_info import DensityMatrix
476
480
 
@@ -649,7 +653,9 @@ class DensityMatrix(QuantumState, TolerancesMixin):
649
653
  The ket-form of a 2-qubit density matrix
650
654
  :math:`rho = |-\rangle\!\langle -|\otimes |0\rangle\!\langle 0|`
651
655
 
652
- .. code-block::
656
+ .. plot::
657
+ :include-source:
658
+ :nofigs:
653
659
 
654
660
  from qiskit.quantum_info import DensityMatrix
655
661
 
@@ -668,7 +674,9 @@ class DensityMatrix(QuantumState, TolerancesMixin):
668
674
  For non-qubit subsystems the integer range can go from 0 to 9. For
669
675
  example in a qutrit system
670
676
 
671
- .. code-block::
677
+ .. plot::
678
+ :include-source:
679
+ :nofigs:
672
680
 
673
681
  import numpy as np
674
682
  from qiskit.quantum_info import DensityMatrix
@@ -689,7 +697,9 @@ class DensityMatrix(QuantumState, TolerancesMixin):
689
697
  following example is for a 20-dimensional system consisting of
690
698
  a qubit and 10-dimensional qudit.
691
699
 
692
- .. code-block::
700
+ .. plot::
701
+ :include-source:
702
+ :nofigs:
693
703
 
694
704
  import numpy as np
695
705
  from qiskit.quantum_info import DensityMatrix