qiskit 1.4.1__cp39-abi3-win_amd64.whl → 2.0.0rc1__cp39-abi3-win_amd64.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 (456) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +2 -5
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/circuit/__init__.py +24 -5
  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 +248 -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 +34 -5
  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/hamiltonian_gate.py +1 -1
  60. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  61. qiskit/circuit/library/n_local/n_local.py +1 -1
  62. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  63. qiskit/circuit/library/overlap.py +2 -2
  64. qiskit/circuit/library/pauli_evolution.py +39 -24
  65. qiskit/circuit/library/phase_oracle.py +130 -51
  66. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  67. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  68. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  69. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  70. qiskit/circuit/library/standard_gates/h.py +4 -9
  71. qiskit/circuit/library/standard_gates/i.py +2 -2
  72. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  73. qiskit/circuit/library/standard_gates/p.py +15 -34
  74. qiskit/circuit/library/standard_gates/r.py +2 -6
  75. qiskit/circuit/library/standard_gates/rx.py +5 -15
  76. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  77. qiskit/circuit/library/standard_gates/ry.py +5 -17
  78. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  79. qiskit/circuit/library/standard_gates/rz.py +5 -17
  80. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  81. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  82. qiskit/circuit/library/standard_gates/s.py +6 -15
  83. qiskit/circuit/library/standard_gates/swap.py +4 -11
  84. qiskit/circuit/library/standard_gates/sx.py +7 -12
  85. qiskit/circuit/library/standard_gates/t.py +6 -7
  86. qiskit/circuit/library/standard_gates/u.py +2 -10
  87. qiskit/circuit/library/standard_gates/u1.py +5 -16
  88. qiskit/circuit/library/standard_gates/u2.py +2 -6
  89. qiskit/circuit/library/standard_gates/u3.py +3 -11
  90. qiskit/circuit/library/standard_gates/x.py +13 -60
  91. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  92. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/y.py +4 -9
  94. qiskit/circuit/library/standard_gates/z.py +5 -15
  95. qiskit/circuit/measure.py +11 -2
  96. qiskit/circuit/parameterexpression.py +4 -0
  97. qiskit/circuit/quantumcircuit.py +881 -555
  98. qiskit/circuit/random/utils.py +12 -6
  99. qiskit/circuit/reset.py +5 -2
  100. qiskit/circuit/singleton.py +5 -11
  101. qiskit/circuit/store.py +0 -8
  102. qiskit/compiler/__init__.py +1 -7
  103. qiskit/compiler/transpiler.py +38 -196
  104. qiskit/converters/circuit_to_dag.py +4 -2
  105. qiskit/converters/circuit_to_dagdependency.py +0 -2
  106. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  107. qiskit/converters/circuit_to_gate.py +1 -1
  108. qiskit/converters/circuit_to_instruction.py +16 -29
  109. qiskit/converters/dag_to_circuit.py +5 -5
  110. qiskit/converters/dag_to_dagdependency.py +0 -1
  111. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  112. qiskit/converters/dagdependency_to_circuit.py +0 -6
  113. qiskit/converters/dagdependency_to_dag.py +0 -6
  114. qiskit/dagcircuit/collect_blocks.py +32 -20
  115. qiskit/dagcircuit/dagdependency.py +3 -37
  116. qiskit/dagcircuit/dagdependency_v2.py +2 -80
  117. qiskit/dagcircuit/dagnode.py +14 -2
  118. qiskit/passmanager/__init__.py +24 -6
  119. qiskit/passmanager/passmanager.py +26 -24
  120. qiskit/primitives/__init__.py +44 -35
  121. qiskit/primitives/backend_estimator_v2.py +102 -23
  122. qiskit/primitives/backend_sampler_v2.py +5 -20
  123. qiskit/primitives/base/__init__.py +4 -4
  124. qiskit/primitives/base/base_estimator.py +77 -82
  125. qiskit/primitives/base/base_primitive_job.py +2 -2
  126. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  127. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  128. qiskit/primitives/base/base_sampler.py +52 -60
  129. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  130. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  131. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  132. qiskit/primitives/containers/bindings_array.py +3 -1
  133. qiskit/primitives/containers/bit_array.py +23 -0
  134. qiskit/primitives/containers/data_bin.py +3 -1
  135. qiskit/primitives/containers/observables_array.py +19 -2
  136. qiskit/primitives/statevector_sampler.py +6 -8
  137. qiskit/primitives/utils.py +14 -189
  138. qiskit/providers/__init__.py +4 -130
  139. qiskit/providers/backend.py +11 -314
  140. qiskit/providers/basic_provider/__init__.py +3 -1
  141. qiskit/providers/basic_provider/basic_provider.py +29 -9
  142. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  143. qiskit/providers/exceptions.py +0 -33
  144. qiskit/providers/fake_provider/__init__.py +0 -37
  145. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  146. qiskit/qasm2/__init__.py +21 -6
  147. qiskit/qasm2/export.py +2 -10
  148. qiskit/qasm2/parse.py +11 -25
  149. qiskit/qasm3/__init__.py +5 -1
  150. qiskit/qasm3/ast.py +44 -0
  151. qiskit/qasm3/exporter.py +65 -27
  152. qiskit/qasm3/printer.py +35 -4
  153. qiskit/qpy/__init__.py +141 -19
  154. qiskit/qpy/binary_io/__init__.py +0 -1
  155. qiskit/qpy/binary_io/circuits.py +91 -116
  156. qiskit/qpy/binary_io/schedules.py +61 -388
  157. qiskit/qpy/binary_io/value.py +154 -28
  158. qiskit/qpy/common.py +10 -7
  159. qiskit/qpy/formats.py +41 -0
  160. qiskit/qpy/interface.py +29 -62
  161. qiskit/qpy/type_keys.py +58 -221
  162. qiskit/quantum_info/analysis/distance.py +3 -1
  163. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  164. qiskit/quantum_info/operators/operator.py +6 -2
  165. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  166. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  167. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  168. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  169. qiskit/quantum_info/states/densitymatrix.py +16 -6
  170. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  171. qiskit/quantum_info/states/statevector.py +16 -6
  172. qiskit/result/__init__.py +5 -17
  173. qiskit/result/models.py +18 -10
  174. qiskit/result/result.py +28 -126
  175. qiskit/result/sampled_expval.py +1 -2
  176. qiskit/result/utils.py +3 -4
  177. qiskit/synthesis/__init__.py +21 -1
  178. qiskit/synthesis/arithmetic/__init__.py +3 -1
  179. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  180. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  181. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  182. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  183. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  184. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  185. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  186. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  187. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  188. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  189. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  190. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  191. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  192. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -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 +2 -40
  209. qiskit/transpiler/passes/basis/basis_translator.py +4 -3
  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 +4 -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 +1 -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 +30 -2
  245. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -58
  246. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +11 -3
  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 +127 -59
  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 +101 -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 +67 -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/dag_visualization.py +2 -1
  287. qiskit/visualization/gate_map.py +39 -154
  288. qiskit/visualization/pass_manager_visualization.py +6 -2
  289. qiskit/visualization/state_visualization.py +6 -0
  290. qiskit/visualization/timeline/core.py +18 -12
  291. qiskit/visualization/timeline/interface.py +19 -18
  292. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/METADATA +2 -2
  293. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/RECORD +297 -444
  294. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/WHEEL +1 -1
  295. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/entry_points.txt +8 -2
  296. qiskit/assembler/__init__.py +0 -42
  297. qiskit/assembler/assemble_circuits.py +0 -451
  298. qiskit/assembler/assemble_schedules.py +0 -367
  299. qiskit/assembler/disassemble.py +0 -310
  300. qiskit/assembler/run_config.py +0 -77
  301. qiskit/circuit/bit.py +0 -106
  302. qiskit/circuit/classicalfunction/__init__.py +0 -152
  303. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  304. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  305. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  306. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  307. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  308. qiskit/circuit/classicalfunction/types.py +0 -18
  309. qiskit/circuit/classicalfunction/utils.py +0 -91
  310. qiskit/circuit/classicalregister.py +0 -57
  311. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  312. qiskit/circuit/quantumregister.py +0 -75
  313. qiskit/circuit/register.py +0 -246
  314. qiskit/compiler/assembler.py +0 -689
  315. qiskit/compiler/scheduler.py +0 -109
  316. qiskit/compiler/sequencer.py +0 -71
  317. qiskit/primitives/backend_estimator.py +0 -486
  318. qiskit/primitives/backend_sampler.py +0 -222
  319. qiskit/primitives/estimator.py +0 -172
  320. qiskit/primitives/sampler.py +0 -162
  321. qiskit/providers/backend_compat.py +0 -507
  322. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  323. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  324. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  325. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  326. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  327. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  328. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  329. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  330. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  332. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  333. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  335. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  336. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  337. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  338. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  339. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  341. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  342. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  343. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  344. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  345. qiskit/providers/fake_provider/fake_1q.py +0 -91
  346. qiskit/providers/fake_provider/fake_backend.py +0 -165
  347. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  348. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  349. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  350. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  351. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  352. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  353. qiskit/providers/models/__init__.py +0 -89
  354. qiskit/providers/models/backendconfiguration.py +0 -1040
  355. qiskit/providers/models/backendproperties.py +0 -535
  356. qiskit/providers/models/backendstatus.py +0 -104
  357. qiskit/providers/models/jobstatus.py +0 -77
  358. qiskit/providers/models/pulsedefaults.py +0 -305
  359. qiskit/providers/provider.py +0 -95
  360. qiskit/pulse/__init__.py +0 -158
  361. qiskit/pulse/builder.py +0 -2262
  362. qiskit/pulse/calibration_entries.py +0 -381
  363. qiskit/pulse/channels.py +0 -227
  364. qiskit/pulse/configuration.py +0 -245
  365. qiskit/pulse/exceptions.py +0 -45
  366. qiskit/pulse/filters.py +0 -309
  367. qiskit/pulse/instruction_schedule_map.py +0 -424
  368. qiskit/pulse/instructions/__init__.py +0 -67
  369. qiskit/pulse/instructions/acquire.py +0 -150
  370. qiskit/pulse/instructions/delay.py +0 -71
  371. qiskit/pulse/instructions/directives.py +0 -154
  372. qiskit/pulse/instructions/frequency.py +0 -135
  373. qiskit/pulse/instructions/instruction.py +0 -270
  374. qiskit/pulse/instructions/phase.py +0 -152
  375. qiskit/pulse/instructions/play.py +0 -99
  376. qiskit/pulse/instructions/reference.py +0 -100
  377. qiskit/pulse/instructions/snapshot.py +0 -82
  378. qiskit/pulse/library/__init__.py +0 -97
  379. qiskit/pulse/library/continuous.py +0 -430
  380. qiskit/pulse/library/pulse.py +0 -148
  381. qiskit/pulse/library/samplers/__init__.py +0 -15
  382. qiskit/pulse/library/samplers/decorators.py +0 -295
  383. qiskit/pulse/library/samplers/strategies.py +0 -71
  384. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  385. qiskit/pulse/library/waveform.py +0 -136
  386. qiskit/pulse/macros.py +0 -262
  387. qiskit/pulse/parameter_manager.py +0 -445
  388. qiskit/pulse/parser.py +0 -314
  389. qiskit/pulse/reference_manager.py +0 -58
  390. qiskit/pulse/schedule.py +0 -1854
  391. qiskit/pulse/transforms/__init__.py +0 -106
  392. qiskit/pulse/transforms/alignments.py +0 -406
  393. qiskit/pulse/transforms/base_transforms.py +0 -71
  394. qiskit/pulse/transforms/canonicalization.py +0 -498
  395. qiskit/pulse/transforms/dag.py +0 -122
  396. qiskit/pulse/utils.py +0 -149
  397. qiskit/qobj/__init__.py +0 -75
  398. qiskit/qobj/common.py +0 -81
  399. qiskit/qobj/converters/__init__.py +0 -18
  400. qiskit/qobj/converters/lo_config.py +0 -177
  401. qiskit/qobj/converters/pulse_instruction.py +0 -897
  402. qiskit/qobj/pulse_qobj.py +0 -709
  403. qiskit/qobj/qasm_qobj.py +0 -708
  404. qiskit/qobj/utils.py +0 -46
  405. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  406. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  407. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  408. qiskit/result/mitigation/utils.py +0 -217
  409. qiskit/scheduler/__init__.py +0 -40
  410. qiskit/scheduler/config.py +0 -37
  411. qiskit/scheduler/lowering.py +0 -187
  412. qiskit/scheduler/methods/__init__.py +0 -15
  413. qiskit/scheduler/methods/basic.py +0 -140
  414. qiskit/scheduler/schedule_circuit.py +0 -69
  415. qiskit/scheduler/sequence.py +0 -104
  416. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  417. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  418. qiskit/transpiler/passes/calibration/builders.py +0 -20
  419. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  420. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  421. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  422. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  423. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  424. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  425. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  426. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  427. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  428. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  429. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  430. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  431. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  432. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  433. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  434. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  435. qiskit/utils/deprecate_pulse.py +0 -119
  436. qiskit/utils/multiprocessing.py +0 -56
  437. qiskit/visualization/pulse_v2/__init__.py +0 -21
  438. qiskit/visualization/pulse_v2/core.py +0 -901
  439. qiskit/visualization/pulse_v2/device_info.py +0 -173
  440. qiskit/visualization/pulse_v2/drawings.py +0 -253
  441. qiskit/visualization/pulse_v2/events.py +0 -254
  442. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  443. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  444. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  445. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  446. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  447. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  448. qiskit/visualization/pulse_v2/interface.py +0 -459
  449. qiskit/visualization/pulse_v2/layouts.py +0 -387
  450. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  451. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  452. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  453. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  454. qiskit/visualization/pulse_v2/types.py +0 -242
  455. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/LICENSE.txt +0 -0
  456. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.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