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
qiskit/qasm3/exporter.py CHANGED
@@ -30,6 +30,7 @@ from qiskit.circuit import (
30
30
  Barrier,
31
31
  CircuitInstruction,
32
32
  Clbit,
33
+ ControlledGate,
33
34
  Gate,
34
35
  Measure,
35
36
  Parameter,
@@ -139,16 +140,9 @@ class Exporter:
139
140
  ):
140
141
  """
141
142
  Args:
142
- includes: the filenames that should be emitted as includes.
143
-
144
- .. note::
145
-
146
- At present, only the standard-library file ``stdgates.inc`` is properly
147
- understood by the exporter, in the sense that it knows the gates it defines.
148
- You can specify other includes, but you will need to pass the names of the gates
149
- they define in the ``basis_gates`` argument to avoid the exporter outputting a
150
- separate ``gate`` definition.
151
-
143
+ includes: the filenames that should be emitted as includes. These files will be parsed
144
+ for gates, and any objects dumped from this exporter will use those definitions
145
+ where possible.
152
146
  basis_gates: the basic defined gate set of the backend.
153
147
  disable_constants: if ``True``, always emit floating-point constants for numeric
154
148
  parameter values. If ``False`` (the default), then values close to multiples of
@@ -208,60 +202,46 @@ class Exporter:
208
202
  # comparisons will work.
209
203
  _FIXED_PARAMETERS = (Parameter("p0"), Parameter("p1"), Parameter("p2"), Parameter("p3"))
210
204
 
211
- _CANONICAL_STANDARD_GATES = {
212
- standard: standard.gate_class(*_FIXED_PARAMETERS[: standard.num_params])
213
- for standard in StandardGate.all_gates()
214
- if not standard.is_controlled_gate
215
- }
216
- _CANONICAL_CONTROLLED_STANDARD_GATES = {
217
- standard: [
218
- standard.gate_class(*_FIXED_PARAMETERS[: standard.num_params], ctrl_state=ctrl_state)
219
- for ctrl_state in range(1 << standard.num_ctrl_qubits)
220
- ]
221
- for standard in StandardGate.all_gates()
222
- if standard.is_controlled_gate
223
- }
224
-
225
205
  # Mapping of symbols defined by `stdgates.inc` to their gate definition source.
226
206
  _KNOWN_INCLUDES = {
227
207
  "stdgates.inc": {
228
- "p": _CANONICAL_STANDARD_GATES[StandardGate.PhaseGate],
229
- "x": _CANONICAL_STANDARD_GATES[StandardGate.XGate],
230
- "y": _CANONICAL_STANDARD_GATES[StandardGate.YGate],
231
- "z": _CANONICAL_STANDARD_GATES[StandardGate.ZGate],
232
- "h": _CANONICAL_STANDARD_GATES[StandardGate.HGate],
233
- "s": _CANONICAL_STANDARD_GATES[StandardGate.SGate],
234
- "sdg": _CANONICAL_STANDARD_GATES[StandardGate.SdgGate],
235
- "t": _CANONICAL_STANDARD_GATES[StandardGate.TGate],
236
- "tdg": _CANONICAL_STANDARD_GATES[StandardGate.TdgGate],
237
- "sx": _CANONICAL_STANDARD_GATES[StandardGate.SXGate],
238
- "rx": _CANONICAL_STANDARD_GATES[StandardGate.RXGate],
239
- "ry": _CANONICAL_STANDARD_GATES[StandardGate.RYGate],
240
- "rz": _CANONICAL_STANDARD_GATES[StandardGate.RZGate],
241
- "cx": _CANONICAL_CONTROLLED_STANDARD_GATES[StandardGate.CXGate][1],
242
- "cy": _CANONICAL_CONTROLLED_STANDARD_GATES[StandardGate.CYGate][1],
243
- "cz": _CANONICAL_CONTROLLED_STANDARD_GATES[StandardGate.CZGate][1],
244
- "cp": _CANONICAL_CONTROLLED_STANDARD_GATES[StandardGate.CPhaseGate][1],
245
- "crx": _CANONICAL_CONTROLLED_STANDARD_GATES[StandardGate.CRXGate][1],
246
- "cry": _CANONICAL_CONTROLLED_STANDARD_GATES[StandardGate.CRYGate][1],
247
- "crz": _CANONICAL_CONTROLLED_STANDARD_GATES[StandardGate.CRZGate][1],
248
- "ch": _CANONICAL_CONTROLLED_STANDARD_GATES[StandardGate.CHGate][1],
249
- "swap": _CANONICAL_STANDARD_GATES[StandardGate.SwapGate],
250
- "ccx": _CANONICAL_CONTROLLED_STANDARD_GATES[StandardGate.CCXGate][3],
251
- "cswap": _CANONICAL_CONTROLLED_STANDARD_GATES[StandardGate.CSwapGate][1],
252
- "cu": _CANONICAL_CONTROLLED_STANDARD_GATES[StandardGate.CUGate][1],
253
- "CX": _CANONICAL_CONTROLLED_STANDARD_GATES[StandardGate.CXGate][1],
254
- "phase": _CANONICAL_STANDARD_GATES[StandardGate.PhaseGate],
255
- "cphase": _CANONICAL_CONTROLLED_STANDARD_GATES[StandardGate.CPhaseGate][1],
256
- "id": _CANONICAL_STANDARD_GATES[StandardGate.IGate],
257
- "u1": _CANONICAL_STANDARD_GATES[StandardGate.U1Gate],
258
- "u2": _CANONICAL_STANDARD_GATES[StandardGate.U2Gate],
259
- "u3": _CANONICAL_STANDARD_GATES[StandardGate.U3Gate],
208
+ "p": library.PhaseGate(*_FIXED_PARAMETERS[:1]),
209
+ "x": library.XGate(),
210
+ "y": library.YGate(),
211
+ "z": library.ZGate(),
212
+ "h": library.HGate(),
213
+ "s": library.SGate(),
214
+ "sdg": library.SdgGate(),
215
+ "t": library.TGate(),
216
+ "tdg": library.TdgGate(),
217
+ "sx": library.SXGate(),
218
+ "rx": library.RXGate(*_FIXED_PARAMETERS[:1]),
219
+ "ry": library.RYGate(*_FIXED_PARAMETERS[:1]),
220
+ "rz": library.RZGate(*_FIXED_PARAMETERS[:1]),
221
+ "cx": library.CXGate(),
222
+ "cy": library.CYGate(),
223
+ "cz": library.CZGate(),
224
+ "cp": library.CPhaseGate(*_FIXED_PARAMETERS[:1]),
225
+ "crx": library.CRXGate(*_FIXED_PARAMETERS[:1]),
226
+ "cry": library.CRYGate(*_FIXED_PARAMETERS[:1]),
227
+ "crz": library.CRZGate(*_FIXED_PARAMETERS[:1]),
228
+ "ch": library.CHGate(),
229
+ "swap": library.SwapGate(),
230
+ "ccx": library.CCXGate(),
231
+ "cswap": library.CSwapGate(),
232
+ "cu": library.CUGate(*_FIXED_PARAMETERS[:4]),
233
+ "CX": library.CXGate(),
234
+ "phase": library.PhaseGate(*_FIXED_PARAMETERS[:1]),
235
+ "cphase": library.CPhaseGate(*_FIXED_PARAMETERS[:1]),
236
+ "id": library.IGate(),
237
+ "u1": library.U1Gate(*_FIXED_PARAMETERS[:1]),
238
+ "u2": library.U2Gate(*_FIXED_PARAMETERS[:2]),
239
+ "u3": library.U3Gate(*_FIXED_PARAMETERS[:3]),
260
240
  },
261
241
  }
262
242
 
263
243
  _BUILTIN_GATES = {
264
- "U": _CANONICAL_STANDARD_GATES[StandardGate.UGate],
244
+ "U": library.UGate(*_FIXED_PARAMETERS[:3]),
265
245
  }
266
246
 
267
247
 
@@ -492,14 +472,9 @@ class SymbolTable:
492
472
  def get_gate(self, gate: Gate) -> ast.Identifier | None:
493
473
  """Lookup the identifier for a given `Gate`, if it exists."""
494
474
  canonical = _gate_canonical_form(gate)
475
+ # `our_defn.canonical is None` means a basis gate that we should assume is always valid.
495
476
  if (our_defn := self.gates.get(gate.name)) is not None and (
496
- # We arrange things such that the known definitions for the vast majority of gates we
497
- # will encounter are the exact same canonical instance, so an `is` check saves time.
498
- our_defn.canonical is canonical
499
- # `our_defn.canonical is None` means a basis gate that we should assume is always valid.
500
- or our_defn.canonical is None
501
- # The last catch, if the canonical form is some custom gate that compares equal to this.
502
- or our_defn.canonical == canonical
477
+ our_defn.canonical is None or our_defn.canonical == canonical
503
478
  ):
504
479
  return ast.Identifier(gate.name)
505
480
  if canonical._standard_gate is not None:
@@ -524,14 +499,11 @@ def _gate_canonical_form(gate: Gate) -> Gate:
524
499
  # If a gate is part of the Qiskit standard-library gates, we know we can safely produce a
525
500
  # reparameterised gate by passing the parameters positionally to the standard-gate constructor
526
501
  # (and control state, if appropriate).
527
- standard = gate._standard_gate
528
- if standard is None:
529
- return gate
530
- return (
531
- _CANONICAL_CONTROLLED_STANDARD_GATES[standard][gate.ctrl_state]
532
- if standard.is_controlled_gate
533
- else _CANONICAL_STANDARD_GATES[standard]
534
- )
502
+ if gate._standard_gate and not isinstance(gate, ControlledGate):
503
+ return gate.base_class(*_FIXED_PARAMETERS[: len(gate.params)])
504
+ elif gate._standard_gate:
505
+ return gate.base_class(*_FIXED_PARAMETERS[: len(gate.params)], ctrl_state=gate.ctrl_state)
506
+ return gate
535
507
 
536
508
 
537
509
  @dataclasses.dataclass
@@ -618,10 +590,12 @@ class QASM3Builder:
618
590
  self.scope = old_scope
619
591
  self.symbols = old_symbols
620
592
 
621
- def _lookup_bit(self, bit) -> ast.Identifier:
622
- """Lookup a Qiskit bit within the current context, and return the name that should be
593
+ def _lookup_variable(self, variable) -> ast.Identifier:
594
+ """Lookup a Qiskit object within the current context, and return the name that should be
623
595
  used to represent it in OpenQASM 3 programmes."""
624
- return self.symbols.get_variable(self.scope.bit_map[bit])
596
+ if isinstance(variable, Bit):
597
+ variable = self.scope.bit_map[variable]
598
+ return self.symbols.get_variable(variable)
625
599
 
626
600
  def build_program(self):
627
601
  """Builds a Program"""
@@ -701,9 +675,9 @@ class QASM3Builder:
701
675
  def build_includes(self):
702
676
  """Builds a list of included files."""
703
677
  for filename in self.includes:
704
- # Note: unknown include files have a corresponding `include` statement generated, but do
705
- # not actually define any gates; we rely on the user to pass those in `basis_gates`.
706
- for name, gate in _KNOWN_INCLUDES.get(filename, {}).items():
678
+ if (definitions := _KNOWN_INCLUDES.get(filename)) is None:
679
+ raise QASM3ExporterError(f"Unknown OpenQASM 3 include file: '{filename}'")
680
+ for name, gate in definitions.items():
707
681
  self.symbols.register_gate_without_definition(name, gate)
708
682
  yield ast.Include(filename)
709
683
 
@@ -928,7 +902,7 @@ class QASM3Builder:
928
902
  out = []
929
903
  for register in registers:
930
904
  name = self.symbols.register_variable(register.name, register, allow_rename=True)
931
- elements = [self._lookup_bit(bit) for bit in register]
905
+ elements = [self._lookup_variable(bit) for bit in register]
932
906
  for i, bit in enumerate(register):
933
907
  # This might shadow previous definitions, but that's not a problem.
934
908
  self.symbols.set_object_ident(
@@ -975,17 +949,18 @@ class QASM3Builder:
975
949
  if isinstance(instruction.operation, Gate):
976
950
  nodes = [self.build_gate_call(instruction)]
977
951
  elif isinstance(instruction.operation, Barrier):
978
- operands = [self._lookup_bit(operand) for operand in instruction.qubits]
952
+ operands = [self._lookup_variable(operand) for operand in instruction.qubits]
979
953
  nodes = [ast.QuantumBarrier(operands)]
980
954
  elif isinstance(instruction.operation, Measure):
981
955
  measurement = ast.QuantumMeasurement(
982
- [self._lookup_bit(operand) for operand in instruction.qubits]
956
+ [self._lookup_variable(operand) for operand in instruction.qubits]
983
957
  )
984
- qubit = self._lookup_bit(instruction.clbits[0])
958
+ qubit = self._lookup_variable(instruction.clbits[0])
985
959
  nodes = [ast.QuantumMeasurementAssignment(qubit, measurement)]
986
960
  elif isinstance(instruction.operation, Reset):
987
961
  nodes = [
988
- ast.QuantumReset(self._lookup_bit(operand)) for operand in instruction.qubits
962
+ ast.QuantumReset(self._lookup_variable(operand))
963
+ for operand in instruction.qubits
989
964
  ]
990
965
  elif isinstance(instruction.operation, Delay):
991
966
  nodes = [self.build_delay(instruction)]
@@ -1006,13 +981,13 @@ class QASM3Builder:
1006
981
  f" but received '{instruction.operation}'"
1007
982
  )
1008
983
 
1009
- if instruction.operation._condition is None:
984
+ if instruction.operation.condition is None:
1010
985
  statements.extend(nodes)
1011
986
  else:
1012
987
  body = ast.ProgramBlock(nodes)
1013
988
  statements.append(
1014
989
  ast.BranchingStatement(
1015
- self.build_expression(_lift_condition(instruction.operation._condition)),
990
+ self.build_expression(_lift_condition(instruction.operation.condition)),
1016
991
  body,
1017
992
  )
1018
993
  )
@@ -1119,14 +1094,9 @@ class QASM3Builder:
1119
1094
  body_ast = ast.ProgramBlock(self.build_current_scope())
1120
1095
  return ast.ForLoopStatement(indexset_ast, loop_parameter_ast, body_ast)
1121
1096
 
1122
- def _lookup_variable_for_expression(self, var):
1123
- if isinstance(var, Bit):
1124
- return self._lookup_bit(var)
1125
- return self.symbols.get_variable(var)
1126
-
1127
1097
  def build_expression(self, node: expr.Expr) -> ast.Expression:
1128
1098
  """Build an expression."""
1129
- return node.accept(_ExprBuilder(self._lookup_variable_for_expression))
1099
+ return node.accept(_ExprBuilder(self._lookup_variable))
1130
1100
 
1131
1101
  def build_delay(self, instruction: CircuitInstruction) -> ast.QuantumDelay:
1132
1102
  """Build a built-in delay statement."""
@@ -1146,7 +1116,9 @@ class QASM3Builder:
1146
1116
  "dt": ast.DurationUnit.SAMPLE,
1147
1117
  }
1148
1118
  duration = ast.DurationLiteral(duration_value, unit_map[unit])
1149
- return ast.QuantumDelay(duration, [self._lookup_bit(qubit) for qubit in instruction.qubits])
1119
+ return ast.QuantumDelay(
1120
+ duration, [self._lookup_variable(qubit) for qubit in instruction.qubits]
1121
+ )
1150
1122
 
1151
1123
  def build_integer(self, value) -> ast.IntegerLiteral:
1152
1124
  """Build an integer literal, raising a :obj:`.QASM3ExporterError` if the input is not
@@ -1166,11 +1138,9 @@ class QASM3Builder:
1166
1138
  # missing, pending a new system in Terra to replace it (2022-03-07).
1167
1139
  if not isinstance(expression, ParameterExpression):
1168
1140
  return expression
1169
- if isinstance(expression, Parameter):
1170
- return self.symbols.get_variable(expression).string
1171
1141
  return expression.subs(
1172
1142
  {
1173
- param: Parameter(self.symbols.get_variable(param).string, uuid=param.uuid)
1143
+ param: Parameter(self._lookup_variable(param).string)
1174
1144
  for param in expression.parameters
1175
1145
  }
1176
1146
  )
@@ -1183,14 +1153,18 @@ class QASM3Builder:
1183
1153
  ident = self.symbols.get_gate(instruction.operation)
1184
1154
  if ident is None:
1185
1155
  ident = self.define_gate(instruction.operation)
1186
- qubits = [self._lookup_bit(qubit) for qubit in instruction.qubits]
1187
- parameters = [
1188
- ast.StringifyAndPray(self._rebind_scoped_parameters(param))
1189
- for param in instruction.operation.params
1190
- ]
1191
- if not self.disable_constants:
1192
- for parameter in parameters:
1193
- parameter.obj = pi_check(parameter.obj, output="qasm")
1156
+ qubits = [self._lookup_variable(qubit) for qubit in instruction.qubits]
1157
+ if self.disable_constants:
1158
+ parameters = [
1159
+ ast.StringifyAndPray(self._rebind_scoped_parameters(param))
1160
+ for param in instruction.operation.params
1161
+ ]
1162
+ else:
1163
+ parameters = [
1164
+ ast.StringifyAndPray(pi_check(self._rebind_scoped_parameters(param), output="qasm"))
1165
+ for param in instruction.operation.params
1166
+ ]
1167
+
1194
1168
  return ast.QuantumGateCall(ident, qubits, parameters=parameters)
1195
1169
 
1196
1170
 
@@ -31,7 +31,6 @@ from qiskit.pulse.schedule import Schedule
31
31
  from qiskit.qobj import QobjMeasurementOption, PulseLibraryItem, PulseQobjInstruction
32
32
  from qiskit.qobj.utils import MeasLevel
33
33
  from qiskit.utils import deprecate_func
34
- from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
35
34
 
36
35
 
37
36
  class ParametricPulseShapes(Enum):
@@ -88,9 +87,9 @@ class InstructionToQobjConverter:
88
87
  This converter converts the Qiskit Pulse in-memory representation into
89
88
  the transfer layer format to submit the data from client to the server.
90
89
 
91
- The transfer layer format must be the text representation that conforms to
90
+ The transfer layer format must be the text representation that coforms to
92
91
  the `OpenPulse specification<https://arxiv.org/abs/1809.03452>`__.
93
- Extension to the OpenPulse can be achieved by subclassing this this with
92
+ Extention to the OpenPulse can be achieved by subclassing this this with
94
93
  extra methods corresponding to each augmented instruction. For example,
95
94
 
96
95
  .. code-block:: python
@@ -510,9 +509,9 @@ class QobjToInstructionConverter:
510
509
  This converter converts data from transfer layer into the in-memory representation of
511
510
  the front-end of Qiskit Pulse.
512
511
 
513
- The transfer layer format must be the text representation that conforms to
512
+ The transfer layer format must be the text representation that coforms to
514
513
  the `OpenPulse specification<https://arxiv.org/abs/1809.03452>`__.
515
- Extension to the OpenPulse can be achieved by subclassing this this with
514
+ Extention to the OpenPulse can be achieved by subclassing this this with
516
515
  extra methods corresponding to each augmented instruction. For example,
517
516
 
518
517
  .. code-block:: python
@@ -533,7 +532,6 @@ class QobjToInstructionConverter:
533
532
 
534
533
  __chan_regex__ = re.compile(r"([a-zA-Z]+)(\d+)")
535
534
 
536
- @deprecate_pulse_dependency
537
535
  def __init__(
538
536
  self,
539
537
  pulse_library: Optional[List[PulseLibraryItem]] = None,
qiskit/qpy/__init__.py CHANGED
@@ -97,8 +97,6 @@ Attributes:
97
97
  will be able to load all released format versions of QPY (up until
98
98
  ``QPY_VERSION``).
99
99
 
100
- .. _qpy_compatibility:
101
-
102
100
  QPY Compatibility
103
101
  =================
104
102
 
@@ -118,30 +116,6 @@ and how the feature will be internally handled.
118
116
 
119
117
  .. autoexception:: QPYLoadingDeprecatedFeatureWarning
120
118
 
121
- .. note::
122
-
123
- With versions of Qiskit before 1.2.4, the ``use_symengine=True`` argument to :func:`.qpy.dump`
124
- could cause problems with backwards compatibility if there were :class:`.ParameterExpression`
125
- objects to serialize. In particular:
126
-
127
- * When the loading version of Qiskit is 1.2.4 or greater, QPY files generated with any version
128
- of Qiskit >= 0.46.0 can be loaded. If a version of Qiskit between 0.45.0 and 0.45.3 was used
129
- to generate the files, and the non-default argument ``use_symengine=True`` was given to
130
- :func:`.qpy.dump`, the file can only be read if the version of ``symengine`` used in the
131
- generating environment was in the 0.11 or 0.13 series, but if the environment was created
132
- during the support window of Qiskit 0.45, it is likely that ``symengine==0.9.2`` was used.
133
-
134
- * When the loading version of Qiskit is between 0.46.0 and 1.2.2 inclusive, the file can only be
135
- read if the installed version of ``symengine`` in the loading environment matches the version
136
- used in the generating environment.
137
-
138
- To recover a QPY file that fails with ``symengine`` version-related errors during a call to
139
- :func:`.qpy.load`, first attempt to use Qiskit >= 1.2.4 to load the file. If this still fails,
140
- it is likely because Qiskit 0.45.x was used to generate the file with ``use_symengine=True``.
141
- In this case, use Qiskit 0.45.3 with ``symengine==0.9.2`` to load the file, and then re-export
142
- it to QPY setting ``use_symengine=False``. The resulting file can then be loaded by any later
143
- version of Qiskit.
144
-
145
119
  QPY format version history
146
120
  --------------------------
147
121
 
@@ -159,24 +133,6 @@ of QPY in qiskit-terra 0.18.0.
159
133
  * - Qiskit (qiskit-terra for < 1.0.0) version
160
134
  - :func:`.dump` format(s) output versions
161
135
  - :func:`.load` maximum supported version (older format versions can always be read)
162
- * - 1.3.0
163
- - 10, 11, 12, 13
164
- - 13
165
- * - 1.2.4
166
- - 10, 11, 12
167
- - 12
168
- * - 1.2.3 (yanked)
169
- - 10, 11, 12
170
- - 12
171
- * - 1.2.2
172
- - 10, 11, 12
173
- - 12
174
- * - 1.2.1
175
- - 10, 11, 12
176
- - 12
177
- * - 1.2.0
178
- - 10, 11, 12
179
- - 12
180
136
  * - 1.1.0
181
137
  - 10, 11, 12
182
138
  - 12
@@ -342,141 +298,6 @@ There is a circuit payload for each circuit (where the total number is dictated
342
298
  by ``num_circuits`` in the file header). There is no padding between the
343
299
  circuits in the data.
344
300
 
345
- .. _qpy_version_13:
346
-
347
- Version 13
348
- ----------
349
-
350
- Version 13 added a native Qiskit serialization representation for :class:`.ParameterExpression`.
351
- Previous QPY versions relied on either ``sympy`` or ``symengine`` to serialize the underlying symbolic
352
- expression. Starting in Version 13, QPY now represents the sequence of API calls used to create the
353
- :class:`.ParameterExpression`.
354
-
355
- The main change in the serialization format is in the :ref:`qpy_param_expr_v3` payload. The
356
- ``expr_size`` bytes following the head now contain an array of ``PARAM_EXPR_ELEM_V13`` structs. The
357
- intent is for this array to be read one struct at a time, where each struct describes one of the
358
- calls to make to reconstruct the :class:`.ParameterExpression`.
359
-
360
- PARAM_EXPR_ELEM_V13
361
- ~~~~~~~~~~~~~~~~~~~
362
-
363
- The struct format is defined as:
364
-
365
- .. code-block:: c
366
-
367
- struct {
368
- unsigned char op_code;
369
- char lhs_type;
370
- char lhs[16];
371
- char rhs_type;
372
- char rhs[16];
373
- } PARAM_EXPR_ELEM_V13;
374
-
375
- The ``op_code`` field is used to define the operation added to the :class:`.ParameterExpression`.
376
- The value can be:
377
-
378
- .. list-table:: PARAM_EXPR_ELEM_V13 op code values
379
- :header-rows: 1
380
-
381
- * - ``op_code``
382
- - :class:`.ParameterExpression` method
383
- * - 0
384
- - :meth:`~.ParameterExpression.__add__`
385
- * - 1
386
- - :meth:`~.ParameterExpression.__sub__`
387
- * - 2
388
- - :meth:`~.ParameterExpression.__mul__`
389
- * - 3
390
- - :meth:`~.ParameterExpression.__truediv__`
391
- * - 4
392
- - :meth:`~.ParameterExpression.__pow__`
393
- * - 5
394
- - :meth:`~.ParameterExpression.sin`
395
- * - 6
396
- - :meth:`~.ParameterExpression.cos`
397
- * - 7
398
- - :meth:`~.ParameterExpression.tan`
399
- * - 8
400
- - :meth:`~.ParameterExpression.arcsin`
401
- * - 9
402
- - :meth:`~.ParameterExpression.arccos`
403
- * - 10
404
- - :meth:`~.ParameterExpression.exp`
405
- * - 11
406
- - :meth:`~.ParameterExpression.log`
407
- * - 12
408
- - :meth:`~.ParameterExpression.sign`
409
- * - 13
410
- - :meth:`~.ParameterExpression.gradient`
411
- * - 14
412
- - :meth:`~.ParameterExpression.conjugate`
413
- * - 15
414
- - :meth:`~.ParameterExpression.subs`
415
- * - 16
416
- - :meth:`~.ParameterExpression.abs`
417
- * - 17
418
- - :meth:`~.ParameterExpression.arctan`
419
- * - 255
420
- - NULL
421
-
422
- The ``NULL`` value of 255 is only used to fill the op code field for
423
- entries that are not actual operations but indicate recursive definitions.
424
- Then the ``lhs_type`` and ``rhs_type`` fields are used to describe
425
- the operand types and can be one of the following UTF-8 encoded
426
- characters:
427
-
428
- .. list-table:: PARAM_EXPR_ELEM_V13 operand type values
429
- :header-rows: 1
430
-
431
- * - Value
432
- - Type
433
- * - ``n``
434
- - ``None``
435
- * - ``p``
436
- - :class:`.Parameter`
437
- * - ``f``
438
- - ``float``
439
- * - ``c``
440
- - ``complex``
441
- * - ``i``
442
- - ``int``
443
- * - ``s``
444
- - Recursive :class:`.ParameterExpression` definition start
445
- * - ``e``
446
- - Recursive :class:`.ParameterExpression` definition stop
447
- * - ``u``
448
- - substitution
449
-
450
- If the type value is ``f`` ,``c`` or ``i``, the corresponding ``lhs`` or `rhs``
451
- field widths are 128 bits each. In the case of floats, the literal value is encoded as a double
452
- with 0 padding, while complex numbers are encoded as real part followed by imaginary part,
453
- taking up 64 bits each. For ``i`, the value is encoded as a 64 bit signed integer with 0 padding
454
- for the full 128 bit width. ``n`` is used to represent a ``None`` and typically isn't directly used
455
- as it indicates an argument that's not used. For ``p`` the data is the UUID for the
456
- :class:`.Parameter` which can be looked up in the symbol map described in the
457
- ``map_elements`` outer :ref:`qpy_param_expr_v3` payload. If the type value is
458
- ``s`` this marks the start of a a new recursive section for a nested
459
- :class:`.ParameterExpression`. For example, in the following snippet there is an inner ``expr``
460
- contained in ``final_expr``, constituting a nested expression::
461
-
462
- from qiskit.circuit import Parameter
463
-
464
- x = Parameter("x")
465
- y = Parameter("y")
466
- z = Parameter("z")
467
-
468
- expr = (x + y) / 2
469
- final_expr = z**2 + expr
470
-
471
- When ``s`` is encountered, this indicates that until an ``e` struct is reached, the next structs
472
- are used for a recursive definition. For both
473
- ``s`` and ``e`` types, the data values are not used, and always set to 0. The type value
474
- of ``u`` is used to represent a substitution call. This is only used for ``lhs_type``
475
- and is always paired with an ``rhs_type`` of ``n``. The data value is the size in bytes of
476
- a :ref:`qpy_mapping` encoded mapping of :class:`.Parameter` names to their value for the
477
- :meth:`~.ParameterExpression.subs` call. The mapping data is immediately following the
478
- struct, and the next struct starts immediately after the mapping data.
479
-
480
301
  .. _qpy_version_12:
481
302
 
482
303
  Version 12
@@ -1800,8 +1621,6 @@ struct is used:
1800
1621
 
1801
1622
  this matches the internal C representation of Python's complex type. [#f3]_
1802
1623
 
1803
- References
1804
- ==========
1805
1624
 
1806
1625
  .. [#f1] https://tools.ietf.org/html/rfc1700
1807
1626
  .. [#f2] https://numpy.org/doc/stable/reference/generated/numpy.lib.format.html
@@ -318,13 +318,6 @@ def _read_instruction(
318
318
  use_symengine,
319
319
  standalone_vars,
320
320
  )
321
- if condition is not None:
322
- warnings.warn(
323
- f"The .condition attribute on {gate_name} will be loaded as an IfElseOp "
324
- "starting in Qiskit 2.0",
325
- FutureWarning,
326
- stacklevel=3,
327
- )
328
321
  inst_obj.condition = condition
329
322
  if instruction.label_size > 0:
330
323
  inst_obj.label = label
@@ -421,12 +414,6 @@ def _read_instruction(
421
414
  gate = gate_class(*params)
422
415
  if condition:
423
416
  if not isinstance(gate, ControlFlowOp):
424
- warnings.warn(
425
- f"The .condition attribute on {gate} will be loaded as an "
426
- "IfElseOp starting in Qiskit 2.0",
427
- FutureWarning,
428
- stacklevel=3,
429
- )
430
417
  gate = gate.c_if(*condition)
431
418
  else:
432
419
  gate.condition = condition
@@ -774,13 +761,13 @@ def _write_instruction(
774
761
  condition_type = type_keys.Condition.NONE
775
762
  condition_register = b""
776
763
  condition_value = 0
777
- if (op_condition := getattr(instruction.operation, "_condition", None)) is not None:
764
+ if (op_condition := getattr(instruction.operation, "condition", None)) is not None:
778
765
  if isinstance(op_condition, expr.Expr):
779
766
  condition_type = type_keys.Condition.EXPRESSION
780
767
  else:
781
768
  condition_type = type_keys.Condition.TWO_TUPLE
782
- condition_register = _dumps_register(instruction.operation._condition[0], index_map)
783
- condition_value = int(instruction.operation._condition[1])
769
+ condition_register = _dumps_register(instruction.operation.condition[0], index_map)
770
+ condition_value = int(instruction.operation.condition[1])
784
771
 
785
772
  gate_class_name = gate_class_name.encode(common.ENCODE)
786
773
  label = getattr(instruction.operation, "label", None)
@@ -1323,7 +1310,7 @@ def write_circuit(
1323
1310
  instruction_buffer.close()
1324
1311
 
1325
1312
  # Write calibrations
1326
- _write_calibrations(file_obj, circuit._calibrations_prop, metadata_serializer, version=version)
1313
+ _write_calibrations(file_obj, circuit.calibrations, metadata_serializer, version=version)
1327
1314
  _write_layout(file_obj, circuit)
1328
1315
 
1329
1316
 
@@ -1453,9 +1440,7 @@ def read_circuit(file_obj, version, metadata_deserializer=None, use_symengine=Fa
1453
1440
 
1454
1441
  # Read calibrations
1455
1442
  if version >= 5:
1456
- circ._calibrations_prop = _read_calibrations(
1457
- file_obj, version, vectors, metadata_deserializer
1458
- )
1443
+ circ.calibrations = _read_calibrations(file_obj, version, vectors, metadata_deserializer)
1459
1444
 
1460
1445
  for vec_name, (vector, initialized_params) in vectors.items():
1461
1446
  if len(initialized_params) != len(vector):
@@ -20,6 +20,9 @@ from io import BytesIO
20
20
 
21
21
  import numpy as np
22
22
  import symengine as sym
23
+ from symengine.lib.symengine_wrapper import ( # pylint: disable = no-name-in-module
24
+ load_basic,
25
+ )
23
26
 
24
27
  from qiskit.exceptions import QiskitError
25
28
  from qiskit.pulse import library, channels, instructions
@@ -28,7 +31,6 @@ from qiskit.qpy import formats, common, type_keys
28
31
  from qiskit.qpy.binary_io import value
29
32
  from qiskit.qpy.exceptions import QpyError
30
33
  from qiskit.pulse.configuration import Kernel, Discriminator
31
- from qiskit.utils.deprecate_pulse import ignore_pulse_deprecation_warnings
32
34
 
33
35
 
34
36
  def _read_channel(file_obj, version):
@@ -104,7 +106,7 @@ def _loads_symbolic_expr(expr_bytes, use_symengine=False):
104
106
  return None
105
107
  expr_bytes = zlib.decompress(expr_bytes)
106
108
  if use_symengine:
107
- return common.load_symengine_payload(expr_bytes)
109
+ return load_basic(expr_bytes)
108
110
  else:
109
111
  from sympy import parse_expr
110
112
 
@@ -511,7 +513,6 @@ def _dumps_reference_item(schedule, metadata_serializer, version):
511
513
  return type_key, data_bytes
512
514
 
513
515
 
514
- @ignore_pulse_deprecation_warnings
515
516
  def read_schedule_block(file_obj, version, metadata_deserializer=None, use_symengine=False):
516
517
  """Read a single ScheduleBlock from the file like object.
517
518