qiskit 1.3.0__cp39-abi3-win32.whl → 1.3.0b1__cp39-abi3-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +1 -20
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/assembler/assemble_schedules.py +0 -2
  5. qiskit/circuit/__init__.py +1 -44
  6. qiskit/circuit/_standard_gates_commutations.py +0 -585
  7. qiskit/circuit/barrier.py +0 -2
  8. qiskit/circuit/controlflow/builder.py +3 -3
  9. qiskit/circuit/controlflow/if_else.py +5 -13
  10. qiskit/circuit/controlflow/while_loop.py +2 -10
  11. qiskit/circuit/delay.py +3 -20
  12. qiskit/circuit/equivalence.py +214 -13
  13. qiskit/circuit/gate.py +1 -3
  14. qiskit/circuit/instruction.py +11 -32
  15. qiskit/circuit/instructionset.py +0 -2
  16. qiskit/circuit/library/__init__.py +14 -110
  17. qiskit/circuit/library/arithmetic/__init__.py +2 -9
  18. qiskit/circuit/library/arithmetic/adders/__init__.py +0 -1
  19. qiskit/circuit/library/arithmetic/adders/adder.py +2 -154
  20. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +56 -20
  21. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +1 -14
  22. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +91 -21
  23. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
  24. qiskit/circuit/library/arithmetic/multipliers/__init__.py +0 -1
  25. qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -8
  26. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +3 -94
  27. qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +1 -8
  28. qiskit/circuit/library/arithmetic/weighted_adder.py +1 -1
  29. qiskit/circuit/library/basis_change/qft.py +38 -20
  30. qiskit/circuit/library/blueprintcircuit.py +0 -64
  31. qiskit/circuit/library/boolean_logic/__init__.py +4 -4
  32. qiskit/circuit/library/boolean_logic/inner_product.py +4 -81
  33. qiskit/circuit/library/boolean_logic/quantum_and.py +4 -107
  34. qiskit/circuit/library/boolean_logic/quantum_or.py +3 -107
  35. qiskit/circuit/library/boolean_logic/quantum_xor.py +3 -97
  36. qiskit/circuit/library/data_preparation/__init__.py +3 -6
  37. qiskit/circuit/library/data_preparation/pauli_feature_map.py +29 -342
  38. qiskit/circuit/library/data_preparation/{_z_feature_map.py → z_feature_map.py} +34 -45
  39. qiskit/circuit/library/data_preparation/zz_feature_map.py +118 -0
  40. qiskit/circuit/library/fourier_checking.py +11 -72
  41. qiskit/circuit/library/generalized_gates/__init__.py +1 -1
  42. qiskit/circuit/library/generalized_gates/diagonal.py +51 -45
  43. qiskit/circuit/library/generalized_gates/gms.py +14 -67
  44. qiskit/circuit/library/generalized_gates/gr.py +4 -4
  45. qiskit/circuit/library/generalized_gates/isometry.py +2 -2
  46. qiskit/circuit/library/generalized_gates/linear_function.py +6 -12
  47. qiskit/circuit/library/generalized_gates/mcmt.py +107 -167
  48. qiskit/circuit/library/generalized_gates/permutation.py +6 -8
  49. qiskit/circuit/library/generalized_gates/rv.py +9 -8
  50. qiskit/circuit/library/graph_state.py +10 -93
  51. qiskit/circuit/library/grover_operator.py +2 -270
  52. qiskit/circuit/library/hidden_linear_function.py +20 -83
  53. qiskit/circuit/library/iqp.py +20 -99
  54. qiskit/circuit/library/n_local/__init__.py +7 -19
  55. qiskit/circuit/library/n_local/efficient_su2.py +5 -118
  56. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +0 -259
  57. qiskit/circuit/library/n_local/excitation_preserving.py +6 -130
  58. qiskit/circuit/library/n_local/n_local.py +5 -406
  59. qiskit/circuit/library/n_local/pauli_two_design.py +4 -106
  60. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -80
  61. qiskit/circuit/library/n_local/real_amplitudes.py +7 -127
  62. qiskit/circuit/library/n_local/two_local.py +7 -14
  63. qiskit/circuit/library/overlap.py +26 -91
  64. qiskit/circuit/library/pauli_evolution.py +15 -17
  65. qiskit/circuit/library/phase_estimation.py +4 -80
  66. qiskit/circuit/library/quantum_volume.py +20 -72
  67. qiskit/circuit/library/standard_gates/__init__.py +1 -20
  68. qiskit/circuit/library/standard_gates/dcx.py +1 -2
  69. qiskit/circuit/library/standard_gates/ecr.py +2 -2
  70. qiskit/circuit/library/standard_gates/h.py +3 -4
  71. qiskit/circuit/library/standard_gates/i.py +1 -2
  72. qiskit/circuit/library/standard_gates/iswap.py +2 -2
  73. qiskit/circuit/library/standard_gates/p.py +12 -20
  74. qiskit/circuit/library/standard_gates/r.py +1 -1
  75. qiskit/circuit/library/standard_gates/rx.py +3 -4
  76. qiskit/circuit/library/standard_gates/rxx.py +2 -2
  77. qiskit/circuit/library/standard_gates/ry.py +3 -4
  78. qiskit/circuit/library/standard_gates/ryy.py +2 -2
  79. qiskit/circuit/library/standard_gates/rz.py +12 -13
  80. qiskit/circuit/library/standard_gates/rzx.py +6 -6
  81. qiskit/circuit/library/standard_gates/rzz.py +1 -1
  82. qiskit/circuit/library/standard_gates/s.py +4 -4
  83. qiskit/circuit/library/standard_gates/swap.py +3 -3
  84. qiskit/circuit/library/standard_gates/sx.py +3 -4
  85. qiskit/circuit/library/standard_gates/t.py +2 -2
  86. qiskit/circuit/library/standard_gates/u.py +3 -11
  87. qiskit/circuit/library/standard_gates/u1.py +15 -65
  88. qiskit/circuit/library/standard_gates/u2.py +1 -4
  89. qiskit/circuit/library/standard_gates/u3.py +3 -31
  90. qiskit/circuit/library/standard_gates/x.py +5 -7
  91. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -2
  92. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -2
  93. qiskit/circuit/library/standard_gates/y.py +3 -4
  94. qiskit/circuit/library/standard_gates/z.py +3 -3
  95. qiskit/circuit/library/templates/clifford/clifford_2_1.py +8 -9
  96. qiskit/circuit/library/templates/clifford/clifford_2_2.py +9 -10
  97. qiskit/circuit/library/templates/clifford/clifford_2_3.py +7 -9
  98. qiskit/circuit/library/templates/clifford/clifford_2_4.py +8 -9
  99. qiskit/circuit/library/templates/clifford/clifford_3_1.py +8 -9
  100. qiskit/circuit/library/templates/clifford/clifford_4_1.py +9 -10
  101. qiskit/circuit/library/templates/clifford/clifford_4_2.py +9 -10
  102. qiskit/circuit/library/templates/clifford/clifford_4_3.py +9 -10
  103. qiskit/circuit/library/templates/clifford/clifford_4_4.py +9 -10
  104. qiskit/circuit/library/templates/clifford/clifford_5_1.py +9 -10
  105. qiskit/circuit/library/templates/clifford/clifford_6_1.py +9 -10
  106. qiskit/circuit/library/templates/clifford/clifford_6_2.py +9 -10
  107. qiskit/circuit/library/templates/clifford/clifford_6_3.py +9 -10
  108. qiskit/circuit/library/templates/clifford/clifford_6_4.py +8 -9
  109. qiskit/circuit/library/templates/clifford/clifford_6_5.py +9 -10
  110. qiskit/circuit/library/templates/clifford/clifford_8_1.py +9 -10
  111. qiskit/circuit/library/templates/clifford/clifford_8_2.py +9 -10
  112. qiskit/circuit/library/templates/clifford/clifford_8_3.py +9 -10
  113. qiskit/circuit/library/templates/nct/template_nct_2a_1.py +7 -9
  114. qiskit/circuit/library/templates/nct/template_nct_2a_2.py +8 -10
  115. qiskit/circuit/library/templates/nct/template_nct_2a_3.py +10 -12
  116. qiskit/circuit/library/templates/nct/template_nct_4a_1.py +14 -16
  117. qiskit/circuit/library/templates/nct/template_nct_4a_2.py +12 -14
  118. qiskit/circuit/library/templates/nct/template_nct_4a_3.py +10 -12
  119. qiskit/circuit/library/templates/nct/template_nct_4b_1.py +12 -14
  120. qiskit/circuit/library/templates/nct/template_nct_4b_2.py +10 -12
  121. qiskit/circuit/library/templates/nct/template_nct_5a_1.py +10 -12
  122. qiskit/circuit/library/templates/nct/template_nct_5a_2.py +10 -12
  123. qiskit/circuit/library/templates/nct/template_nct_5a_3.py +10 -12
  124. qiskit/circuit/library/templates/nct/template_nct_5a_4.py +9 -11
  125. qiskit/circuit/library/templates/nct/template_nct_6a_1.py +9 -11
  126. qiskit/circuit/library/templates/nct/template_nct_6a_2.py +10 -12
  127. qiskit/circuit/library/templates/nct/template_nct_6a_3.py +10 -12
  128. qiskit/circuit/library/templates/nct/template_nct_6a_4.py +10 -12
  129. qiskit/circuit/library/templates/nct/template_nct_6b_1.py +10 -12
  130. qiskit/circuit/library/templates/nct/template_nct_6b_2.py +10 -12
  131. qiskit/circuit/library/templates/nct/template_nct_6c_1.py +10 -12
  132. qiskit/circuit/library/templates/nct/template_nct_7a_1.py +11 -13
  133. qiskit/circuit/library/templates/nct/template_nct_7b_1.py +11 -13
  134. qiskit/circuit/library/templates/nct/template_nct_7c_1.py +11 -13
  135. qiskit/circuit/library/templates/nct/template_nct_7d_1.py +11 -13
  136. qiskit/circuit/library/templates/nct/template_nct_7e_1.py +11 -13
  137. qiskit/circuit/library/templates/nct/template_nct_9a_1.py +11 -13
  138. qiskit/circuit/library/templates/nct/template_nct_9c_1.py +9 -11
  139. qiskit/circuit/library/templates/nct/template_nct_9c_10.py +10 -12
  140. qiskit/circuit/library/templates/nct/template_nct_9c_11.py +10 -12
  141. qiskit/circuit/library/templates/nct/template_nct_9c_12.py +10 -12
  142. qiskit/circuit/library/templates/nct/template_nct_9c_2.py +10 -12
  143. qiskit/circuit/library/templates/nct/template_nct_9c_3.py +10 -12
  144. qiskit/circuit/library/templates/nct/template_nct_9c_4.py +10 -12
  145. qiskit/circuit/library/templates/nct/template_nct_9c_5.py +10 -12
  146. qiskit/circuit/library/templates/nct/template_nct_9c_6.py +10 -12
  147. qiskit/circuit/library/templates/nct/template_nct_9c_7.py +10 -12
  148. qiskit/circuit/library/templates/nct/template_nct_9c_8.py +10 -12
  149. qiskit/circuit/library/templates/nct/template_nct_9c_9.py +10 -12
  150. qiskit/circuit/library/templates/nct/template_nct_9d_1.py +9 -11
  151. qiskit/circuit/library/templates/nct/template_nct_9d_10.py +10 -12
  152. qiskit/circuit/library/templates/nct/template_nct_9d_2.py +10 -12
  153. qiskit/circuit/library/templates/nct/template_nct_9d_3.py +10 -12
  154. qiskit/circuit/library/templates/nct/template_nct_9d_4.py +10 -12
  155. qiskit/circuit/library/templates/nct/template_nct_9d_5.py +10 -12
  156. qiskit/circuit/library/templates/nct/template_nct_9d_6.py +10 -12
  157. qiskit/circuit/library/templates/nct/template_nct_9d_7.py +10 -12
  158. qiskit/circuit/library/templates/nct/template_nct_9d_8.py +10 -12
  159. qiskit/circuit/library/templates/nct/template_nct_9d_9.py +10 -12
  160. qiskit/circuit/library/templates/rzx/rzx_cy.py +10 -11
  161. qiskit/circuit/library/templates/rzx/rzx_xz.py +15 -16
  162. qiskit/circuit/library/templates/rzx/rzx_yz.py +10 -12
  163. qiskit/circuit/library/templates/rzx/rzx_zz1.py +20 -22
  164. qiskit/circuit/library/templates/rzx/rzx_zz2.py +15 -16
  165. qiskit/circuit/library/templates/rzx/rzx_zz3.py +15 -17
  166. qiskit/circuit/parameter.py +0 -4
  167. qiskit/circuit/parameterexpression.py +34 -167
  168. qiskit/circuit/quantumcircuit.py +126 -162
  169. qiskit/circuit/singleton.py +0 -2
  170. qiskit/circuit/store.py +0 -2
  171. qiskit/compiler/assembler.py +4 -17
  172. qiskit/compiler/scheduler.py +0 -2
  173. qiskit/compiler/sequencer.py +0 -2
  174. qiskit/compiler/transpiler.py +26 -81
  175. qiskit/converters/circuit_to_dag.py +2 -2
  176. qiskit/converters/circuit_to_dagdependency.py +1 -1
  177. qiskit/converters/circuit_to_dagdependency_v2.py +1 -1
  178. qiskit/converters/circuit_to_instruction.py +1 -1
  179. qiskit/converters/dag_to_circuit.py +5 -7
  180. qiskit/converters/dag_to_dagdependency.py +1 -1
  181. qiskit/converters/dag_to_dagdependency_v2.py +1 -1
  182. qiskit/converters/dagdependency_to_circuit.py +1 -5
  183. qiskit/converters/dagdependency_to_dag.py +1 -6
  184. qiskit/dagcircuit/collect_blocks.py +3 -3
  185. qiskit/dagcircuit/dagdependency.py +5 -18
  186. qiskit/dagcircuit/dagdependency_v2.py +1 -1
  187. qiskit/dagcircuit/dagnode.py +2 -2
  188. qiskit/passmanager/__init__.py +2 -2
  189. qiskit/primitives/backend_estimator.py +2 -5
  190. qiskit/primitives/backend_sampler_v2.py +18 -61
  191. qiskit/primitives/base/base_estimator.py +2 -2
  192. qiskit/primitives/containers/data_bin.py +1 -9
  193. qiskit/primitives/statevector_sampler.py +1 -1
  194. qiskit/primitives/utils.py +1 -1
  195. qiskit/providers/__init__.py +3 -3
  196. qiskit/providers/backend.py +1 -12
  197. qiskit/providers/backend_compat.py +3 -23
  198. qiskit/providers/basic_provider/basic_simulator.py +2 -12
  199. qiskit/providers/fake_provider/fake_pulse_backend.py +1 -6
  200. qiskit/providers/fake_provider/generic_backend_v2.py +30 -46
  201. qiskit/providers/models/pulsedefaults.py +0 -2
  202. qiskit/pulse/builder.py +18 -59
  203. qiskit/pulse/calibration_entries.py +1 -4
  204. qiskit/pulse/channels.py +0 -2
  205. qiskit/pulse/exceptions.py +0 -2
  206. qiskit/pulse/instruction_schedule_map.py +6 -21
  207. qiskit/pulse/instructions/acquire.py +0 -2
  208. qiskit/pulse/instructions/delay.py +0 -2
  209. qiskit/pulse/instructions/directives.py +0 -8
  210. qiskit/pulse/instructions/frequency.py +0 -3
  211. qiskit/pulse/instructions/instruction.py +0 -2
  212. qiskit/pulse/instructions/phase.py +0 -3
  213. qiskit/pulse/instructions/play.py +0 -2
  214. qiskit/pulse/instructions/reference.py +0 -2
  215. qiskit/pulse/instructions/snapshot.py +0 -2
  216. qiskit/pulse/library/pulse.py +0 -2
  217. qiskit/pulse/library/symbolic_pulses.py +0 -28
  218. qiskit/pulse/library/waveform.py +0 -2
  219. qiskit/pulse/macros.py +1 -1
  220. qiskit/pulse/schedule.py +13 -12
  221. qiskit/pulse/transforms/alignments.py +3 -5
  222. qiskit/pulse/transforms/dag.py +0 -7
  223. qiskit/qasm2/export.py +3 -5
  224. qiskit/qasm2/parse.py +2 -46
  225. qiskit/qasm3/__init__.py +0 -1
  226. qiskit/qasm3/ast.py +15 -123
  227. qiskit/qasm3/exporter.py +77 -103
  228. qiskit/qobj/converters/pulse_instruction.py +4 -6
  229. qiskit/qpy/__init__.py +0 -181
  230. qiskit/qpy/binary_io/circuits.py +5 -20
  231. qiskit/qpy/binary_io/schedules.py +4 -3
  232. qiskit/qpy/binary_io/value.py +13 -310
  233. qiskit/qpy/common.py +2 -46
  234. qiskit/qpy/formats.py +0 -7
  235. qiskit/qpy/interface.py +4 -40
  236. qiskit/quantum_info/__init__.py +0 -4
  237. qiskit/quantum_info/operators/channel/transformations.py +21 -28
  238. qiskit/quantum_info/operators/dihedral/dihedral.py +1 -1
  239. qiskit/quantum_info/operators/operator.py +8 -54
  240. qiskit/quantum_info/operators/symplectic/base_pauli.py +19 -11
  241. qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
  242. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +1 -1
  243. qiskit/quantum_info/operators/symplectic/pauli.py +0 -2
  244. qiskit/quantum_info/operators/symplectic/pauli_list.py +4 -4
  245. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +2 -23
  246. qiskit/quantum_info/states/densitymatrix.py +5 -5
  247. qiskit/quantum_info/states/stabilizerstate.py +1 -1
  248. qiskit/quantum_info/states/statevector.py +6 -6
  249. qiskit/result/mitigation/base_readout_mitigator.py +1 -1
  250. qiskit/result/mitigation/correlated_readout_mitigator.py +1 -9
  251. qiskit/result/mitigation/local_readout_mitigator.py +1 -9
  252. qiskit/result/mitigation/utils.py +0 -57
  253. qiskit/scheduler/config.py +0 -2
  254. qiskit/scheduler/methods/basic.py +0 -3
  255. qiskit/scheduler/schedule_circuit.py +0 -2
  256. qiskit/scheduler/sequence.py +0 -2
  257. qiskit/synthesis/__init__.py +0 -25
  258. qiskit/synthesis/clifford/clifford_decompose_bm.py +2 -1
  259. qiskit/synthesis/clifford/clifford_decompose_greedy.py +2 -3
  260. qiskit/synthesis/clifford/clifford_decompose_layers.py +1 -2
  261. qiskit/synthesis/evolution/__init__.py +0 -1
  262. qiskit/synthesis/evolution/lie_trotter.py +42 -16
  263. qiskit/synthesis/evolution/product_formula.py +238 -165
  264. qiskit/synthesis/evolution/qdrift.py +29 -36
  265. qiskit/synthesis/evolution/suzuki_trotter.py +27 -87
  266. qiskit/synthesis/multi_controlled/__init__.py +0 -1
  267. qiskit/synthesis/qft/qft_decompose_full.py +1 -19
  268. qiskit/synthesis/qft/qft_decompose_lnn.py +1 -2
  269. qiskit/synthesis/stabilizer/stabilizer_decompose.py +1 -2
  270. qiskit/synthesis/two_qubit/two_qubit_decompose.py +63 -4
  271. qiskit/synthesis/two_qubit/weyl.py +97 -0
  272. qiskit/synthesis/unitary/qsd.py +5 -5
  273. qiskit/transpiler/__init__.py +14 -21
  274. qiskit/transpiler/basepasses.py +1 -1
  275. qiskit/transpiler/passes/__init__.py +0 -2
  276. qiskit/transpiler/passes/basis/basis_translator.py +565 -9
  277. qiskit/transpiler/passes/basis/decompose.py +12 -45
  278. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  279. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
  280. qiskit/transpiler/passes/calibration/pulse_gate.py +2 -4
  281. qiskit/transpiler/passes/calibration/rx_builder.py +7 -11
  282. qiskit/transpiler/passes/calibration/rzx_builder.py +30 -46
  283. qiskit/transpiler/passes/layout/disjoint_utils.py +13 -15
  284. qiskit/transpiler/passes/layout/sabre_layout.py +2 -7
  285. qiskit/transpiler/passes/layout/sabre_pre_layout.py +0 -5
  286. qiskit/transpiler/passes/optimization/__init__.py +0 -1
  287. qiskit/transpiler/passes/optimization/collect_cliffords.py +3 -19
  288. qiskit/transpiler/passes/optimization/collect_linear_functions.py +1 -1
  289. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
  290. qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +1 -1
  291. qiskit/transpiler/passes/optimization/consolidate_blocks.py +131 -48
  292. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +2 -4
  293. qiskit/transpiler/passes/optimization/elide_permutations.py +32 -9
  294. qiskit/transpiler/passes/optimization/inverse_cancellation.py +0 -2
  295. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +11 -5
  296. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
  297. qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +1 -1
  298. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +5 -5
  299. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +4 -4
  300. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +2 -2
  301. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +1 -1
  302. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
  303. qiskit/transpiler/passes/routing/sabre_swap.py +3 -7
  304. qiskit/transpiler/passes/routing/star_prerouting.py +2 -2
  305. qiskit/transpiler/passes/scheduling/alap.py +1 -1
  306. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +2 -2
  307. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
  308. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -2
  309. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +2 -2
  310. qiskit/transpiler/passes/scheduling/asap.py +1 -1
  311. qiskit/transpiler/passes/scheduling/base_scheduler.py +12 -14
  312. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +4 -9
  313. qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
  314. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +5 -16
  315. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +1 -4
  316. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +2 -6
  317. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -9
  318. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +99 -262
  319. qiskit/transpiler/passes/synthesis/hls_plugins.py +7 -638
  320. qiskit/transpiler/passes/synthesis/qubit_tracker.py +132 -0
  321. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +3 -3
  322. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -55
  323. qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +56 -2
  324. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -5
  325. qiskit/transpiler/passes/utils/gate_direction.py +275 -12
  326. qiskit/transpiler/passes/utils/gates_basis.py +30 -7
  327. qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +1 -2
  328. qiskit/transpiler/passmanager_config.py +4 -22
  329. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +14 -40
  330. qiskit/transpiler/preset_passmanagers/common.py +3 -5
  331. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +42 -125
  332. qiskit/transpiler/preset_passmanagers/plugin.py +1 -1
  333. qiskit/transpiler/target.py +16 -74
  334. qiskit/visualization/circuit/_utils.py +2 -2
  335. qiskit/visualization/circuit/circuit_visualization.py +2 -3
  336. qiskit/visualization/circuit/matplotlib.py +1 -1
  337. qiskit/visualization/dag_visualization.py +1 -1
  338. qiskit/visualization/pass_manager_visualization.py +14 -3
  339. qiskit/visualization/pulse_v2/interface.py +1 -3
  340. qiskit/visualization/timeline/core.py +2 -25
  341. qiskit/visualization/timeline/interface.py +0 -12
  342. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/METADATA +19 -20
  343. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/RECORD +347 -358
  344. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/WHEEL +1 -1
  345. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/entry_points.txt +0 -19
  346. qiskit/circuit/library/data_preparation/_zz_feature_map.py +0 -150
  347. qiskit/circuit/twirling.py +0 -145
  348. qiskit/synthesis/arithmetic/__init__.py +0 -16
  349. qiskit/synthesis/arithmetic/adders/__init__.py +0 -17
  350. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +0 -154
  351. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +0 -103
  352. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +0 -161
  353. qiskit/synthesis/arithmetic/multipliers/__init__.py +0 -16
  354. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +0 -102
  355. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +0 -99
  356. qiskit/synthesis/evolution/pauli_network.py +0 -80
  357. qiskit/synthesis/multi_controlled/mcmt_vchain.py +0 -52
  358. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +0 -69
  359. qiskit/utils/deprecate_pulse.py +0 -119
  360. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/LICENSE.txt +0 -0
  361. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/top_level.txt +0 -0
@@ -21,10 +21,8 @@ from qiskit.providers.backend import Backend
21
21
  from qiskit.pulse import InstructionScheduleMap, Schedule
22
22
  from qiskit.scheduler import ScheduleConfig
23
23
  from qiskit.scheduler.sequence import sequence as _sequence
24
- from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
25
24
 
26
25
 
27
- @deprecate_pulse_dependency(moving_to_dynamics=True)
28
26
  def sequence(
29
27
  scheduled_circuits: Union[QuantumCircuit, List[QuantumCircuit]],
30
28
  backend: Optional[Backend] = None,
@@ -32,41 +32,12 @@ from qiskit.transpiler.instruction_durations import InstructionDurationsType
32
32
  from qiskit.transpiler.passes.synthesis.high_level_synthesis import HLSConfig
33
33
  from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
34
34
  from qiskit.transpiler.target import Target
35
- from qiskit.utils import deprecate_arg
36
- from qiskit.utils.deprecate_pulse import deprecate_pulse_arg
37
35
 
38
36
  logger = logging.getLogger(__name__)
39
37
 
40
38
  _CircuitT = TypeVar("_CircuitT", bound=Union[QuantumCircuit, List[QuantumCircuit]])
41
39
 
42
40
 
43
- @deprecate_arg(
44
- name="instruction_durations",
45
- since="1.3",
46
- package_name="Qiskit",
47
- removal_timeline="in Qiskit 2.0",
48
- additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
49
- "with defined instruction durations with "
50
- "`Target.from_configuration(..., instruction_durations=...)`",
51
- )
52
- @deprecate_arg(
53
- name="timing_constraints",
54
- since="1.3",
55
- package_name="Qiskit",
56
- removal_timeline="in Qiskit 2.0",
57
- additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
58
- "with defined timing constraints with "
59
- "`Target.from_configuration(..., timing_constraints=...)`",
60
- )
61
- @deprecate_arg(
62
- name="backend_properties",
63
- since="1.3",
64
- package_name="Qiskit",
65
- removal_timeline="in Qiskit 2.0",
66
- additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
67
- "with defined properties with Target.from_configuration(..., backend_properties=...)",
68
- )
69
- @deprecate_pulse_arg("inst_map", predicate=lambda inst_map: inst_map is not None)
70
41
  def transpile( # pylint: disable=too-many-return-statements
71
42
  circuits: _CircuitT,
72
43
  backend: Optional[Backend] = None,
@@ -133,7 +104,7 @@ def transpile( # pylint: disable=too-many-return-statements
133
104
  will override the backend's.
134
105
  basis_gates: List of basis gate names to unroll to
135
106
  (e.g: ``['u1', 'u2', 'u3', 'cx']``). If ``None``, do not unroll.
136
- inst_map: DEPRECATED. Mapping of unrolled gates to pulse schedules. If this is not provided,
107
+ inst_map: Mapping of unrolled gates to pulse schedules. If this is not provided,
137
108
  transpiler tries to get from the backend. If any user defined calibration
138
109
  is found in the map and this is used in a circuit, transpiler attaches
139
110
  the custom gate definition to the circuit. This enables one to flexibly
@@ -394,57 +365,31 @@ def transpile( # pylint: disable=too-many-return-statements
394
365
  # Edge cases require using the old model (loose constraints) instead of building a target,
395
366
  # but we don't populate the passmanager config with loose constraints unless it's one of
396
367
  # the known edge cases to control the execution path.
397
- # Filter instruction_durations, timing_constraints, backend_properties and inst_map deprecation
398
- with warnings.catch_warnings():
399
- warnings.filterwarnings(
400
- "ignore",
401
- category=DeprecationWarning,
402
- message=".*``inst_map`` is deprecated as of Qiskit 1.3.*",
403
- module="qiskit",
404
- )
405
- warnings.filterwarnings(
406
- "ignore",
407
- category=DeprecationWarning,
408
- message=".*``timing_constraints`` is deprecated as of Qiskit 1.3.*",
409
- module="qiskit",
410
- )
411
- warnings.filterwarnings(
412
- "ignore",
413
- category=DeprecationWarning,
414
- message=".*``instruction_durations`` is deprecated as of Qiskit 1.3.*",
415
- module="qiskit",
416
- )
417
- warnings.filterwarnings(
418
- "ignore",
419
- category=DeprecationWarning,
420
- message=".*``backend_properties`` is deprecated as of Qiskit 1.3.*",
421
- module="qiskit",
422
- )
423
- pm = generate_preset_pass_manager(
424
- optimization_level,
425
- target=target,
426
- backend=backend,
427
- basis_gates=basis_gates,
428
- coupling_map=coupling_map,
429
- instruction_durations=instruction_durations,
430
- backend_properties=backend_properties,
431
- timing_constraints=timing_constraints,
432
- inst_map=inst_map,
433
- initial_layout=initial_layout,
434
- layout_method=layout_method,
435
- routing_method=routing_method,
436
- translation_method=translation_method,
437
- scheduling_method=scheduling_method,
438
- approximation_degree=approximation_degree,
439
- seed_transpiler=seed_transpiler,
440
- unitary_synthesis_method=unitary_synthesis_method,
441
- unitary_synthesis_plugin_config=unitary_synthesis_plugin_config,
442
- hls_config=hls_config,
443
- init_method=init_method,
444
- optimization_method=optimization_method,
445
- dt=dt,
446
- qubits_initially_zero=qubits_initially_zero,
447
- )
368
+ pm = generate_preset_pass_manager(
369
+ optimization_level,
370
+ target=target,
371
+ backend=backend,
372
+ basis_gates=basis_gates,
373
+ coupling_map=coupling_map,
374
+ instruction_durations=instruction_durations,
375
+ backend_properties=backend_properties,
376
+ timing_constraints=timing_constraints,
377
+ inst_map=inst_map,
378
+ initial_layout=initial_layout,
379
+ layout_method=layout_method,
380
+ routing_method=routing_method,
381
+ translation_method=translation_method,
382
+ scheduling_method=scheduling_method,
383
+ approximation_degree=approximation_degree,
384
+ seed_transpiler=seed_transpiler,
385
+ unitary_synthesis_method=unitary_synthesis_method,
386
+ unitary_synthesis_plugin_config=unitary_synthesis_plugin_config,
387
+ hls_config=hls_config,
388
+ init_method=init_method,
389
+ optimization_method=optimization_method,
390
+ dt=dt,
391
+ qubits_initially_zero=qubits_initially_zero,
392
+ )
448
393
 
449
394
  out_circuits = pm.run(circuits, callback=callback, num_processes=num_processes)
450
395
 
@@ -73,6 +73,6 @@ def circuit_to_dag(circuit, copy_operations=True, *, qubit_order=None, clbit_ord
73
73
 
74
74
  dagcircuit = core_circuit_to_dag(circuit, copy_operations, qubit_order, clbit_order)
75
75
 
76
- dagcircuit.duration = circuit._duration
77
- dagcircuit.unit = circuit._unit
76
+ dagcircuit.duration = circuit.duration
77
+ dagcircuit.unit = circuit.unit
78
78
  return dagcircuit
@@ -46,6 +46,6 @@ def circuit_to_dagdependency(circuit, create_preds_and_succs=True):
46
46
  dagdependency._add_predecessors()
47
47
  dagdependency._add_successors()
48
48
 
49
- dagdependency._calibrations = circuit._calibrations_prop
49
+ dagdependency.calibrations = circuit.calibrations
50
50
 
51
51
  return dagdependency
@@ -27,7 +27,7 @@ def _circuit_to_dagdependency_v2(circuit):
27
27
  dagdependency = _DAGDependencyV2()
28
28
  dagdependency.name = circuit.name
29
29
  dagdependency.metadata = circuit.metadata
30
- dagdependency._calibrations = circuit._calibrations_prop
30
+ dagdependency.calibrations = circuit.calibrations
31
31
  dagdependency.global_phase = circuit.global_phase
32
32
 
33
33
  dagdependency.add_qubits(circuit.qubits)
@@ -125,7 +125,7 @@ def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None
125
125
  if (out := operation_map.get(original_id)) is not None:
126
126
  return out
127
127
 
128
- condition = getattr(op, "_condition", None)
128
+ condition = getattr(op, "condition", None)
129
129
  if condition:
130
130
  reg, val = condition
131
131
  if isinstance(reg, Clbit):
@@ -13,7 +13,6 @@
13
13
  """Helper function for converting a dag to a circuit."""
14
14
 
15
15
  from qiskit.circuit import QuantumCircuit
16
- from qiskit._accelerate.converters import dag_to_circuit as dag_to_circuit_rs
17
16
 
18
17
 
19
18
  def dag_to_circuit(dag, copy_operations=True):
@@ -55,8 +54,6 @@ def dag_to_circuit(dag, copy_operations=True):
55
54
  """
56
55
 
57
56
  name = dag.name or None
58
-
59
- circuit_data = dag_to_circuit_rs(dag, copy_operations)
60
57
  circuit = QuantumCircuit(
61
58
  dag.qubits,
62
59
  dag.clbits,
@@ -70,10 +67,11 @@ def dag_to_circuit(dag, copy_operations=True):
70
67
  for var in dag.iter_declared_vars():
71
68
  circuit.add_uninitialized_var(var)
72
69
  circuit.metadata = dag.metadata
73
- circuit._calibrations_prop = dag._calibrations_prop
70
+ circuit.calibrations = dag.calibrations
74
71
 
75
- circuit._data = circuit_data
72
+ for node in dag.topological_op_nodes():
73
+ circuit._append(node._to_circuit_instruction(deepcopy=copy_operations))
76
74
 
77
- circuit._duration = dag.duration
78
- circuit._unit = dag.unit
75
+ circuit.duration = dag.duration
76
+ circuit.unit = dag.unit
79
77
  return circuit
@@ -50,6 +50,6 @@ def dag_to_dagdependency(dag, create_preds_and_succs=True):
50
50
 
51
51
  # copy metadata
52
52
  dagdependency.global_phase = dag.global_phase
53
- dagdependency._calibrations_prop = dag._calibrations_prop
53
+ dagdependency.calibrations = dag.calibrations
54
54
 
55
55
  return dagdependency
@@ -27,7 +27,7 @@ def _dag_to_dagdependency_v2(dag):
27
27
  dagdependency.name = dag.name
28
28
  dagdependency.metadata = dag.metadata
29
29
  dagdependency.global_phase = dag.global_phase
30
- dagdependency.calibrations = dag._calibrations_prop
30
+ dagdependency.calibrations = dag.calibrations
31
31
 
32
32
  dagdependency.add_qubits(dag.qubits)
33
33
  dagdependency.add_clbits(dag.clbits)
@@ -34,11 +34,7 @@ def dagdependency_to_circuit(dagdependency):
34
34
  )
35
35
  circuit.metadata = dagdependency.metadata
36
36
 
37
- if hasattr(dagdependency, "_calibrations_prop"):
38
- circuit._calibrations_prop = dagdependency._calibrations_prop
39
- else:
40
- # This can be _DAGDependencyV2
41
- circuit._calibrations_prop = dagdependency.calibrations
37
+ circuit.calibrations = dagdependency.calibrations
42
38
 
43
39
  for node in dagdependency.topological_nodes():
44
40
  circuit._append(CircuitInstruction(node.op.copy(), node.qargs, node.cargs))
@@ -12,7 +12,6 @@
12
12
 
13
13
  """Helper function for converting a dag dependency to a dag circuit"""
14
14
  from qiskit.dagcircuit.dagcircuit import DAGCircuit
15
- from qiskit.dagcircuit.dagdependency import DAGDependency
16
15
 
17
16
 
18
17
  def dagdependency_to_dag(dagdependency):
@@ -45,10 +44,6 @@ def dagdependency_to_dag(dagdependency):
45
44
 
46
45
  # copy metadata
47
46
  dagcircuit.global_phase = dagdependency.global_phase
48
- if isinstance(dagdependency, DAGDependency):
49
- dagcircuit._calibrations_prop = dagdependency._calibrations_prop
50
- else:
51
- # This can be _DAGDependencyV2
52
- dagcircuit._calibrations_prop = dagdependency.calibrations
47
+ dagcircuit.calibrations = dagdependency.calibrations
53
48
 
54
49
  return dagcircuit
@@ -306,7 +306,7 @@ def split_block_into_layers(block: list[DAGOpNode | DAGDepNode]):
306
306
  cur_bits = set(node.qargs)
307
307
  cur_bits.update(node.cargs)
308
308
 
309
- cond = getattr(node.op, "_condition", None)
309
+ cond = getattr(node.op, "condition", None)
310
310
  if cond is not None:
311
311
  cur_bits.update(condition_resources(cond).clbits)
312
312
 
@@ -356,7 +356,7 @@ class BlockCollapser:
356
356
  for node in block:
357
357
  cur_qubits.update(node.qargs)
358
358
  cur_clbits.update(node.cargs)
359
- cond = getattr(node.op, "_condition", None)
359
+ cond = getattr(node.op, "condition", None)
360
360
  if cond is not None:
361
361
  cur_clbits.update(condition_resources(cond).clbits)
362
362
  if isinstance(cond[0], ClassicalRegister):
@@ -378,7 +378,7 @@ class BlockCollapser:
378
378
 
379
379
  for node in block:
380
380
  instructions = qc.append(CircuitInstruction(node.op, node.qargs, node.cargs))
381
- cond = getattr(node.op, "_condition", None)
381
+ cond = getattr(node.op, "condition", None)
382
382
  if cond is not None:
383
383
  instructions.c_if(*cond)
384
384
 
@@ -29,7 +29,6 @@ from qiskit.circuit.classicalregister import ClassicalRegister, Clbit
29
29
  from qiskit.dagcircuit.exceptions import DAGDependencyError
30
30
  from qiskit.dagcircuit.dagdepnode import DAGDepNode
31
31
  from qiskit.pulse import Schedule
32
- from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
33
32
 
34
33
  if typing.TYPE_CHECKING:
35
34
  from qiskit.circuit.parameterexpression import ParameterExpression
@@ -72,7 +71,7 @@ class DAGDependency:
72
71
 
73
72
  Bell circuit with no measurement.
74
73
 
75
- .. code-block:: text
74
+ .. parsed-literal::
76
75
 
77
76
  ┌───┐
78
77
  qr_0: ┤ H ├──■──
@@ -147,17 +146,15 @@ class DAGDependency:
147
146
  self._global_phase = angle % (2 * math.pi)
148
147
 
149
148
  @property
150
- @deprecate_pulse_dependency(is_property=True)
151
149
  def calibrations(self) -> dict[str, dict[tuple, Schedule]]:
152
150
  """Return calibration dictionary.
153
151
 
154
152
  The custom pulse definition of a given gate is of the form
155
153
  ``{'gate_name': {(qubits, params): schedule}}``.
156
154
  """
157
- return self._calibrations_prop
155
+ return dict(self._calibrations)
158
156
 
159
157
  @calibrations.setter
160
- @deprecate_pulse_dependency(is_property=True)
161
158
  def calibrations(self, calibrations: dict[str, dict[tuple, Schedule]]):
162
159
  """Set the circuit calibration data from a dictionary of calibration definition.
163
160
 
@@ -165,16 +162,6 @@ class DAGDependency:
165
162
  calibrations (dict): A dictionary of input in the format
166
163
  {'gate_name': {(qubits, gate_params): schedule}}
167
164
  """
168
- self._calibrations_prop = calibrations
169
-
170
- @property
171
- def _calibrations_prop(self) -> dict[str, dict[tuple, Schedule]]:
172
- """An alternative path to be used internally to avoid deprecation warnings"""
173
- return dict(self._calibrations)
174
-
175
- @_calibrations_prop.setter
176
- def _calibrations_prop(self, calibrations: dict[str, dict[tuple, Schedule]]):
177
- """An alternative path to be used internally to avoid deprecation warnings"""
178
165
  self._calibrations = defaultdict(dict, calibrations)
179
166
 
180
167
  def to_retworkx(self):
@@ -409,13 +396,13 @@ class DAGDependency:
409
396
  for elem in qargs:
410
397
  qindices_list.append(self.qubits.index(elem))
411
398
 
412
- if getattr(operation, "_condition", None):
399
+ if getattr(operation, "condition", None):
413
400
  # The change to handling operation.condition follows code patterns in quantum_circuit.py.
414
401
  # However:
415
402
  # (1) cindices_list are specific to template optimization and should not be computed
416
403
  # in this place.
417
404
  # (2) Template optimization pass needs currently does not handle general conditions.
418
- cond_bits = condition_resources(operation._condition).clbits
405
+ cond_bits = condition_resources(operation.condition).clbits
419
406
  cindices_list = [self.clbits.index(clbit) for clbit in cond_bits]
420
407
  else:
421
408
  cindices_list = []
@@ -609,7 +596,7 @@ class DAGDependency:
609
596
  for nd in node_block:
610
597
  block_qargs |= set(nd.qargs)
611
598
  block_cargs |= set(nd.cargs)
612
- cond = getattr(nd.op, "_condition", None)
599
+ cond = getattr(nd.op, "condition", None)
613
600
  if cond is not None:
614
601
  block_cargs.update(condition_resources(cond).clbits)
615
602
 
@@ -56,7 +56,7 @@ class _DAGDependencyV2:
56
56
 
57
57
  Bell circuit with no measurement.
58
58
 
59
- .. code-block:: text
59
+ .. parsed-literal::
60
60
 
61
61
  ┌───┐
62
62
  qr_0: ┤ H ├──■──
@@ -92,8 +92,8 @@ def _make_expr_key(bit_indices):
92
92
 
93
93
 
94
94
  def _condition_op_eq(node1, node2, bit_indices1, bit_indices2):
95
- cond1 = node1.condition
96
- cond2 = node2.condition
95
+ cond1 = node1.op.condition
96
+ cond2 = node2.op.condition
97
97
  if isinstance(cond1, expr.Expr) and isinstance(cond2, expr.Expr):
98
98
  if not expr.structurally_equivalent(
99
99
  cond1, cond2, _make_expr_key(bit_indices1), _make_expr_key(bit_indices2)
@@ -133,7 +133,7 @@ new numbers that don't contain five.
133
133
 
134
134
  Output:
135
135
 
136
- .. code-block:: text
136
+ .. parsed-literal::
137
137
 
138
138
  [12346789, 464, 36784]
139
139
 
@@ -178,7 +178,7 @@ As before, we schedule these passes with the pass manager and run.
178
178
 
179
179
  Output:
180
180
 
181
- .. code-block:: text
181
+ .. parsed-literal::
182
182
 
183
183
  [12346789, 45654, 36784]
184
184
 
@@ -44,15 +44,13 @@ from .utils import _circuit_key, _observable_key, init_observable
44
44
  def _run_circuits(
45
45
  circuits: QuantumCircuit | list[QuantumCircuit],
46
46
  backend: BackendV1 | BackendV2,
47
- clear_metadata: bool = True,
48
47
  **run_options,
49
48
  ) -> tuple[list[Result], list[dict]]:
50
49
  """Remove metadata of circuits and run the circuits on a backend.
51
50
  Args:
52
51
  circuits: The circuits
53
52
  backend: The backend
54
- clear_metadata: Clear circuit metadata before passing to backend.run if
55
- True.
53
+ monitor: Enable job minotor if True
56
54
  **run_options: run_options
57
55
  Returns:
58
56
  The result and the metadata of the circuits
@@ -62,8 +60,7 @@ def _run_circuits(
62
60
  metadata = []
63
61
  for circ in circuits:
64
62
  metadata.append(circ.metadata)
65
- if clear_metadata:
66
- circ.metadata = {}
63
+ circ.metadata = {}
67
64
  if isinstance(backend, BackendV1):
68
65
  max_circuits = getattr(backend.configuration(), "max_experiments", None)
69
66
  elif isinstance(backend, BackendV2):
@@ -17,13 +17,12 @@ from __future__ import annotations
17
17
  import warnings
18
18
  from collections import defaultdict
19
19
  from dataclasses import dataclass
20
- from typing import Any, Iterable, Union
20
+ from typing import Iterable
21
21
 
22
22
  import numpy as np
23
23
  from numpy.typing import NDArray
24
24
 
25
25
  from qiskit.circuit import QuantumCircuit
26
- from qiskit.exceptions import QiskitError
27
26
  from qiskit.primitives.backend_estimator import _run_circuits
28
27
  from qiskit.primitives.base import BaseSamplerV2
29
28
  from qiskit.primitives.containers import (
@@ -54,11 +53,6 @@ class Options:
54
53
  Default: None.
55
54
  """
56
55
 
57
- run_options: dict[str, Any] | None = None
58
- """A dictionary of options to pass to the backend's ``run()`` method.
59
- Default: None (no option passed to backend's ``run`` method)
60
- """
61
-
62
56
 
63
57
  @dataclass
64
58
  class _MeasureInfo:
@@ -68,16 +62,6 @@ class _MeasureInfo:
68
62
  start: int
69
63
 
70
64
 
71
- ResultMemory = Union[list[str], list[list[float]], list[list[list[float]]]]
72
- """Type alias for possible level 2 and level 1 result memory formats. For level
73
- 2, the format is a list of bit strings. For level 1, format can be either a
74
- list of I/Q pairs (list with two floats) for each memory slot if using
75
- ``meas_return=avg`` or a list of of lists of I/Q pairs if using
76
- ``meas_return=single`` with the outer list indexing shot number and the inner
77
- list indexing memory slot.
78
- """
79
-
80
-
81
65
  class BackendSamplerV2(BaseSamplerV2):
82
66
  """Evaluates bitstrings for provided quantum circuits
83
67
 
@@ -107,9 +91,6 @@ class BackendSamplerV2(BaseSamplerV2):
107
91
  * ``seed_simulator``: The seed to use in the simulator. If None, a random seed will be used.
108
92
  Default: None.
109
93
 
110
- * ``run_options``: A dictionary of options to pass through to the ``run()``
111
- method of the wrapped :class:`~.BackendV2` instance.
112
-
113
94
  .. note::
114
95
 
115
96
  This class requires a backend that supports ``memory`` option.
@@ -184,27 +165,19 @@ class BackendSamplerV2(BaseSamplerV2):
184
165
  for circuits in bound_circuits:
185
166
  flatten_circuits.extend(np.ravel(circuits).tolist())
186
167
 
187
- run_opts = self._options.run_options or {}
188
168
  # run circuits
189
169
  results, _ = _run_circuits(
190
170
  flatten_circuits,
191
171
  self._backend,
192
- clear_metadata=False,
193
172
  memory=True,
194
173
  shots=shots,
195
174
  seed_simulator=self._options.seed_simulator,
196
- **run_opts,
197
175
  )
198
176
  result_memory = _prepare_memory(results)
199
177
 
200
178
  # pack memory to an ndarray of uint8
201
179
  results = []
202
180
  start = 0
203
- meas_level = (
204
- None
205
- if self._options.run_options is None
206
- else self._options.run_options.get("meas_level")
207
- )
208
181
  for pub, bound in zip(pubs, bound_circuits):
209
182
  meas_info, max_num_bytes = _analyze_circuit(pub.circuit)
210
183
  end = start + bound.size
@@ -216,7 +189,6 @@ class BackendSamplerV2(BaseSamplerV2):
216
189
  meas_info,
217
190
  max_num_bytes,
218
191
  pub.circuit.metadata,
219
- meas_level,
220
192
  )
221
193
  )
222
194
  start = end
@@ -225,43 +197,28 @@ class BackendSamplerV2(BaseSamplerV2):
225
197
 
226
198
  def _postprocess_pub(
227
199
  self,
228
- result_memory: list[ResultMemory],
200
+ result_memory: list[list[str]],
229
201
  shots: int,
230
202
  shape: tuple[int, ...],
231
203
  meas_info: list[_MeasureInfo],
232
204
  max_num_bytes: int,
233
205
  circuit_metadata: dict,
234
- meas_level: int | None,
235
206
  ) -> SamplerPubResult:
236
- """Converts the memory data into a sampler pub result
237
-
238
- For level 2 data, the memory data are stored in an array of bit arrays
239
- with the shape of the pub. For level 1 data, the data are stored in a
240
- complex numpy array.
241
- """
242
- if meas_level == 2 or meas_level is None:
243
- arrays = {
244
- item.creg_name: np.zeros(shape + (shots, item.num_bytes), dtype=np.uint8)
245
- for item in meas_info
246
- }
247
- memory_array = _memory_array(result_memory, max_num_bytes)
248
-
249
- for samples, index in zip(memory_array, np.ndindex(*shape)):
250
- for item in meas_info:
251
- ary = _samples_to_packed_array(samples, item.num_bits, item.start)
252
- arrays[item.creg_name][index] = ary
253
-
254
- meas = {
255
- item.creg_name: BitArray(arrays[item.creg_name], item.num_bits)
256
- for item in meas_info
257
- }
258
- elif meas_level == 1:
259
- raw = np.array(result_memory)
260
- cplx = raw[..., 0] + 1j * raw[..., 1]
261
- cplx = np.reshape(cplx, (*shape, *cplx.shape[1:]))
262
- meas = {item.creg_name: cplx for item in meas_info}
263
- else:
264
- raise QiskitError(f"Unsupported meas_level: {meas_level}")
207
+ """Converts the memory data into an array of bit arrays with the shape of the pub."""
208
+ arrays = {
209
+ item.creg_name: np.zeros(shape + (shots, item.num_bytes), dtype=np.uint8)
210
+ for item in meas_info
211
+ }
212
+ memory_array = _memory_array(result_memory, max_num_bytes)
213
+
214
+ for samples, index in zip(memory_array, np.ndindex(*shape)):
215
+ for item in meas_info:
216
+ ary = _samples_to_packed_array(samples, item.num_bits, item.start)
217
+ arrays[item.creg_name][index] = ary
218
+
219
+ meas = {
220
+ item.creg_name: BitArray(arrays[item.creg_name], item.num_bits) for item in meas_info
221
+ }
265
222
  return SamplerPubResult(
266
223
  DataBin(**meas, shape=shape),
267
224
  metadata={"shots": shots, "circuit_metadata": circuit_metadata},
@@ -291,7 +248,7 @@ def _analyze_circuit(circuit: QuantumCircuit) -> tuple[list[_MeasureInfo], int]:
291
248
  return meas_info, _min_num_bytes(max_num_bits)
292
249
 
293
250
 
294
- def _prepare_memory(results: list[Result]) -> list[ResultMemory]:
251
+ def _prepare_memory(results: list[Result]) -> list[list[str]]:
295
252
  """Joins splitted results if exceeding max_experiments"""
296
253
  lst = []
297
254
  for res in results:
@@ -92,7 +92,7 @@ class BaseEstimatorV1(BasePrimitive, Generic[T]):
92
92
  # calculate [ <psi1(theta1)|H1|psi1(theta1)> ]
93
93
  job = estimator.run([psi1], [H1], [theta1])
94
94
  job_result = job.result() # It will block until the job finishes.
95
- print(f"The primitive-job finished with result {job_result}")
95
+ print(f"The primitive-job finished with result {job_result}"))
96
96
 
97
97
  # calculate [ <psi1(theta1)|H1|psi1(theta1)>,
98
98
  # <psi2(theta2)|H2|psi2(theta2)>,
@@ -144,7 +144,7 @@ class BaseEstimatorV1(BasePrimitive, Generic[T]):
144
144
 
145
145
  .. code-block:: python
146
146
 
147
- values = parameter_values[i]
147
+ values = parameter_values[i].
148
148
 
149
149
  Args:
150
150
  circuits: one or more circuit objects.
@@ -34,22 +34,14 @@ class DataBin(ShapedMixin):
34
34
 
35
35
  .. code-block:: python
36
36
 
37
- import numpy as np
38
- from qiskit.primitives import DataBin, BitArray
39
-
40
37
  data = DataBin(
41
- alpha=BitArray.from_samples(["0010"]),
38
+ alpha=BitArray.from_bitstrings(["0010"]),
42
39
  beta=np.array([1.2])
43
40
  )
44
41
 
45
42
  print("alpha data:", data.alpha)
46
43
  print("beta data:", data.beta)
47
44
 
48
- .. code-block::
49
-
50
- alpha data: BitArray(<shape=(), num_shots=1, num_bits=2>)
51
- beta data: [1.2]
52
-
53
45
  """
54
46
 
55
47
  __slots__ = ("_data", "_shape")
@@ -287,6 +287,6 @@ def _final_measurement_mapping(circuit: QuantumCircuit) -> dict[tuple[ClassicalR
287
287
 
288
288
  def _has_control_flow(circuit: QuantumCircuit) -> bool:
289
289
  return any(
290
- isinstance((op := instruction.operation), ControlFlowOp) or op._condition
290
+ isinstance((op := instruction.operation), ControlFlowOp) or op.condition
291
291
  for instruction in circuit
292
292
  )