qiskit 1.4.1__cp39-abi3-win_amd64.whl → 2.0.0__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 (462) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +3 -9
  3. qiskit/_accelerate.pyd +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 +11 -0
  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/circuit/tools/pi_check.py +3 -0
  104. qiskit/compiler/__init__.py +1 -7
  105. qiskit/compiler/transpiler.py +38 -196
  106. qiskit/converters/circuit_to_dag.py +6 -4
  107. qiskit/converters/circuit_to_dagdependency.py +0 -2
  108. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  109. qiskit/converters/circuit_to_gate.py +1 -1
  110. qiskit/converters/circuit_to_instruction.py +16 -29
  111. qiskit/converters/dag_to_circuit.py +7 -8
  112. qiskit/converters/dag_to_dagdependency.py +0 -1
  113. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  114. qiskit/converters/dagdependency_to_circuit.py +0 -6
  115. qiskit/converters/dagdependency_to_dag.py +0 -6
  116. qiskit/dagcircuit/collect_blocks.py +32 -20
  117. qiskit/dagcircuit/dagdependency.py +3 -37
  118. qiskit/dagcircuit/dagdependency_v2.py +5 -82
  119. qiskit/dagcircuit/dagnode.py +14 -2
  120. qiskit/passmanager/__init__.py +24 -6
  121. qiskit/passmanager/passmanager.py +26 -24
  122. qiskit/primitives/__init__.py +44 -35
  123. qiskit/primitives/backend_estimator_v2.py +102 -23
  124. qiskit/primitives/backend_sampler_v2.py +5 -20
  125. qiskit/primitives/base/__init__.py +4 -4
  126. qiskit/primitives/base/base_estimator.py +77 -82
  127. qiskit/primitives/base/base_primitive_job.py +2 -2
  128. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  129. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  130. qiskit/primitives/base/base_sampler.py +52 -60
  131. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  132. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  133. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  134. qiskit/primitives/containers/bindings_array.py +3 -1
  135. qiskit/primitives/containers/bit_array.py +23 -0
  136. qiskit/primitives/containers/data_bin.py +3 -1
  137. qiskit/primitives/containers/observables_array.py +19 -2
  138. qiskit/primitives/statevector_sampler.py +6 -8
  139. qiskit/primitives/utils.py +14 -189
  140. qiskit/providers/__init__.py +4 -130
  141. qiskit/providers/backend.py +11 -314
  142. qiskit/providers/basic_provider/__init__.py +3 -1
  143. qiskit/providers/basic_provider/basic_provider.py +29 -9
  144. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  145. qiskit/providers/exceptions.py +0 -33
  146. qiskit/providers/fake_provider/__init__.py +0 -37
  147. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  148. qiskit/qasm2/__init__.py +21 -6
  149. qiskit/qasm2/export.py +2 -10
  150. qiskit/qasm2/parse.py +11 -25
  151. qiskit/qasm3/__init__.py +5 -1
  152. qiskit/qasm3/ast.py +44 -0
  153. qiskit/qasm3/exporter.py +65 -27
  154. qiskit/qasm3/printer.py +35 -4
  155. qiskit/qpy/__init__.py +162 -19
  156. qiskit/qpy/binary_io/__init__.py +0 -1
  157. qiskit/qpy/binary_io/circuits.py +96 -116
  158. qiskit/qpy/binary_io/parse_sympy_repr.py +121 -0
  159. qiskit/qpy/binary_io/schedules.py +61 -388
  160. qiskit/qpy/binary_io/value.py +159 -33
  161. qiskit/qpy/common.py +10 -7
  162. qiskit/qpy/formats.py +41 -0
  163. qiskit/qpy/interface.py +29 -62
  164. qiskit/qpy/type_keys.py +58 -221
  165. qiskit/quantum_info/analysis/distance.py +3 -1
  166. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  167. qiskit/quantum_info/operators/operator.py +6 -2
  168. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  169. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  170. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  171. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  172. qiskit/quantum_info/states/densitymatrix.py +16 -6
  173. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  174. qiskit/quantum_info/states/statevector.py +16 -6
  175. qiskit/result/__init__.py +5 -17
  176. qiskit/result/models.py +18 -11
  177. qiskit/result/result.py +38 -134
  178. qiskit/result/sampled_expval.py +1 -2
  179. qiskit/result/utils.py +3 -4
  180. qiskit/synthesis/__init__.py +21 -1
  181. qiskit/synthesis/arithmetic/__init__.py +3 -1
  182. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  183. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  184. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  185. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  186. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  187. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  188. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  189. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  190. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  191. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  192. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  193. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  194. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  195. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -0
  196. qiskit/synthesis/evolution/lie_trotter.py +10 -7
  197. qiskit/synthesis/evolution/product_formula.py +44 -35
  198. qiskit/synthesis/evolution/qdrift.py +17 -24
  199. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  200. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  201. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  202. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  203. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  204. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  205. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  206. qiskit/synthesis/two_qubit/__init__.py +1 -0
  207. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  208. qiskit/transpiler/__init__.py +32 -232
  209. qiskit/transpiler/basepasses.py +20 -51
  210. qiskit/transpiler/layout.py +1 -1
  211. qiskit/transpiler/passes/__init__.py +4 -40
  212. qiskit/transpiler/passes/basis/basis_translator.py +5 -4
  213. qiskit/transpiler/passes/basis/decompose.py +1 -15
  214. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  215. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  216. qiskit/transpiler/passes/layout/apply_layout.py +4 -0
  217. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  218. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +3 -4
  219. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  220. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  221. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  222. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  223. qiskit/transpiler/passes/optimization/__init__.py +2 -3
  224. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  225. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  226. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  227. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  228. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  229. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  230. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  231. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  232. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  233. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  234. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  235. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  236. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  237. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  238. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +3 -2
  239. qiskit/transpiler/passes/routing/__init__.py +0 -1
  240. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  241. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  242. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  243. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  244. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  245. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  246. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  247. qiskit/transpiler/passes/scheduling/padding/base_padding.py +32 -4
  248. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +25 -63
  249. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +12 -4
  250. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  251. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  252. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  253. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +134 -62
  254. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  255. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  256. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  257. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  258. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  259. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  260. qiskit/transpiler/passes/utils/__init__.py +0 -1
  261. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  262. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  263. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  264. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  265. qiskit/transpiler/passmanager.py +13 -0
  266. qiskit/transpiler/passmanager_config.py +5 -81
  267. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  268. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  269. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +107 -322
  270. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  271. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  272. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  273. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  274. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  275. qiskit/transpiler/target.py +78 -524
  276. qiskit/user_config.py +8 -4
  277. qiskit/utils/__init__.py +13 -12
  278. qiskit/utils/deprecation.py +4 -112
  279. qiskit/utils/optionals.py +11 -4
  280. qiskit/utils/parallel.py +214 -87
  281. qiskit/utils/units.py +4 -1
  282. qiskit/visualization/__init__.py +3 -7
  283. qiskit/visualization/array.py +4 -1
  284. qiskit/visualization/bloch.py +1 -1
  285. qiskit/visualization/circuit/_utils.py +19 -19
  286. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  287. qiskit/visualization/circuit/matplotlib.py +13 -23
  288. qiskit/visualization/circuit/text.py +7 -3
  289. qiskit/visualization/counts_visualization.py +4 -0
  290. qiskit/visualization/dag_visualization.py +2 -1
  291. qiskit/visualization/gate_map.py +39 -154
  292. qiskit/visualization/library.py +4 -1
  293. qiskit/visualization/pass_manager_visualization.py +6 -2
  294. qiskit/visualization/state_visualization.py +19 -2
  295. qiskit/visualization/timeline/core.py +19 -13
  296. qiskit/visualization/timeline/interface.py +19 -18
  297. qiskit/visualization/timeline/plotters/matplotlib.py +4 -1
  298. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/METADATA +4 -3
  299. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/RECORD +303 -449
  300. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/WHEEL +1 -1
  301. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/entry_points.txt +8 -2
  302. qiskit/assembler/__init__.py +0 -42
  303. qiskit/assembler/assemble_circuits.py +0 -451
  304. qiskit/assembler/assemble_schedules.py +0 -367
  305. qiskit/assembler/disassemble.py +0 -310
  306. qiskit/assembler/run_config.py +0 -77
  307. qiskit/circuit/bit.py +0 -106
  308. qiskit/circuit/classicalfunction/__init__.py +0 -152
  309. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  310. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  311. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  312. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  313. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  314. qiskit/circuit/classicalfunction/types.py +0 -18
  315. qiskit/circuit/classicalfunction/utils.py +0 -91
  316. qiskit/circuit/classicalregister.py +0 -57
  317. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  318. qiskit/circuit/quantumregister.py +0 -75
  319. qiskit/circuit/register.py +0 -246
  320. qiskit/compiler/assembler.py +0 -689
  321. qiskit/compiler/scheduler.py +0 -109
  322. qiskit/compiler/sequencer.py +0 -71
  323. qiskit/primitives/backend_estimator.py +0 -486
  324. qiskit/primitives/backend_sampler.py +0 -222
  325. qiskit/primitives/estimator.py +0 -172
  326. qiskit/primitives/sampler.py +0 -162
  327. qiskit/providers/backend_compat.py +0 -507
  328. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  329. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  330. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  332. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  333. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  335. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  336. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  337. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  338. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  339. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  341. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  342. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  343. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  344. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  345. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  346. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  347. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  348. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  349. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  350. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  351. qiskit/providers/fake_provider/fake_1q.py +0 -91
  352. qiskit/providers/fake_provider/fake_backend.py +0 -165
  353. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  354. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  355. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  356. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  357. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  358. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  359. qiskit/providers/models/__init__.py +0 -89
  360. qiskit/providers/models/backendconfiguration.py +0 -1040
  361. qiskit/providers/models/backendproperties.py +0 -535
  362. qiskit/providers/models/backendstatus.py +0 -104
  363. qiskit/providers/models/jobstatus.py +0 -77
  364. qiskit/providers/models/pulsedefaults.py +0 -305
  365. qiskit/providers/provider.py +0 -95
  366. qiskit/pulse/__init__.py +0 -158
  367. qiskit/pulse/builder.py +0 -2262
  368. qiskit/pulse/calibration_entries.py +0 -381
  369. qiskit/pulse/channels.py +0 -227
  370. qiskit/pulse/configuration.py +0 -245
  371. qiskit/pulse/exceptions.py +0 -45
  372. qiskit/pulse/filters.py +0 -309
  373. qiskit/pulse/instruction_schedule_map.py +0 -424
  374. qiskit/pulse/instructions/__init__.py +0 -67
  375. qiskit/pulse/instructions/acquire.py +0 -150
  376. qiskit/pulse/instructions/delay.py +0 -71
  377. qiskit/pulse/instructions/directives.py +0 -154
  378. qiskit/pulse/instructions/frequency.py +0 -135
  379. qiskit/pulse/instructions/instruction.py +0 -270
  380. qiskit/pulse/instructions/phase.py +0 -152
  381. qiskit/pulse/instructions/play.py +0 -99
  382. qiskit/pulse/instructions/reference.py +0 -100
  383. qiskit/pulse/instructions/snapshot.py +0 -82
  384. qiskit/pulse/library/__init__.py +0 -97
  385. qiskit/pulse/library/continuous.py +0 -430
  386. qiskit/pulse/library/pulse.py +0 -148
  387. qiskit/pulse/library/samplers/__init__.py +0 -15
  388. qiskit/pulse/library/samplers/decorators.py +0 -295
  389. qiskit/pulse/library/samplers/strategies.py +0 -71
  390. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  391. qiskit/pulse/library/waveform.py +0 -136
  392. qiskit/pulse/macros.py +0 -262
  393. qiskit/pulse/parameter_manager.py +0 -445
  394. qiskit/pulse/parser.py +0 -314
  395. qiskit/pulse/reference_manager.py +0 -58
  396. qiskit/pulse/schedule.py +0 -1854
  397. qiskit/pulse/transforms/__init__.py +0 -106
  398. qiskit/pulse/transforms/alignments.py +0 -406
  399. qiskit/pulse/transforms/base_transforms.py +0 -71
  400. qiskit/pulse/transforms/canonicalization.py +0 -498
  401. qiskit/pulse/transforms/dag.py +0 -122
  402. qiskit/pulse/utils.py +0 -149
  403. qiskit/qobj/__init__.py +0 -75
  404. qiskit/qobj/common.py +0 -81
  405. qiskit/qobj/converters/__init__.py +0 -18
  406. qiskit/qobj/converters/lo_config.py +0 -177
  407. qiskit/qobj/converters/pulse_instruction.py +0 -897
  408. qiskit/qobj/pulse_qobj.py +0 -709
  409. qiskit/qobj/qasm_qobj.py +0 -708
  410. qiskit/qobj/utils.py +0 -46
  411. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  412. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  413. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  414. qiskit/result/mitigation/utils.py +0 -217
  415. qiskit/scheduler/__init__.py +0 -40
  416. qiskit/scheduler/config.py +0 -37
  417. qiskit/scheduler/lowering.py +0 -187
  418. qiskit/scheduler/methods/__init__.py +0 -15
  419. qiskit/scheduler/methods/basic.py +0 -140
  420. qiskit/scheduler/schedule_circuit.py +0 -69
  421. qiskit/scheduler/sequence.py +0 -104
  422. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  423. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  424. qiskit/transpiler/passes/calibration/builders.py +0 -20
  425. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  426. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  427. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  428. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  429. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  430. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  431. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  432. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  433. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  434. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  435. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  436. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  437. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  438. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  439. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  440. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  441. qiskit/utils/deprecate_pulse.py +0 -119
  442. qiskit/utils/multiprocessing.py +0 -56
  443. qiskit/visualization/pulse_v2/__init__.py +0 -21
  444. qiskit/visualization/pulse_v2/core.py +0 -901
  445. qiskit/visualization/pulse_v2/device_info.py +0 -173
  446. qiskit/visualization/pulse_v2/drawings.py +0 -253
  447. qiskit/visualization/pulse_v2/events.py +0 -254
  448. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  449. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  450. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  451. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  452. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  453. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  454. qiskit/visualization/pulse_v2/interface.py +0 -459
  455. qiskit/visualization/pulse_v2/layouts.py +0 -387
  456. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  457. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  458. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  459. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  460. qiskit/visualization/pulse_v2/types.py +0 -242
  461. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
  462. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/top_level.txt +0 -0
@@ -27,9 +27,15 @@ accepting quantum circuits (or sweeps of values over parameterized circuits) and
27
27
  classical output registers. Estimators accept combinations of circuits and observables (or sweeps
28
28
  thereof) to estimate expectation values of the observables.
29
29
 
30
- Qiskit implements a reference implementation for each of these abstractions,
31
- :class:`~.StatevectorSampler` and :class:`~.StatevectorEstimator`.
30
+ Qiskit offers a reference implementation for each of these abstractions in the
31
+ :class:`~.StatevectorSampler` and :class:`~.StatevectorEstimator` classes.
32
32
 
33
+ The earlier versions of the sampler and estimator abstractions are defined by :class:`~.BaseSamplerV1`
34
+ and :class:`~.BaseEstimatorV1`. These interfaces follow a different and less flexible input-output
35
+ format for the ``run`` method and have been largely replaced in practice by :class:`~.BaseSamplerV2` and
36
+ :class:`~.BaseEstimatorV2`. However, the original abstract interface definitions have been
37
+ retained for backward compatibility. Check the migration section of this page to see further details
38
+ on the difference between V1 and V2.
33
39
 
34
40
  Overview of EstimatorV2
35
41
  =======================
@@ -66,7 +72,9 @@ is in general array-valued as well. For more information, please check
66
72
 
67
73
  Here is an example of how an estimator is used.
68
74
 
69
- .. code-block:: python
75
+ .. plot::
76
+ :include-source:
77
+ :nofigs:
70
78
 
71
79
  from qiskit.primitives import StatevectorEstimator as Estimator
72
80
  from qiskit.circuit.library import RealAmplitudes
@@ -126,7 +134,9 @@ for each pub.
126
134
  Here is an example of how a sampler is used.
127
135
 
128
136
 
129
- .. code-block:: python
137
+ .. plot::
138
+ :include-source:
139
+ :nofigs:
130
140
 
131
141
  from qiskit.primitives import StatevectorSampler as Sampler
132
142
  from qiskit import QuantumCircuit
@@ -164,12 +174,12 @@ Here is an example of how a sampler is used.
164
174
  Overview of EstimatorV1
165
175
  =======================
166
176
 
167
- Estimator class estimates expectation values of quantum circuits and observables.
177
+ There are currently no implementations of the legacy ``EstimatorV1`` interface in Qiskit.
178
+ However, the abstract interface definition from :class:`~BaseEstimatorV1` is still part
179
+ of the package to provide backwards compatibility for external implementations.
168
180
 
169
- An estimator is initialized with an empty parameter set. The estimator is used to
170
- create a :class:`~qiskit.providers.JobV1`, via the
171
- :meth:`qiskit.primitives.Estimator.run()` method. This method is called
172
- with the following parameters
181
+ An ``EstimatorV1`` implementation is initialized with an empty parameter set.
182
+ :class:`~BaseEstimatorV1` can be called via the ``.run()`` method with the following parameters:
173
183
 
174
184
  * quantum circuits (:math:`\psi_i(\theta)`): list of (parameterized) quantum circuits
175
185
  (a list of :class:`~qiskit.circuit.QuantumCircuit` objects).
@@ -181,7 +191,7 @@ with the following parameters
181
191
  to be bound to the parameters of the quantum circuits
182
192
  (list of list of float).
183
193
 
184
- The method returns a :class:`~qiskit.providers.JobV1` object, calling
194
+ The method should return a :class:`~qiskit.providers.JobV1` object. Calling
185
195
  :meth:`qiskit.providers.JobV1.result()` yields the
186
196
  a list of expectation values plus optional metadata like confidence intervals for
187
197
  the estimation.
@@ -190,11 +200,15 @@ the estimation.
190
200
 
191
201
  \langle\psi_i(\theta_k)|H_j|\psi_i(\theta_k)\rangle
192
202
 
193
- Here is an example of how the estimator is used.
203
+ Here is an example of how an ``EstimatorV1`` implementation would be used.
204
+ Note that there are currently no implementations of the legacy ``EstimatorV1``
205
+ interface in Qiskit.
194
206
 
195
207
  .. code-block:: python
196
208
 
197
- from qiskit.primitives import Estimator
209
+ # This is a fictional import path.
210
+ # There are currently no EstimatorV1 implementations in Qiskit.
211
+ from estimator_v1_location import EstimatorV1
198
212
  from qiskit.circuit.library import RealAmplitudes
199
213
  from qiskit.quantum_info import SparsePauliOp
200
214
 
@@ -209,7 +223,7 @@ Here is an example of how the estimator is used.
209
223
  theta2 = [0, 1, 1, 2, 3, 5, 8, 13]
210
224
  theta3 = [1, 2, 3, 4, 5, 6]
211
225
 
212
- estimator = Estimator()
226
+ estimator = EstimatorV1()
213
227
 
214
228
  # calculate [ <psi1(theta1)|H1|psi1(theta1)> ]
215
229
  job = estimator.run([psi1], [H1], [theta1])
@@ -231,11 +245,14 @@ Here is an example of how the estimator is used.
231
245
  Overview of SamplerV1
232
246
  =====================
233
247
 
234
- Sampler class calculates probabilities or quasi-probabilities of bitstrings from quantum circuits.
248
+ There are currently no implementations of the legacy ``SamplerV1`` interface in Qiskit.
249
+ However, the abstract interface definition from :class:`~BaseSamplerV1` is still part
250
+ of the package to provide backward compatibility for external implementations.
235
251
 
236
- A sampler is initialized with an empty parameter set. The sampler is used to
237
- create a :class:`~qiskit.providers.JobV1`, via the :meth:`qiskit.primitives.Sampler.run()`
238
- method. This method is called with the following parameters
252
+ Sampler classes calculate probabilities or quasi-probabilities of bitstrings from quantum circuits.
253
+
254
+ A ``SamplerV1`` is initialized with an empty parameter set. :class:`~BaseSamplerV1` implementations can
255
+ be called via the ``.run()`` method with the following parameters:
239
256
 
240
257
  * quantum circuits (:math:`\psi_i(\theta)`): list of (parameterized) quantum circuits.
241
258
  (a list of :class:`~qiskit.circuit.QuantumCircuit` objects)
@@ -244,16 +261,20 @@ method. This method is called with the following parameters
244
261
  to be bound to the parameters of the quantum circuits.
245
262
  (list of list of float)
246
263
 
247
- The method returns a :class:`~qiskit.providers.JobV1` object, calling
264
+ ``.run()`` will return a :class:`~qiskit.providers.JobV1` object. Calling
248
265
  :meth:`qiskit.providers.JobV1.result()` yields a :class:`~qiskit.primitives.SamplerResult`
249
266
  object, which contains probabilities or quasi-probabilities of bitstrings,
250
267
  plus optional metadata like error bars in the samples.
251
268
 
252
- Here is an example of how sampler is used.
269
+ Here is an example of how a ``SamplerV1`` implementation would be used.
270
+ Note that there are currently no implementations of the legacy ``SamplerV1``
271
+ interface in Qiskit.
253
272
 
254
273
  .. code-block:: python
255
274
 
256
- from qiskit.primitives import Sampler
275
+ # This is a fictional import path.
276
+ # There are currently no SamplerV1 implementations in Qiskit.
277
+ from sampler_v1_location import Sampler
257
278
  from qiskit import QuantumCircuit
258
279
  from qiskit.circuit.library import RealAmplitudes
259
280
 
@@ -273,7 +294,7 @@ Here is an example of how sampler is used.
273
294
  theta2 = [0, 1, 2, 3, 4, 5, 6, 7]
274
295
 
275
296
  # initialization of the sampler
276
- sampler = Sampler()
297
+ sampler = SamplerV1()
277
298
 
278
299
  # Sampler runs a job on the Bell circuit
279
300
  job = sampler.run(
@@ -427,10 +448,7 @@ Estimator V1
427
448
  .. autosummary::
428
449
  :toctree: ../stubs/
429
450
 
430
- BaseEstimator
431
451
  BaseEstimatorV1
432
- Estimator
433
- BackendEstimator
434
452
  EstimatorResult
435
453
 
436
454
 
@@ -440,26 +458,19 @@ Sampler V1
440
458
  .. autosummary::
441
459
  :toctree: ../stubs/
442
460
 
443
- BaseSampler
444
461
  BaseSamplerV1
445
- Sampler
446
- BackendSampler
447
462
  SamplerResult
448
463
 
449
464
  """
450
465
 
451
- from .backend_estimator import BackendEstimator
452
- from .backend_sampler import BackendSampler
453
466
  from .base import (
454
- BaseEstimator,
455
467
  BaseEstimatorV1,
456
468
  BaseEstimatorV2,
457
- BaseSampler,
458
469
  BaseSamplerV1,
459
470
  BaseSamplerV2,
460
471
  )
461
- from .base.estimator_result import EstimatorResult
462
- from .base.sampler_result import SamplerResult
472
+ from .base.estimator_result_v1 import EstimatorResult
473
+ from .base.sampler_result_v1 import SamplerResult
463
474
  from .containers import (
464
475
  BitArray,
465
476
  DataBin,
@@ -472,9 +483,7 @@ from .containers import (
472
483
  ObservableLike,
473
484
  ObservablesArrayLike,
474
485
  )
475
- from .estimator import Estimator
476
486
  from .primitive_job import BasePrimitiveJob, PrimitiveJob
477
- from .sampler import Sampler
478
487
  from .statevector_estimator import StatevectorEstimator
479
488
  from .statevector_sampler import StatevectorSampler
480
489
  from .backend_estimator_v2 import BackendEstimatorV2
@@ -15,7 +15,6 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import math
18
- import warnings
19
18
  from collections import defaultdict
20
19
  from collections.abc import Iterable
21
20
  from dataclasses import dataclass
@@ -24,13 +23,12 @@ import numpy as np
24
23
 
25
24
  from qiskit.circuit import ClassicalRegister, QuantumCircuit, QuantumRegister
26
25
  from qiskit.exceptions import QiskitError
27
- from qiskit.providers import BackendV1, BackendV2
26
+ from qiskit.providers import BackendV2
28
27
  from qiskit.quantum_info import Pauli, PauliList
29
- from qiskit.result import Counts
28
+ from qiskit.result import Counts, Result
30
29
  from qiskit.transpiler import PassManager, PassManagerConfig
31
30
  from qiskit.transpiler.passes import Optimize1qGatesDecomposition
32
31
 
33
- from .backend_estimator import _pauli_expval_with_variance, _prepare_counts, _run_circuits
34
32
  from .base import BaseEstimatorV2
35
33
  from .containers import DataBin, EstimatorPubLike, PrimitiveResult, PubResult
36
34
  from .containers.bindings_array import BindingsArray
@@ -38,6 +36,103 @@ from .containers.estimator_pub import EstimatorPub
38
36
  from .primitive_job import PrimitiveJob
39
37
 
40
38
 
39
+ def _run_circuits(
40
+ circuits: QuantumCircuit | list[QuantumCircuit],
41
+ backend: BackendV2,
42
+ clear_metadata: bool = True,
43
+ **run_options,
44
+ ) -> tuple[list[Result], list[dict]]:
45
+ """Remove metadata of circuits and run the circuits on a backend.
46
+ Args:
47
+ circuits: The circuits
48
+ backend: The backend
49
+ clear_metadata: Clear circuit metadata before passing to backend.run if
50
+ True.
51
+ **run_options: run_options
52
+ Returns:
53
+ The result and the metadata of the circuits
54
+ """
55
+ if isinstance(circuits, QuantumCircuit):
56
+ circuits = [circuits]
57
+ metadata = []
58
+ for circ in circuits:
59
+ metadata.append(circ.metadata)
60
+ if clear_metadata:
61
+ circ.metadata = {}
62
+ if isinstance(backend, BackendV2):
63
+ max_circuits = backend.max_circuits
64
+ else:
65
+ raise RuntimeError("Backend version not supported")
66
+ if max_circuits:
67
+ jobs = [
68
+ backend.run(circuits[pos : pos + max_circuits], **run_options)
69
+ for pos in range(0, len(circuits), max_circuits)
70
+ ]
71
+ result = [x.result() for x in jobs]
72
+ else:
73
+ result = [backend.run(circuits, **run_options).result()]
74
+ return result, metadata
75
+
76
+
77
+ def _prepare_counts(results: list[Result]):
78
+ counts = []
79
+ for res in results:
80
+ count = res.get_counts()
81
+ if not isinstance(count, list):
82
+ count = [count]
83
+ counts.extend(count)
84
+ return counts
85
+
86
+
87
+ def _pauli_expval_with_variance(counts: Counts, paulis: PauliList) -> tuple[np.ndarray, np.ndarray]:
88
+ """Return array of expval and variance pairs for input Paulis.
89
+ Note: All non-identity Pauli's are treated as Z-paulis, assuming
90
+ that basis rotations have been applied to convert them to the
91
+ diagonal basis.
92
+ """
93
+ # Diag indices
94
+ size = len(paulis)
95
+ diag_inds = _paulis2inds(paulis)
96
+
97
+ expvals = np.zeros(size, dtype=float)
98
+ denom = 0 # Total shots for counts dict
99
+ for bin_outcome, freq in counts.items():
100
+ split_outcome = bin_outcome.split(" ", 1)[0] if " " in bin_outcome else bin_outcome
101
+ outcome = int(split_outcome, 2)
102
+ denom += freq
103
+ for k in range(size):
104
+ coeff = (-1) ** _parity(diag_inds[k] & outcome)
105
+ expvals[k] += freq * coeff
106
+
107
+ # Divide by total shots
108
+ expvals /= denom
109
+
110
+ # Compute variance
111
+ variances = 1 - expvals**2
112
+ return expvals, variances
113
+
114
+
115
+ def _paulis2inds(paulis: PauliList) -> list[int]:
116
+ """Convert PauliList to diagonal integers.
117
+ These are integer representations of the binary string with a
118
+ 1 where there are Paulis, and 0 where there are identities.
119
+ """
120
+ # Treat Z, X, Y the same
121
+ nonid = paulis.z | paulis.x
122
+
123
+ # bits are packed into uint8 in little endian
124
+ # e.g., i-th bit corresponds to coefficient 2^i
125
+ packed_vals = np.packbits(nonid, axis=1, bitorder="little")
126
+ power_uint8 = 1 << (8 * np.arange(packed_vals.shape[1], dtype=object))
127
+ inds = packed_vals @ power_uint8
128
+ return inds.tolist()
129
+
130
+
131
+ def _parity(integer: int) -> int:
132
+ """Return the parity of an integer"""
133
+ return bin(integer).count("1") % 2
134
+
135
+
41
136
  @dataclass
42
137
  class Options:
43
138
  """Options for :class:`~.BackendEstimatorV2`."""
@@ -77,7 +172,7 @@ class BackendEstimatorV2(BaseEstimatorV2):
77
172
 
78
173
  The :class:`~.BackendEstimatorV2` class is a generic implementation of the
79
174
  :class:`~.BaseEstimatorV2` interface that is used to wrap a :class:`~.BackendV2`
80
- (or :class:`~.BackendV1`) object in the :class:`~.BaseEstimatorV2` API. It
175
+ object in the :class:`~.BaseEstimatorV2` API. It
81
176
  facilitates using backends that do not provide a native
82
177
  :class:`~.BaseEstimatorV2` implementation in places that work with
83
178
  :class:`~.BaseEstimatorV2`. However,
@@ -128,32 +223,16 @@ class BackendEstimatorV2(BaseEstimatorV2):
128
223
  def __init__(
129
224
  self,
130
225
  *,
131
- backend: BackendV1 | BackendV2,
226
+ backend: BackendV2,
132
227
  options: dict | None = None,
133
228
  ):
134
229
  """
135
- .. deprecated:: 1.4
136
- The method ``BackendEstimatorV2.__init__`` will stop supporting inputs of type
137
- :class:`.BackendV1` in the `backend` parameter in a future release no
138
- earlier than 2.0. :class:`.BackendV1` is deprecated and implementations should
139
- move to :class:`.BackendV2`.
140
-
141
230
  Args:
142
231
  backend: The backend to run the primitive on.
143
232
  options: The options to control the default precision (``default_precision``),
144
233
  the operator grouping (``abelian_grouping``), and
145
234
  the random seed for the simulator (``seed_simulator``).
146
235
  """
147
-
148
- if not isinstance(backend, BackendV2):
149
- warnings.warn(
150
- "The method `BackendEstimatorV2.__init__` will stop supporting inputs of "
151
- f"type `BackendV1` ( {backend} ) in the `backend` parameter in a future "
152
- "release no earlier than 2.0. `BackendV1` is deprecated and implementations "
153
- "should move to `BackendV2`.",
154
- category=DeprecationWarning,
155
- stacklevel=2,
156
- )
157
236
  self._backend = backend
158
237
  self._options = Options(**options) if options else Options()
159
238
 
@@ -170,7 +249,7 @@ class BackendEstimatorV2(BaseEstimatorV2):
170
249
  return self._options
171
250
 
172
251
  @property
173
- def backend(self) -> BackendV1 | BackendV2:
252
+ def backend(self) -> BackendV2:
174
253
  """Returns the backend which this sampler object based on."""
175
254
  return self._backend
176
255
 
@@ -24,7 +24,7 @@ from numpy.typing import NDArray
24
24
 
25
25
  from qiskit.circuit import QuantumCircuit
26
26
  from qiskit.exceptions import QiskitError
27
- from qiskit.primitives.backend_estimator import _run_circuits
27
+ from qiskit.primitives.backend_estimator_v2 import _run_circuits
28
28
  from qiskit.primitives.base import BaseSamplerV2
29
29
  from qiskit.primitives.containers import (
30
30
  BitArray,
@@ -36,7 +36,7 @@ from qiskit.primitives.containers import (
36
36
  from qiskit.primitives.containers.bit_array import _min_num_bytes
37
37
  from qiskit.primitives.containers.sampler_pub import SamplerPub
38
38
  from qiskit.primitives.primitive_job import PrimitiveJob
39
- from qiskit.providers.backend import BackendV1, BackendV2
39
+ from qiskit.providers.backend import BackendV2
40
40
  from qiskit.result import Result
41
41
 
42
42
 
@@ -83,7 +83,7 @@ class BackendSamplerV2(BaseSamplerV2):
83
83
 
84
84
  The :class:`~.BackendSamplerV2` class is a generic implementation of the
85
85
  :class:`~.BaseSamplerV2` interface that is used to wrap a :class:`~.BackendV2`
86
- (or :class:`~.BackendV1`) object in the class :class:`~.BaseSamplerV2` API. It
86
+ object in the class :class:`~.BaseSamplerV2` API. It
87
87
  facilitates using backends that do not provide a native
88
88
  :class:`~.BaseSamplerV2` implementation in places that work with
89
89
  :class:`~.BaseSamplerV2`. However,
@@ -119,35 +119,20 @@ class BackendSamplerV2(BaseSamplerV2):
119
119
  def __init__(
120
120
  self,
121
121
  *,
122
- backend: BackendV1 | BackendV2,
122
+ backend: BackendV2,
123
123
  options: dict | None = None,
124
124
  ):
125
125
  """
126
- .. deprecated:: 1.4
127
- The method ``BackendSamplerV2.__init__`` will stop supporting inputs of type
128
- :class:`.BackendV1` in the `backend` parameter in a future release no
129
- earlier than 2.0. :class:`.BackendV1` is deprecated and implementations should
130
- move to :class:`.BackendV2`.
131
-
132
126
  Args:
133
127
  backend: The backend to run the primitive on.
134
128
  options: The options to control the default shots (``default_shots``) and
135
129
  the random seed for the simulator (``seed_simulator``).
136
130
  """
137
- if not isinstance(backend, BackendV2):
138
- warnings.warn(
139
- "The method `BackendSamplerV2.__init__` will stop supporting inputs of "
140
- f"type `BackendV1` ( {backend} ) in the `backend` parameter in a future "
141
- "release no earlier than 2.0. `BackendV1` is deprecated and implementations "
142
- "should move to `BackendV2`.",
143
- category=DeprecationWarning,
144
- stacklevel=2,
145
- )
146
131
  self._backend = backend
147
132
  self._options = Options(**options) if options else Options()
148
133
 
149
134
  @property
150
- def backend(self) -> BackendV1 | BackendV2:
135
+ def backend(self) -> BackendV2:
151
136
  """Returns the backend which this sampler object based on."""
152
137
  return self._backend
153
138
 
@@ -14,7 +14,7 @@
14
14
  Abstract base classes for primitives module.
15
15
  """
16
16
 
17
- from .base_sampler import BaseSampler, BaseSamplerV1, BaseSamplerV2
18
- from .base_estimator import BaseEstimator, BaseEstimatorV1, BaseEstimatorV2
19
- from .estimator_result import EstimatorResult
20
- from .sampler_result import SamplerResult
17
+ from .base_sampler import BaseSamplerV1, BaseSamplerV2
18
+ from .base_estimator import BaseEstimatorV1, BaseEstimatorV2
19
+ from .estimator_result_v1 import EstimatorResult
20
+ from .sampler_result_v1 import SamplerResult
@@ -23,7 +23,6 @@ from qiskit.circuit import QuantumCircuit
23
23
  from qiskit.providers import JobV1 as Job
24
24
  from qiskit.quantum_info.operators import SparsePauliOp
25
25
  from qiskit.quantum_info.operators.base_operator import BaseOperator
26
- from qiskit.utils.deprecation import deprecate_func
27
26
 
28
27
  from ..containers import (
29
28
  DataBin,
@@ -32,22 +31,81 @@ from ..containers import (
32
31
  PubResult,
33
32
  )
34
33
  from ..containers.estimator_pub import EstimatorPub
35
- from . import validation
36
- from .base_primitive import BasePrimitive
34
+ from .validation_v1 import _validate_estimator_args
35
+ from .base_primitive_v1 import BasePrimitiveV1
37
36
  from .base_primitive_job import BasePrimitiveJob
38
37
 
39
38
  T = TypeVar("T", bound=Job)
40
39
 
41
40
 
42
- class BaseEstimatorV1(BasePrimitive, Generic[T]):
43
- r"""Estimator V1 base class.
41
+ class BaseEstimatorV2(ABC):
42
+ r"""Base class for ``EstimatorV2`` implementations.
43
+
44
+ An estimator calculates expectation values for provided quantum circuit and
45
+ observable combinations. Implementations of this :class:`.BaseEstimatorV2`
46
+ interface must define their own :meth:`.run` method, which is designed to
47
+ take the following inputs:
48
+
49
+ * pubs: list of pubs (Primitive Unified Blocs). An estimator pub is a list
50
+ or tuple of two to four elements that define the unit of work for the
51
+ estimator. These are:
52
+
53
+ * A single :class:`~qiskit.circuit.QuantumCircuit`, possibly parametrized,
54
+ whose final state we define as :math:`\psi(\theta)`.
55
+
56
+ * One or more observables (specified as any :class:`~.ObservablesArrayLike`, including
57
+ :class:`~.Pauli`, :class:`~.SparsePauliOp`, ``str``) that specify which expectation
58
+ values to estimate, denoted :math:`H_j`.
59
+
60
+ * A collection parameter value sets to bind the circuit against, :math:`\theta_k`
44
61
 
45
- Base class for Estimator that estimates expectation values of quantum circuits and observables.
62
+ * Optionally, the estimation precision.
46
63
 
47
- An estimator is initialized with an empty parameter set. The estimator is used to
48
- create a :class:`~qiskit.providers.JobV1`, via the
49
- :meth:`qiskit.primitives.Estimator.run()` method. This method is called
50
- with the following parameters
64
+ * precision: the estimation precision. This specification is optional and will be overriden by
65
+ the pub-wise shots if provided.
66
+
67
+ All estimator implementations must implement default value for the ``precision`` in the
68
+ :meth:`.run` method. This default value will be used any time ``precision=None`` is specified, which
69
+ can take place in the :meth:`.run` kwargs or at the pub level.
70
+ """
71
+
72
+ @staticmethod
73
+ def _make_data_bin(_: EstimatorPub) -> type[DataBin]:
74
+ # this method is present for backwards compat. new primitive implementations
75
+ # should avoid it.
76
+ return DataBin
77
+
78
+ @abstractmethod
79
+ def run(
80
+ self, pubs: Iterable[EstimatorPubLike], *, precision: float | None = None
81
+ ) -> BasePrimitiveJob[PrimitiveResult[PubResult]]:
82
+ """Estimate expectation values for each provided pub (Primitive Unified Bloc).
83
+
84
+ Args:
85
+ pubs: An iterable of pub-like objects, such as tuples ``(circuit, observables)``
86
+ or ``(circuit, observables, parameter_values)``.
87
+ precision: The target precision for expectation value estimates of each
88
+ run Estimator Pub that does not specify its own precision. If None
89
+ the estimator's default precision value will be used.
90
+
91
+ Returns:
92
+ A job object that contains results.
93
+ """
94
+
95
+
96
+ class BaseEstimatorV1(BasePrimitiveV1, Generic[T]):
97
+ r"""Base class for ``EstimatorV1`` implementations.
98
+
99
+ Note that the reference estimator in Qiskit follows the ``EstimatorV2``
100
+ interface specifications instead.
101
+
102
+ An estimator calculates expectation values for provided quantum circuit and
103
+ observable combinations.
104
+
105
+ Implementations of :class:`.BaseEstimatorV1` should define their own
106
+ :meth:`.BaseEstimatorV1._run` method
107
+ that will be called by the public-facing :meth:`qiskit.primitives.BaseEstimatorV1.run`,
108
+ which takes the following inputs:
51
109
 
52
110
  * quantum circuits (:math:`\psi_i(\theta)`): list of (parameterized) quantum circuits
53
111
  (a list of :class:`~qiskit.circuit.QuantumCircuit` objects).
@@ -59,7 +117,7 @@ class BaseEstimatorV1(BasePrimitive, Generic[T]):
59
117
  to be bound to the parameters of the quantum circuits
60
118
  (list of list of float).
61
119
 
62
- The method returns a :class:`~qiskit.providers.JobV1` object, calling
120
+ The method returns a :class:`~qiskit.providers.JobV1` object. Calling
63
121
  :meth:`qiskit.providers.JobV1.result()` yields the
64
122
  a list of expectation values plus optional metadata like confidence intervals for
65
123
  the estimation.
@@ -68,11 +126,13 @@ class BaseEstimatorV1(BasePrimitive, Generic[T]):
68
126
 
69
127
  \langle\psi_i(\theta_k)|H_j|\psi_i(\theta_k)\rangle
70
128
 
71
- Here is an example of how the estimator is used.
129
+ Here is an example of how a :class:`.BaseEstimatorV1` would be used:
72
130
 
73
131
  .. code-block:: python
74
132
 
75
- from qiskit.primitives import Estimator
133
+ # This is a fictional import path.
134
+ # There are currently no EstimatorV1 implementations in Qiskit.
135
+ from estimator_v1_location import EstimatorV1
76
136
  from qiskit.circuit.library import RealAmplitudes
77
137
  from qiskit.quantum_info import SparsePauliOp
78
138
 
@@ -87,7 +147,7 @@ class BaseEstimatorV1(BasePrimitive, Generic[T]):
87
147
  theta2 = [0, 1, 1, 2, 3, 5, 8, 13]
88
148
  theta3 = [1, 2, 3, 4, 5, 6]
89
149
 
90
- estimator = Estimator()
150
+ estimator = EstimatorV1()
91
151
 
92
152
  # calculate [ <psi1(theta1)|H1|psi1(theta1)> ]
93
153
  job = estimator.run([psi1], [H1], [theta1])
@@ -110,8 +170,7 @@ class BaseEstimatorV1(BasePrimitive, Generic[T]):
110
170
  options: dict | None = None,
111
171
  ):
112
172
  """
113
- Creating an instance of an Estimator V1, or using one in a ``with`` context opens a session that
114
- holds resources until the instance is ``close()`` ed or the context is exited.
173
+ Initialize ``EstimatorV1``.
115
174
 
116
175
  Args:
117
176
  options: Default options.
@@ -162,7 +221,7 @@ class BaseEstimatorV1(BasePrimitive, Generic[T]):
162
221
  ValueError: Invalid argument values given.
163
222
  """
164
223
  # Validation
165
- circuits, observables, parameter_values = validation._validate_estimator_args(
224
+ circuits, observables, parameter_values = _validate_estimator_args(
166
225
  circuits, observables, parameter_values
167
226
  )
168
227
 
@@ -185,68 +244,4 @@ class BaseEstimatorV1(BasePrimitive, Generic[T]):
185
244
  parameter_values: tuple[tuple[float, ...], ...],
186
245
  **run_options,
187
246
  ) -> T:
188
- raise NotImplementedError("The subclass of BaseEstimator must implement `_run` method.")
189
-
190
-
191
- class BaseEstimator(BaseEstimatorV1[T]):
192
- """DEPRECATED. Type alias for Estimator V1 base class.
193
-
194
- See :class:`.BaseEstimatorV1` for details.
195
- """
196
-
197
- @deprecate_func(
198
- since="1.2",
199
- additional_msg="The `BaseEstimator` class is a type alias for the `BaseEstimatorV1` "
200
- "interface that has been deprecated in favor of explicitly versioned interface classes. "
201
- "It is recommended to migrate all implementations to use `BaseEstimatorV2`. "
202
- "However, for implementations incompatible with `BaseEstimatorV2`, `BaseEstimator` can "
203
- "be replaced with the explicitly versioned `BaseEstimatorV1` class.",
204
- )
205
- def __init__(
206
- self,
207
- *,
208
- options: dict | None = None,
209
- ):
210
- """
211
- Creating an instance of an Estimator, or using one in a ``with`` context opens a session that
212
- holds resources until the instance is ``close()`` ed or the context is exited.
213
-
214
- Args:
215
- options: Default options.
216
- """
217
- super().__init__(options=options)
218
-
219
-
220
- class BaseEstimatorV2(ABC):
221
- r"""Estimator V2 base class.
222
-
223
- An estimator estimates expectation values for provided quantum circuit and
224
- observable combinations.
225
-
226
- An Estimator implementation must treat the :meth:`.run` method ``precision=None``
227
- kwarg as using a default ``precision`` value. The default value and methods to
228
- set it can be determined by the Estimator implementor.
229
- """
230
-
231
- @staticmethod
232
- def _make_data_bin(_: EstimatorPub) -> type[DataBin]:
233
- # this method is present for backwards compat. new primitive implementations
234
- # should avoid it.
235
- return DataBin
236
-
237
- @abstractmethod
238
- def run(
239
- self, pubs: Iterable[EstimatorPubLike], *, precision: float | None = None
240
- ) -> BasePrimitiveJob[PrimitiveResult[PubResult]]:
241
- """Estimate expectation values for each provided pub (Primitive Unified Bloc).
242
-
243
- Args:
244
- pubs: An iterable of pub-like objects, such as tuples ``(circuit, observables)``
245
- or ``(circuit, observables, parameter_values)``.
246
- precision: The target precision for expectation value estimates of each
247
- run Estimator Pub that does not specify its own precision. If None
248
- the estimator's default precision value will be used.
249
-
250
- Returns:
251
- A job object that contains results.
252
- """
247
+ raise NotImplementedError("The subclass of BaseEstimatorV1 must implement `_run` method.")
@@ -17,9 +17,9 @@ from abc import ABC, abstractmethod
17
17
  from typing import Generic, TypeVar, Union
18
18
 
19
19
  from ..containers import PrimitiveResult
20
- from .base_result import _BasePrimitiveResult
20
+ from .base_result_v1 import _BasePrimitiveResultV1
21
21
 
22
- ResultT = TypeVar("ResultT", bound=Union[_BasePrimitiveResult, PrimitiveResult])
22
+ ResultT = TypeVar("ResultT", bound=Union[_BasePrimitiveResultV1, PrimitiveResult])
23
23
  StatusT = TypeVar("StatusT")
24
24
 
25
25