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
@@ -15,23 +15,20 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import collections.abc
18
- import io
19
18
  import struct
20
19
  import uuid
21
20
 
22
21
  import numpy as np
23
22
  import symengine
23
+ from symengine.lib.symengine_wrapper import ( # pylint: disable = no-name-in-module
24
+ load_basic,
25
+ )
24
26
 
25
27
 
26
28
  from qiskit.circuit import CASE_DEFAULT, Clbit, ClassicalRegister
27
29
  from qiskit.circuit.classical import expr, types
28
30
  from qiskit.circuit.parameter import Parameter
29
- from qiskit.circuit.parameterexpression import (
30
- ParameterExpression,
31
- op_code_to_method,
32
- _OPCode,
33
- _SUBS,
34
- )
31
+ from qiskit.circuit.parameterexpression import ParameterExpression
35
32
  from qiskit.circuit.parametervector import ParameterVector, ParameterVectorElement
36
33
  from qiskit.qpy import common, formats, exceptions, type_keys
37
34
 
@@ -56,132 +53,20 @@ def _write_parameter_vec(file_obj, obj):
56
53
  file_obj.write(name_bytes)
57
54
 
58
55
 
59
- def _encode_replay_entry(inst, file_obj, version, r_side=False):
60
- inst_type = None
61
- inst_data = None
62
- if inst is None:
63
- inst_type = "n"
64
- inst_data = b"\x00"
65
- elif isinstance(inst, Parameter):
66
- inst_type = "p"
67
- inst_data = inst.uuid.bytes
68
- elif isinstance(inst, complex):
69
- inst_type = "c"
70
- inst_data = struct.pack("!dd", inst.real, inst.imag)
71
- elif isinstance(inst, float):
72
- inst_type = "f"
73
- inst_data = struct.pack("!Qd", 0, inst)
74
- elif isinstance(inst, int):
75
- inst_type = "i"
76
- inst_data = struct.pack("!Qq", 0, inst)
77
- elif isinstance(inst, ParameterExpression):
78
- if not r_side:
79
- entry = struct.pack(
80
- formats.PARAM_EXPR_ELEM_V13_PACK,
81
- 255,
82
- "s".encode("utf8"),
83
- b"\x00",
84
- "n".encode("utf8"),
85
- b"\x00",
86
- )
87
- else:
88
- entry = struct.pack(
89
- formats.PARAM_EXPR_ELEM_V13_PACK,
90
- 255,
91
- "n".encode("utf8"),
92
- b"\x00",
93
- "s".encode("utf8"),
94
- b"\x00",
95
- )
96
- file_obj.write(entry)
97
- _write_parameter_expression_v13(file_obj, inst, version)
98
- if not r_side:
99
- entry = struct.pack(
100
- formats.PARAM_EXPR_ELEM_V13_PACK,
101
- 255,
102
- "e".encode("utf8"),
103
- b"\x00",
104
- "n".encode("utf8"),
105
- b"\x00",
106
- )
107
- else:
108
- entry = struct.pack(
109
- formats.PARAM_EXPR_ELEM_V13_PACK,
110
- 255,
111
- "n".encode("utf8"),
112
- b"\x00",
113
- "e".encode("utf8"),
114
- b"\x00",
115
- )
116
- file_obj.write(entry)
117
- inst_type = "n"
118
- inst_data = b"\x00"
56
+ def _write_parameter_expression(file_obj, obj, use_symengine, *, version):
57
+ if use_symengine:
58
+ expr_bytes = obj._symbol_expr.__reduce__()[1][0]
119
59
  else:
120
- raise exceptions.QpyError("Invalid parameter expression type")
121
- return inst_type, inst_data
122
-
60
+ from sympy import srepr, sympify
123
61
 
124
- def _encode_replay_subs(subs, file_obj, version):
125
- with io.BytesIO() as mapping_buf:
126
- subs_dict = {k.name: v for k, v in subs.binds.items()}
127
- common.write_mapping(
128
- mapping_buf, mapping=subs_dict, serializer=dumps_value, version=version
129
- )
130
- data = mapping_buf.getvalue()
131
- entry = struct.pack(
132
- formats.PARAM_EXPR_ELEM_V13_PACK,
133
- subs.op,
134
- "u".encode("utf8"),
135
- struct.pack("!QQ", len(data), 0),
136
- "n".encode("utf8"),
137
- b"\x00",
138
- )
139
- file_obj.write(entry)
140
- file_obj.write(data)
141
- return subs.binds
142
-
143
-
144
- def _write_parameter_expression_v13(file_obj, obj, version):
145
- symbol_map = {}
146
- for inst in obj._qpy_replay:
147
- if isinstance(inst, _SUBS):
148
- symbol_map.update(_encode_replay_subs(inst, file_obj, version))
149
- continue
150
- lhs_type, lhs = _encode_replay_entry(inst.lhs, file_obj, version)
151
- rhs_type, rhs = _encode_replay_entry(inst.rhs, file_obj, version, True)
152
- entry = struct.pack(
153
- formats.PARAM_EXPR_ELEM_V13_PACK,
154
- inst.op,
155
- lhs_type.encode("utf8"),
156
- lhs,
157
- rhs_type.encode("utf8"),
158
- rhs,
159
- )
160
- file_obj.write(entry)
161
- return symbol_map
62
+ expr_bytes = srepr(sympify(obj._symbol_expr)).encode(common.ENCODE)
162
63
 
163
-
164
- def _write_parameter_expression(file_obj, obj, use_symengine, *, version):
165
- extra_symbols = None
166
- if version < 13:
167
- if use_symengine:
168
- expr_bytes = obj._symbol_expr.__reduce__()[1][0]
169
- else:
170
- from sympy import srepr, sympify
171
-
172
- expr_bytes = srepr(sympify(obj._symbol_expr)).encode(common.ENCODE)
173
- else:
174
- with io.BytesIO() as buf:
175
- extra_symbols = _write_parameter_expression_v13(buf, obj, version)
176
- expr_bytes = buf.getvalue()
177
- symbol_table_len = len(obj._parameter_symbols)
178
- if extra_symbols:
179
- symbol_table_len += 2 * len(extra_symbols)
180
64
  param_expr_header_raw = struct.pack(
181
- formats.PARAMETER_EXPR_PACK, symbol_table_len, len(expr_bytes)
65
+ formats.PARAMETER_EXPR_PACK, len(obj._parameter_symbols), len(expr_bytes)
182
66
  )
183
67
  file_obj.write(param_expr_header_raw)
184
68
  file_obj.write(expr_bytes)
69
+
185
70
  for symbol, value in obj._parameter_symbols.items():
186
71
  symbol_key = type_keys.Value.assign(symbol)
187
72
 
@@ -207,49 +92,6 @@ def _write_parameter_expression(file_obj, obj, use_symengine, *, version):
207
92
  file_obj.write(elem_header)
208
93
  file_obj.write(symbol_data)
209
94
  file_obj.write(value_data)
210
- if extra_symbols:
211
- for symbol in extra_symbols:
212
- symbol_key = type_keys.Value.assign(symbol)
213
- # serialize key
214
- if symbol_key == type_keys.Value.PARAMETER_VECTOR:
215
- symbol_data = common.data_to_binary(symbol, _write_parameter_vec)
216
- else:
217
- symbol_data = common.data_to_binary(symbol, _write_parameter)
218
- # serialize value
219
- value_key, value_data = dumps_value(
220
- symbol, version=version, use_symengine=use_symengine
221
- )
222
-
223
- elem_header = struct.pack(
224
- formats.PARAM_EXPR_MAP_ELEM_V3_PACK,
225
- symbol_key,
226
- value_key,
227
- len(value_data),
228
- )
229
- file_obj.write(elem_header)
230
- file_obj.write(symbol_data)
231
- file_obj.write(value_data)
232
- for symbol in extra_symbols.values():
233
- symbol_key = type_keys.Value.assign(symbol)
234
- # serialize key
235
- if symbol_key == type_keys.Value.PARAMETER_VECTOR:
236
- symbol_data = common.data_to_binary(symbol, _write_parameter_vec)
237
- else:
238
- symbol_data = common.data_to_binary(symbol, _write_parameter)
239
- # serialize value
240
- value_key, value_data = dumps_value(
241
- symbol, version=version, use_symengine=use_symengine
242
- )
243
-
244
- elem_header = struct.pack(
245
- formats.PARAM_EXPR_MAP_ELEM_V3_PACK,
246
- symbol_key,
247
- value_key,
248
- len(value_data),
249
- )
250
- file_obj.write(elem_header)
251
- file_obj.write(symbol_data)
252
- file_obj.write(value_data)
253
95
 
254
96
 
255
97
  class _ExprWriter(expr.ExprVisitor[None]):
@@ -448,7 +290,7 @@ def _read_parameter_expression_v3(file_obj, vectors, use_symengine):
448
290
 
449
291
  payload = file_obj.read(data.expr_size)
450
292
  if use_symengine:
451
- expr_ = common.load_symengine_payload(payload)
293
+ expr_ = load_basic(payload)
452
294
  else:
453
295
  from sympy.parsing.sympy_parser import parse_expr
454
296
 
@@ -495,141 +337,6 @@ def _read_parameter_expression_v3(file_obj, vectors, use_symengine):
495
337
  return ParameterExpression(symbol_map, expr_)
496
338
 
497
339
 
498
- def _read_parameter_expression_v13(file_obj, vectors, version):
499
- data = formats.PARAMETER_EXPR(
500
- *struct.unpack(formats.PARAMETER_EXPR_PACK, file_obj.read(formats.PARAMETER_EXPR_SIZE))
501
- )
502
-
503
- payload = file_obj.read(data.expr_size)
504
-
505
- symbol_map = {}
506
- for _ in range(data.map_elements):
507
- elem_data = formats.PARAM_EXPR_MAP_ELEM_V3(
508
- *struct.unpack(
509
- formats.PARAM_EXPR_MAP_ELEM_V3_PACK,
510
- file_obj.read(formats.PARAM_EXPR_MAP_ELEM_V3_SIZE),
511
- )
512
- )
513
- symbol_key = type_keys.Value(elem_data.symbol_type)
514
-
515
- if symbol_key == type_keys.Value.PARAMETER:
516
- symbol = _read_parameter(file_obj)
517
- elif symbol_key == type_keys.Value.PARAMETER_VECTOR:
518
- symbol = _read_parameter_vec(file_obj, vectors)
519
- else:
520
- raise exceptions.QpyError(f"Invalid parameter expression map type: {symbol_key}")
521
-
522
- elem_key = type_keys.Value(elem_data.type)
523
- binary_data = file_obj.read(elem_data.size)
524
- if elem_key == type_keys.Value.INTEGER:
525
- value = struct.unpack("!q", binary_data)
526
- elif elem_key == type_keys.Value.FLOAT:
527
- value = struct.unpack("!d", binary_data)
528
- elif elem_key == type_keys.Value.COMPLEX:
529
- value = complex(*struct.unpack(formats.COMPLEX_PACK, binary_data))
530
- elif elem_key in (type_keys.Value.PARAMETER, type_keys.Value.PARAMETER_VECTOR):
531
- value = symbol._symbol_expr
532
- elif elem_key == type_keys.Value.PARAMETER_EXPRESSION:
533
- value = common.data_from_binary(
534
- binary_data,
535
- _read_parameter_expression_v13,
536
- vectors=vectors,
537
- )
538
- else:
539
- raise exceptions.QpyError(f"Invalid parameter expression map type: {elem_key}")
540
- symbol_map[symbol] = value
541
- with io.BytesIO(payload) as buf:
542
- return _read_parameter_expr_v13(buf, symbol_map, version, vectors)
543
-
544
-
545
- def _read_parameter_expr_v13(buf, symbol_map, version, vectors):
546
- param_uuid_map = {symbol.uuid: symbol for symbol in symbol_map if isinstance(symbol, Parameter)}
547
- name_map = {str(v): k for k, v in symbol_map.items()}
548
- data = buf.read(formats.PARAM_EXPR_ELEM_V13_SIZE)
549
- stack = []
550
- while data:
551
- expression_data = formats.PARAM_EXPR_ELEM_V13._make(
552
- struct.unpack(formats.PARAM_EXPR_ELEM_V13_PACK, data)
553
- )
554
- # LHS
555
- if expression_data.LHS_TYPE == b"p":
556
- stack.append(param_uuid_map[uuid.UUID(bytes=expression_data.LHS)])
557
- elif expression_data.LHS_TYPE == b"f":
558
- stack.append(struct.unpack("!Qd", expression_data.LHS)[1])
559
- elif expression_data.LHS_TYPE == b"n":
560
- pass
561
- elif expression_data.LHS_TYPE == b"c":
562
- stack.append(complex(*struct.unpack("!dd", expression_data.LHS)))
563
- elif expression_data.LHS_TYPE == b"i":
564
- stack.append(struct.unpack("!Qq", expression_data.LHS)[1])
565
- elif expression_data.LHS_TYPE == b"s":
566
- data = buf.read(formats.PARAM_EXPR_ELEM_V13_SIZE)
567
- continue
568
- elif expression_data.LHS_TYPE == b"e":
569
- data = buf.read(formats.PARAM_EXPR_ELEM_V13_SIZE)
570
- continue
571
- elif expression_data.LHS_TYPE == b"u":
572
- size = struct.unpack_from("!QQ", expression_data.LHS)[0]
573
- subs_map_data = buf.read(size)
574
- with io.BytesIO(subs_map_data) as mapping_buf:
575
- mapping = common.read_mapping(
576
- mapping_buf, deserializer=loads_value, version=version, vectors=vectors
577
- )
578
- stack.append({name_map[k]: v for k, v in mapping.items()})
579
- else:
580
- raise exceptions.QpyError(
581
- "Unknown ParameterExpression operation type {expression_data.LHS_TYPE}"
582
- )
583
- # RHS
584
- if expression_data.RHS_TYPE == b"p":
585
- stack.append(param_uuid_map[uuid.UUID(bytes=expression_data.RHS)])
586
- elif expression_data.RHS_TYPE == b"f":
587
- stack.append(struct.unpack("!Qd", expression_data.RHS)[1])
588
- elif expression_data.RHS_TYPE == b"n":
589
- pass
590
- elif expression_data.RHS_TYPE == b"c":
591
- stack.append(complex(*struct.unpack("!dd", expression_data.RHS)))
592
- elif expression_data.RHS_TYPE == b"i":
593
- stack.append(struct.unpack("!Qq", expression_data.RHS)[1])
594
- elif expression_data.RHS_TYPE == b"s":
595
- data = buf.read(formats.PARAM_EXPR_ELEM_V13_SIZE)
596
- continue
597
- elif expression_data.RHS_TYPE == b"e":
598
- data = buf.read(formats.PARAM_EXPR_ELEM_V13_SIZE)
599
- continue
600
- else:
601
- raise exceptions.QpyError(
602
- f"Unknown ParameterExpression operation type {expression_data.RHS_TYPE}"
603
- )
604
- if expression_data.OP_CODE == 255:
605
- continue
606
- method_str = op_code_to_method(_OPCode(expression_data.OP_CODE))
607
- if expression_data.OP_CODE in {0, 1, 2, 3, 4, 13, 15, 18, 19, 20}:
608
- rhs = stack.pop()
609
- lhs = stack.pop()
610
- # Reverse ops for commutative ops, which are add, mul (0 and 2 respectively)
611
- # op codes 13 and 15 can never be reversed and 18, 19, 20
612
- # are the reversed versions of non-commuative operations
613
- # so 1, 3, 4 and 18, 19, 20 handle this explicitly.
614
- if (
615
- not isinstance(lhs, ParameterExpression)
616
- and isinstance(rhs, ParameterExpression)
617
- and expression_data.OP_CODE in {0, 2}
618
- ):
619
- if expression_data.OP_CODE == 0:
620
- method_str = "__radd__"
621
- elif expression_data.OP_CODE == 2:
622
- method_str = "__rmul__"
623
- stack.append(getattr(rhs, method_str)(lhs))
624
- else:
625
- stack.append(getattr(lhs, method_str)(rhs))
626
- else:
627
- lhs = stack.pop()
628
- stack.append(getattr(lhs, method_str)())
629
- data = buf.read(formats.PARAM_EXPR_ELEM_V13_SIZE)
630
- return stack.pop()
631
-
632
-
633
340
  def _read_expr(
634
341
  file_obj,
635
342
  clbits: collections.abc.Sequence[Clbit],
@@ -960,17 +667,13 @@ def loads_value(
960
667
  if type_key == type_keys.Value.PARAMETER_EXPRESSION:
961
668
  if version < 3:
962
669
  return common.data_from_binary(binary_data, _read_parameter_expression)
963
- elif version < 13:
670
+ else:
964
671
  return common.data_from_binary(
965
672
  binary_data,
966
673
  _read_parameter_expression_v3,
967
674
  vectors=vectors,
968
675
  use_symengine=use_symengine,
969
676
  )
970
- else:
971
- return common.data_from_binary(
972
- binary_data, _read_parameter_expression_v13, vectors=vectors, version=version
973
- )
974
677
  if type_key == type_keys.Value.EXPRESSION:
975
678
  return common.data_from_binary(
976
679
  binary_data,
qiskit/qpy/common.py CHANGED
@@ -18,14 +18,9 @@ Common functions across several serialization and deserialization modules.
18
18
  import io
19
19
  import struct
20
20
 
21
- import symengine
22
- from symengine.lib.symengine_wrapper import ( # pylint: disable = no-name-in-module
23
- load_basic,
24
- )
21
+ from qiskit.qpy import formats
25
22
 
26
- from qiskit.qpy import formats, exceptions
27
-
28
- QPY_VERSION = 13
23
+ QPY_VERSION = 12
29
24
  QPY_COMPATIBILITY_VERSION = 10
30
25
  ENCODE = "utf8"
31
26
 
@@ -309,42 +304,3 @@ def mapping_from_binary(binary_data, deserializer, **kwargs):
309
304
  mapping = read_mapping(container, deserializer, **kwargs)
310
305
 
311
306
  return mapping
312
-
313
-
314
- def load_symengine_payload(payload: bytes) -> symengine.Expr:
315
- """Load a symengine expression from it's serialized cereal payload."""
316
- # This is a horrible hack to workaround the symengine version checking
317
- # it's deserialization does. There were no changes to the serialization
318
- # format between 0.11 and 0.13 but the deserializer checks that it can't
319
- # load across a major or minor version boundary. This works around it
320
- # by just lying about the generating version.
321
- symengine_version = symengine.__version__.split(".")
322
- major = payload[2]
323
- minor = payload[3]
324
- if int(symengine_version[1]) != minor:
325
- if major != 0:
326
- raise exceptions.QpyError(
327
- "Qiskit doesn't support loading a symengine payload generated with symengine >= 1.0"
328
- )
329
- if minor == 9:
330
- raise exceptions.QpyError(
331
- "Qiskit doesn't support loading a historical QPY file with `use_symengine=True` "
332
- "generated in an environment using symengine 0.9.0. If you need to load this file "
333
- "you can do so with Qiskit 0.45.x or 0.46.x and re-export the QPY file using "
334
- "`use_symengine=False`."
335
- )
336
- if minor not in (11, 13):
337
- raise exceptions.QpyError(
338
- f"Incompatible symengine version {major}.{minor} used to generate the QPY "
339
- "payload"
340
- )
341
- minor_version = int(symengine_version[1])
342
- if minor_version not in (11, 13):
343
- raise exceptions.QpyError(
344
- f"Incompatible installed symengine version {symengine.__version__} to load "
345
- "this QPY payload"
346
- )
347
- payload = bytearray(payload)
348
- payload[3] = minor_version
349
- payload = bytes(payload)
350
- return load_basic(payload)
qiskit/qpy/formats.py CHANGED
@@ -259,13 +259,6 @@ PARAMETER = namedtuple("PARAMETER", ["name_size", "uuid"])
259
259
  PARAMETER_PACK = "!H16s"
260
260
  PARAMETER_SIZE = struct.calcsize(PARAMETER_PACK)
261
261
 
262
- # PARAMETEREXPRESSION_ENTRY
263
- PARAM_EXPR_ELEM_V13 = namedtuple(
264
- "PARAM_EXPR_ELEM_V13", ["OP_CODE", "LHS_TYPE", "LHS", "RHS_TYPE", "RHS"]
265
- )
266
- PARAM_EXPR_ELEM_V13_PACK = "!Bc16sc16s"
267
- PARAM_EXPR_ELEM_V13_SIZE = struct.calcsize(PARAM_EXPR_ELEM_V13_PACK)
268
-
269
262
  # COMPLEX
270
263
  COMPLEX = namedtuple("COMPLEX", ["real", "imag"])
271
264
  COMPLEX_PACK = "!dd"
qiskit/qpy/interface.py CHANGED
@@ -25,9 +25,8 @@ from qiskit.circuit import QuantumCircuit
25
25
  from qiskit.pulse import ScheduleBlock
26
26
  from qiskit.exceptions import QiskitError
27
27
  from qiskit.qpy import formats, common, binary_io, type_keys
28
- from qiskit.qpy.exceptions import QPYLoadingDeprecatedFeatureWarning, QpyError
28
+ from qiskit.qpy.exceptions import QpyError
29
29
  from qiskit.version import __version__
30
- from qiskit.utils.deprecate_pulse import deprecate_pulse_arg
31
30
 
32
31
 
33
32
  # pylint: disable=invalid-name
@@ -74,11 +73,6 @@ VERSION_PATTERN = (
74
73
  VERSION_PATTERN_REGEX = re.compile(VERSION_PATTERN, re.VERBOSE | re.IGNORECASE)
75
74
 
76
75
 
77
- @deprecate_pulse_arg(
78
- "programs",
79
- deprecation_description="Passing `ScheduleBlock` to `programs`",
80
- predicate=lambda p: isinstance(p, ScheduleBlock),
81
- )
82
76
  def dump(
83
77
  programs: Union[List[QPY_SUPPORTED_TYPES], QPY_SUPPORTED_TYPES],
84
78
  file_obj: BinaryIO,
@@ -126,16 +120,15 @@ def dump(
126
120
  programs: QPY supported object(s) to store in the specified file like object.
127
121
  QPY supports :class:`.QuantumCircuit` and :class:`.ScheduleBlock`.
128
122
  Different data types must be separately serialized.
129
- Support for :class:`.ScheduleBlock` is deprecated since Qiskit 1.3.0.
130
123
  file_obj: The file like object to write the QPY data too
131
124
  metadata_serializer: An optional JSONEncoder class that
132
125
  will be passed the ``.metadata`` attribute for each program in ``programs`` and will be
133
126
  used as the ``cls`` kwarg on the `json.dump()`` call to JSON serialize that dictionary.
134
127
  use_symengine: If True, all objects containing symbolic expressions will be serialized
135
128
  using symengine's native mechanism. This is a faster serialization alternative,
136
- but not supported in all platforms. This flag only has an effect if the emitted QPY format
137
- version is 10, 11, or 12. For QPY format version >= 13 (which is the default starting in
138
- Qiskit 1.3.0) this flag is no longer used.
129
+ but not supported in all platforms. Please check that your target platform is supported
130
+ by the symengine library before setting this option, as it will be required by qpy to
131
+ deserialize the payload. For this reason, the option defaults to False.
139
132
  version: The QPY format version to emit. By default this defaults to
140
133
  the latest supported format of :attr:`~.qpy.QPY_VERSION`, however for
141
134
  compatibility reasons if you need to load the generated QPY payload with an older
@@ -151,17 +144,6 @@ def dump(
151
144
  from the QPY format at that version will persist. This should only be used if
152
145
  compatibility with loading the payload with an older version of Qiskit is necessary.
153
146
 
154
- .. note::
155
-
156
- If serializing a :class:`.QuantumCircuit` or :class:`.ScheduleBlock` that contain
157
- :class:`.ParameterExpression` objects with ``version`` set low with the intent to
158
- load the payload using a historical release of Qiskit, it is safest to set the
159
- ``use_symengine`` flag to ``False``. Versions of Qiskit prior to 1.2.4 cannot load
160
- QPY files containing ``symengine``-serialized :class:`.ParameterExpression` objects
161
- unless the version of ``symengine`` used between the loading and generating
162
- environments matches.
163
-
164
-
165
147
  Raises:
166
148
  QpyError: When multiple data format is mixed in the output.
167
149
  TypeError: When invalid data type is input.
@@ -215,10 +197,7 @@ def dump(
215
197
  file_obj.write(header)
216
198
  common.write_type_key(file_obj, type_key)
217
199
 
218
- pulse_gates = False
219
200
  for program in programs:
220
- if type_key == type_keys.Program.CIRCUIT and program._calibrations_prop:
221
- pulse_gates = True
222
201
  writer(
223
202
  file_obj,
224
203
  program,
@@ -227,13 +206,6 @@ def dump(
227
206
  version=version,
228
207
  )
229
208
 
230
- if pulse_gates:
231
- warnings.warn(
232
- category=DeprecationWarning,
233
- message="Pulse gates serialization is deprecated as of Qiskit 1.3. "
234
- "It will be removed in Qiskit 2.0.",
235
- )
236
-
237
209
 
238
210
  def load(
239
211
  file_obj: BinaryIO,
@@ -348,14 +320,6 @@ def load(
348
320
  loader = binary_io.read_circuit
349
321
  elif type_key == type_keys.Program.SCHEDULE_BLOCK:
350
322
  loader = binary_io.read_schedule_block
351
- warnings.warn(
352
- category=QPYLoadingDeprecatedFeatureWarning,
353
- message="Pulse gates deserialization is deprecated as of Qiskit 1.3 and "
354
- "will be removed in Qiskit 2.0. This is part of the deprecation plan for "
355
- "the entire Qiskit Pulse package. Once Pulse is removed, `ScheduleBlock` "
356
- "sections will be ignored when loading QPY files with pulse data.",
357
- )
358
-
359
323
  else:
360
324
  raise TypeError(f"Invalid payload format data kind '{type_key}'.")
361
325
 
@@ -28,7 +28,6 @@ Operators
28
28
  Pauli
29
29
  Clifford
30
30
  ScalarOp
31
- SparseObservable
32
31
  SparsePauliOp
33
32
  CNOTDihedral
34
33
  PauliList
@@ -114,9 +113,6 @@ Analysis
114
113
  """
115
114
 
116
115
  from __future__ import annotations
117
-
118
- from qiskit._accelerate.sparse_observable import SparseObservable
119
-
120
116
  from .analysis import hellinger_distance, hellinger_fidelity, Z2Symmetries
121
117
  from .operators import (
122
118
  Clifford,
@@ -220,39 +220,32 @@ def _kraus_to_choi(data):
220
220
 
221
221
  def _choi_to_kraus(data, input_dim, output_dim, atol=ATOL_DEFAULT):
222
222
  """Transform Choi representation to Kraus representation."""
223
- import scipy.linalg
223
+ from scipy import linalg as la
224
224
 
225
225
  # Check if hermitian matrix
226
226
  if is_hermitian_matrix(data, atol=atol):
227
- # Ideally we'd use `eigh`, but `scipy.linalg.eigh` has stability problems on macOS (at a
228
- # minimum from SciPy 1.1 to 1.13 with the bundled OpenBLAS, or ~0.3.6 before they started
229
- # bundling one in). The Schur form of a Hermitian matrix is guaranteed diagonal:
230
- #
231
- # H = U T U+ for upper-triangular T.
232
- # => H+ = U T+ U+
233
- # => T = T+ because H = H+, and thus T cannot have super-diagonal elements.
234
- #
235
- # So the eigenvalues are on the diagonal, therefore the basis-transformation matrix must be
236
- # a spanning set of the eigenspace.
237
- triangular, vecs = scipy.linalg.schur(data)
238
- values = triangular.diagonal().real
239
- # If we're not a CP map, fall-through back to the generalization handling. Since we needed
240
- # to get the eigenvalues anyway, we can do the CP check manually rather than deferring to a
241
- # separate re-calculation.
242
- if all(values >= -atol):
243
- kraus = [
244
- math.sqrt(value) * vec.reshape((output_dim, input_dim), order="F")
245
- for value, vec in zip(values, vecs.T)
246
- if abs(value) > atol
247
- ]
248
- # If we are converting a zero matrix, we need to return a Kraus set with a single
249
- # zero-element Kraus matrix
227
+ # Get eigen-decomposition of Choi-matrix
228
+ # This should be a call to la.eigh, but there is an OpenBlas
229
+ # threading issue that is causing segfaults.
230
+ # Need schur here since la.eig does not
231
+ # guarantee orthogonality in degenerate subspaces
232
+ w, v = la.schur(data, output="complex")
233
+ w = w.diagonal().real
234
+ # Check eigenvalues are non-negative
235
+ if len(w[w < -atol]) == 0:
236
+ # CP-map Kraus representation
237
+ kraus = []
238
+ for val, vec in zip(w, v.T):
239
+ if abs(val) > atol:
240
+ k = np.sqrt(val) * vec.reshape((output_dim, input_dim), order="F")
241
+ kraus.append(k)
242
+ # If we are converting a zero matrix, we need to return a Kraus set
243
+ # with a single zero-element Kraus matrix
250
244
  if not kraus:
251
- kraus = [np.zeros((output_dim, input_dim), dtype=complex)]
245
+ kraus.append(np.zeros((output_dim, input_dim), dtype=complex))
252
246
  return kraus, None
253
- # Fall through.
254
- # Non-CP-map generalized Kraus representation.
255
- mat_u, svals, mat_vh = scipy.linalg.svd(data)
247
+ # Non-CP-map generalized Kraus representation
248
+ mat_u, svals, mat_vh = la.svd(data)
256
249
  kraus_l = []
257
250
  kraus_r = []
258
251
  for val, vec_l, vec_r in zip(svals, mat_u.T, mat_vh.conj()):
@@ -62,7 +62,7 @@ class CNOTDihedral(BaseOperator, AdjointMixin):
62
62
  # Print the CNOTDihedral element
63
63
  print(elem)
64
64
 
65
- .. code-block:: text
65
+ .. parsed-literal::
66
66
 
67
67
  phase polynomial =
68
68
  0 + 3*x_0 + 3*x_1 + 2*x_0*x_1