qiskit 1.3.0b1__cp39-abi3-win32.whl → 1.3.0rc2__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 (360) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +20 -1
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/assembler/assemble_schedules.py +2 -0
  5. qiskit/circuit/__init__.py +44 -1
  6. qiskit/circuit/_standard_gates_commutations.py +585 -0
  7. qiskit/circuit/barrier.py +2 -0
  8. qiskit/circuit/controlflow/builder.py +3 -3
  9. qiskit/circuit/controlflow/if_else.py +13 -5
  10. qiskit/circuit/controlflow/while_loop.py +10 -2
  11. qiskit/circuit/delay.py +20 -3
  12. qiskit/circuit/equivalence.py +13 -214
  13. qiskit/circuit/gate.py +3 -1
  14. qiskit/circuit/instruction.py +32 -11
  15. qiskit/circuit/instructionset.py +2 -0
  16. qiskit/circuit/library/__init__.py +110 -14
  17. qiskit/circuit/library/arithmetic/__init__.py +9 -2
  18. qiskit/circuit/library/arithmetic/adders/__init__.py +1 -0
  19. qiskit/circuit/library/arithmetic/adders/adder.py +154 -2
  20. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +20 -56
  21. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +14 -1
  22. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +21 -91
  23. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
  24. qiskit/circuit/library/arithmetic/multipliers/__init__.py +1 -0
  25. qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +8 -1
  26. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +94 -3
  27. qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +8 -1
  28. qiskit/circuit/library/arithmetic/weighted_adder.py +1 -1
  29. qiskit/circuit/library/basis_change/qft.py +20 -38
  30. qiskit/circuit/library/blueprintcircuit.py +64 -0
  31. qiskit/circuit/library/boolean_logic/__init__.py +4 -4
  32. qiskit/circuit/library/boolean_logic/inner_product.py +81 -4
  33. qiskit/circuit/library/boolean_logic/quantum_and.py +107 -4
  34. qiskit/circuit/library/boolean_logic/quantum_or.py +107 -3
  35. qiskit/circuit/library/boolean_logic/quantum_xor.py +97 -3
  36. qiskit/circuit/library/data_preparation/__init__.py +6 -3
  37. qiskit/circuit/library/data_preparation/{z_feature_map.py → _z_feature_map.py} +45 -34
  38. qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
  39. qiskit/circuit/library/data_preparation/pauli_feature_map.py +342 -29
  40. qiskit/circuit/library/fourier_checking.py +72 -11
  41. qiskit/circuit/library/generalized_gates/__init__.py +1 -1
  42. qiskit/circuit/library/generalized_gates/diagonal.py +45 -51
  43. qiskit/circuit/library/generalized_gates/gms.py +67 -14
  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 +12 -6
  47. qiskit/circuit/library/generalized_gates/mcmt.py +167 -107
  48. qiskit/circuit/library/generalized_gates/permutation.py +8 -6
  49. qiskit/circuit/library/generalized_gates/rv.py +8 -9
  50. qiskit/circuit/library/graph_state.py +93 -10
  51. qiskit/circuit/library/grover_operator.py +270 -2
  52. qiskit/circuit/library/hidden_linear_function.py +83 -20
  53. qiskit/circuit/library/iqp.py +99 -20
  54. qiskit/circuit/library/n_local/__init__.py +19 -7
  55. qiskit/circuit/library/n_local/efficient_su2.py +118 -5
  56. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +259 -0
  57. qiskit/circuit/library/n_local/excitation_preserving.py +130 -6
  58. qiskit/circuit/library/n_local/n_local.py +406 -5
  59. qiskit/circuit/library/n_local/pauli_two_design.py +106 -4
  60. qiskit/circuit/library/n_local/qaoa_ansatz.py +80 -1
  61. qiskit/circuit/library/n_local/real_amplitudes.py +127 -7
  62. qiskit/circuit/library/n_local/two_local.py +14 -7
  63. qiskit/circuit/library/overlap.py +91 -26
  64. qiskit/circuit/library/pauli_evolution.py +17 -15
  65. qiskit/circuit/library/phase_estimation.py +80 -4
  66. qiskit/circuit/library/quantum_volume.py +72 -20
  67. qiskit/circuit/library/standard_gates/__init__.py +20 -1
  68. qiskit/circuit/library/standard_gates/dcx.py +2 -1
  69. qiskit/circuit/library/standard_gates/ecr.py +2 -2
  70. qiskit/circuit/library/standard_gates/h.py +4 -3
  71. qiskit/circuit/library/standard_gates/i.py +2 -1
  72. qiskit/circuit/library/standard_gates/iswap.py +2 -2
  73. qiskit/circuit/library/standard_gates/p.py +20 -12
  74. qiskit/circuit/library/standard_gates/r.py +1 -1
  75. qiskit/circuit/library/standard_gates/rx.py +4 -3
  76. qiskit/circuit/library/standard_gates/rxx.py +2 -2
  77. qiskit/circuit/library/standard_gates/ry.py +4 -3
  78. qiskit/circuit/library/standard_gates/ryy.py +2 -2
  79. qiskit/circuit/library/standard_gates/rz.py +13 -12
  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 +4 -3
  85. qiskit/circuit/library/standard_gates/t.py +2 -2
  86. qiskit/circuit/library/standard_gates/u.py +11 -3
  87. qiskit/circuit/library/standard_gates/u1.py +65 -15
  88. qiskit/circuit/library/standard_gates/u2.py +4 -1
  89. qiskit/circuit/library/standard_gates/u3.py +31 -3
  90. qiskit/circuit/library/standard_gates/x.py +7 -5
  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 +4 -3
  94. qiskit/circuit/library/standard_gates/z.py +3 -3
  95. qiskit/circuit/library/templates/clifford/clifford_2_1.py +9 -8
  96. qiskit/circuit/library/templates/clifford/clifford_2_2.py +10 -9
  97. qiskit/circuit/library/templates/clifford/clifford_2_3.py +9 -7
  98. qiskit/circuit/library/templates/clifford/clifford_2_4.py +9 -8
  99. qiskit/circuit/library/templates/clifford/clifford_3_1.py +9 -8
  100. qiskit/circuit/library/templates/clifford/clifford_4_1.py +10 -9
  101. qiskit/circuit/library/templates/clifford/clifford_4_2.py +10 -9
  102. qiskit/circuit/library/templates/clifford/clifford_4_3.py +10 -9
  103. qiskit/circuit/library/templates/clifford/clifford_4_4.py +10 -9
  104. qiskit/circuit/library/templates/clifford/clifford_5_1.py +10 -9
  105. qiskit/circuit/library/templates/clifford/clifford_6_1.py +10 -9
  106. qiskit/circuit/library/templates/clifford/clifford_6_2.py +10 -9
  107. qiskit/circuit/library/templates/clifford/clifford_6_3.py +10 -9
  108. qiskit/circuit/library/templates/clifford/clifford_6_4.py +9 -8
  109. qiskit/circuit/library/templates/clifford/clifford_6_5.py +10 -9
  110. qiskit/circuit/library/templates/clifford/clifford_8_1.py +10 -9
  111. qiskit/circuit/library/templates/clifford/clifford_8_2.py +10 -9
  112. qiskit/circuit/library/templates/clifford/clifford_8_3.py +10 -9
  113. qiskit/circuit/library/templates/nct/template_nct_2a_1.py +9 -7
  114. qiskit/circuit/library/templates/nct/template_nct_2a_2.py +10 -8
  115. qiskit/circuit/library/templates/nct/template_nct_2a_3.py +12 -10
  116. qiskit/circuit/library/templates/nct/template_nct_4a_1.py +16 -14
  117. qiskit/circuit/library/templates/nct/template_nct_4a_2.py +14 -12
  118. qiskit/circuit/library/templates/nct/template_nct_4a_3.py +12 -10
  119. qiskit/circuit/library/templates/nct/template_nct_4b_1.py +14 -12
  120. qiskit/circuit/library/templates/nct/template_nct_4b_2.py +12 -10
  121. qiskit/circuit/library/templates/nct/template_nct_5a_1.py +12 -10
  122. qiskit/circuit/library/templates/nct/template_nct_5a_2.py +12 -10
  123. qiskit/circuit/library/templates/nct/template_nct_5a_3.py +12 -10
  124. qiskit/circuit/library/templates/nct/template_nct_5a_4.py +11 -9
  125. qiskit/circuit/library/templates/nct/template_nct_6a_1.py +11 -9
  126. qiskit/circuit/library/templates/nct/template_nct_6a_2.py +12 -10
  127. qiskit/circuit/library/templates/nct/template_nct_6a_3.py +12 -10
  128. qiskit/circuit/library/templates/nct/template_nct_6a_4.py +12 -10
  129. qiskit/circuit/library/templates/nct/template_nct_6b_1.py +12 -10
  130. qiskit/circuit/library/templates/nct/template_nct_6b_2.py +12 -10
  131. qiskit/circuit/library/templates/nct/template_nct_6c_1.py +12 -10
  132. qiskit/circuit/library/templates/nct/template_nct_7a_1.py +13 -11
  133. qiskit/circuit/library/templates/nct/template_nct_7b_1.py +13 -11
  134. qiskit/circuit/library/templates/nct/template_nct_7c_1.py +13 -11
  135. qiskit/circuit/library/templates/nct/template_nct_7d_1.py +13 -11
  136. qiskit/circuit/library/templates/nct/template_nct_7e_1.py +13 -11
  137. qiskit/circuit/library/templates/nct/template_nct_9a_1.py +13 -11
  138. qiskit/circuit/library/templates/nct/template_nct_9c_1.py +11 -9
  139. qiskit/circuit/library/templates/nct/template_nct_9c_10.py +12 -10
  140. qiskit/circuit/library/templates/nct/template_nct_9c_11.py +12 -10
  141. qiskit/circuit/library/templates/nct/template_nct_9c_12.py +12 -10
  142. qiskit/circuit/library/templates/nct/template_nct_9c_2.py +12 -10
  143. qiskit/circuit/library/templates/nct/template_nct_9c_3.py +12 -10
  144. qiskit/circuit/library/templates/nct/template_nct_9c_4.py +12 -10
  145. qiskit/circuit/library/templates/nct/template_nct_9c_5.py +12 -10
  146. qiskit/circuit/library/templates/nct/template_nct_9c_6.py +12 -10
  147. qiskit/circuit/library/templates/nct/template_nct_9c_7.py +12 -10
  148. qiskit/circuit/library/templates/nct/template_nct_9c_8.py +12 -10
  149. qiskit/circuit/library/templates/nct/template_nct_9c_9.py +12 -10
  150. qiskit/circuit/library/templates/nct/template_nct_9d_1.py +11 -9
  151. qiskit/circuit/library/templates/nct/template_nct_9d_10.py +12 -10
  152. qiskit/circuit/library/templates/nct/template_nct_9d_2.py +12 -10
  153. qiskit/circuit/library/templates/nct/template_nct_9d_3.py +12 -10
  154. qiskit/circuit/library/templates/nct/template_nct_9d_4.py +12 -10
  155. qiskit/circuit/library/templates/nct/template_nct_9d_5.py +12 -10
  156. qiskit/circuit/library/templates/nct/template_nct_9d_6.py +12 -10
  157. qiskit/circuit/library/templates/nct/template_nct_9d_7.py +12 -10
  158. qiskit/circuit/library/templates/nct/template_nct_9d_8.py +12 -10
  159. qiskit/circuit/library/templates/nct/template_nct_9d_9.py +12 -10
  160. qiskit/circuit/library/templates/rzx/rzx_cy.py +11 -10
  161. qiskit/circuit/library/templates/rzx/rzx_xz.py +16 -15
  162. qiskit/circuit/library/templates/rzx/rzx_yz.py +12 -10
  163. qiskit/circuit/library/templates/rzx/rzx_zz1.py +22 -20
  164. qiskit/circuit/library/templates/rzx/rzx_zz2.py +16 -15
  165. qiskit/circuit/library/templates/rzx/rzx_zz3.py +17 -15
  166. qiskit/circuit/parameter.py +4 -0
  167. qiskit/circuit/parameterexpression.py +167 -34
  168. qiskit/circuit/quantumcircuit.py +162 -126
  169. qiskit/circuit/singleton.py +2 -0
  170. qiskit/circuit/store.py +2 -0
  171. qiskit/circuit/twirling.py +145 -0
  172. qiskit/compiler/assembler.py +17 -4
  173. qiskit/compiler/scheduler.py +2 -0
  174. qiskit/compiler/sequencer.py +2 -0
  175. qiskit/compiler/transpiler.py +81 -26
  176. qiskit/converters/circuit_to_dag.py +2 -2
  177. qiskit/converters/circuit_to_dagdependency.py +1 -1
  178. qiskit/converters/circuit_to_dagdependency_v2.py +1 -1
  179. qiskit/converters/circuit_to_instruction.py +1 -1
  180. qiskit/converters/dag_to_circuit.py +7 -5
  181. qiskit/converters/dag_to_dagdependency.py +1 -1
  182. qiskit/converters/dag_to_dagdependency_v2.py +1 -1
  183. qiskit/converters/dagdependency_to_circuit.py +5 -1
  184. qiskit/converters/dagdependency_to_dag.py +6 -1
  185. qiskit/dagcircuit/collect_blocks.py +3 -3
  186. qiskit/dagcircuit/dagdependency.py +18 -5
  187. qiskit/dagcircuit/dagdependency_v2.py +1 -1
  188. qiskit/dagcircuit/dagnode.py +2 -2
  189. qiskit/passmanager/__init__.py +2 -2
  190. qiskit/primitives/backend_estimator.py +5 -2
  191. qiskit/primitives/backend_sampler_v2.py +61 -18
  192. qiskit/primitives/base/base_estimator.py +2 -2
  193. qiskit/primitives/containers/data_bin.py +9 -1
  194. qiskit/primitives/statevector_sampler.py +1 -1
  195. qiskit/primitives/utils.py +1 -1
  196. qiskit/providers/__init__.py +3 -3
  197. qiskit/providers/backend.py +12 -1
  198. qiskit/providers/backend_compat.py +23 -3
  199. qiskit/providers/basic_provider/basic_simulator.py +12 -2
  200. qiskit/providers/fake_provider/fake_pulse_backend.py +6 -1
  201. qiskit/providers/fake_provider/generic_backend_v2.py +46 -30
  202. qiskit/providers/models/pulsedefaults.py +2 -0
  203. qiskit/pulse/builder.py +59 -18
  204. qiskit/pulse/calibration_entries.py +4 -1
  205. qiskit/pulse/channels.py +2 -0
  206. qiskit/pulse/exceptions.py +2 -0
  207. qiskit/pulse/instruction_schedule_map.py +21 -6
  208. qiskit/pulse/instructions/acquire.py +2 -0
  209. qiskit/pulse/instructions/delay.py +2 -0
  210. qiskit/pulse/instructions/directives.py +8 -0
  211. qiskit/pulse/instructions/frequency.py +3 -0
  212. qiskit/pulse/instructions/instruction.py +2 -0
  213. qiskit/pulse/instructions/phase.py +3 -0
  214. qiskit/pulse/instructions/play.py +2 -0
  215. qiskit/pulse/instructions/reference.py +2 -0
  216. qiskit/pulse/instructions/snapshot.py +2 -0
  217. qiskit/pulse/library/pulse.py +2 -0
  218. qiskit/pulse/library/symbolic_pulses.py +28 -0
  219. qiskit/pulse/library/waveform.py +2 -0
  220. qiskit/pulse/macros.py +1 -1
  221. qiskit/pulse/schedule.py +12 -13
  222. qiskit/pulse/transforms/alignments.py +5 -3
  223. qiskit/pulse/transforms/dag.py +7 -0
  224. qiskit/qasm2/export.py +5 -3
  225. qiskit/qasm2/parse.py +46 -2
  226. qiskit/qasm3/__init__.py +1 -0
  227. qiskit/qasm3/ast.py +123 -15
  228. qiskit/qasm3/exporter.py +103 -77
  229. qiskit/qobj/converters/pulse_instruction.py +6 -4
  230. qiskit/qpy/__init__.py +181 -0
  231. qiskit/qpy/binary_io/circuits.py +20 -5
  232. qiskit/qpy/binary_io/schedules.py +3 -4
  233. qiskit/qpy/binary_io/value.py +310 -13
  234. qiskit/qpy/common.py +46 -2
  235. qiskit/qpy/formats.py +7 -0
  236. qiskit/qpy/interface.py +40 -4
  237. qiskit/quantum_info/__init__.py +4 -0
  238. qiskit/quantum_info/operators/channel/transformations.py +28 -21
  239. qiskit/quantum_info/operators/dihedral/dihedral.py +1 -1
  240. qiskit/quantum_info/operators/operator.py +54 -8
  241. qiskit/quantum_info/operators/symplectic/base_pauli.py +11 -19
  242. qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
  243. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +1 -1
  244. qiskit/quantum_info/operators/symplectic/pauli.py +2 -0
  245. qiskit/quantum_info/operators/symplectic/pauli_list.py +4 -4
  246. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +23 -2
  247. qiskit/quantum_info/states/densitymatrix.py +5 -5
  248. qiskit/quantum_info/states/stabilizerstate.py +1 -1
  249. qiskit/quantum_info/states/statevector.py +6 -6
  250. qiskit/result/mitigation/base_readout_mitigator.py +1 -1
  251. qiskit/result/mitigation/correlated_readout_mitigator.py +9 -1
  252. qiskit/result/mitigation/local_readout_mitigator.py +9 -1
  253. qiskit/result/mitigation/utils.py +57 -0
  254. qiskit/scheduler/config.py +2 -0
  255. qiskit/scheduler/methods/basic.py +3 -0
  256. qiskit/scheduler/schedule_circuit.py +2 -0
  257. qiskit/scheduler/sequence.py +2 -0
  258. qiskit/synthesis/__init__.py +25 -0
  259. qiskit/synthesis/arithmetic/__init__.py +16 -0
  260. qiskit/synthesis/arithmetic/adders/__init__.py +17 -0
  261. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
  262. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +103 -0
  263. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
  264. qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
  265. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +102 -0
  266. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +99 -0
  267. qiskit/synthesis/clifford/clifford_decompose_bm.py +1 -2
  268. qiskit/synthesis/clifford/clifford_decompose_greedy.py +3 -2
  269. qiskit/synthesis/clifford/clifford_decompose_layers.py +2 -1
  270. qiskit/synthesis/evolution/__init__.py +1 -0
  271. qiskit/synthesis/evolution/lie_trotter.py +16 -42
  272. qiskit/synthesis/evolution/pauli_network.py +80 -0
  273. qiskit/synthesis/evolution/product_formula.py +165 -238
  274. qiskit/synthesis/evolution/qdrift.py +36 -29
  275. qiskit/synthesis/evolution/suzuki_trotter.py +87 -27
  276. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  277. qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
  278. qiskit/synthesis/qft/qft_decompose_full.py +19 -1
  279. qiskit/synthesis/qft/qft_decompose_lnn.py +2 -1
  280. qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -1
  281. qiskit/synthesis/two_qubit/two_qubit_decompose.py +4 -63
  282. qiskit/synthesis/unitary/qsd.py +5 -5
  283. qiskit/transpiler/__init__.py +21 -14
  284. qiskit/transpiler/basepasses.py +1 -1
  285. qiskit/transpiler/passes/__init__.py +2 -0
  286. qiskit/transpiler/passes/basis/basis_translator.py +9 -565
  287. qiskit/transpiler/passes/basis/decompose.py +45 -12
  288. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  289. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
  290. qiskit/transpiler/passes/calibration/pulse_gate.py +4 -2
  291. qiskit/transpiler/passes/calibration/rx_builder.py +11 -7
  292. qiskit/transpiler/passes/calibration/rzx_builder.py +46 -30
  293. qiskit/transpiler/passes/layout/disjoint_utils.py +15 -13
  294. qiskit/transpiler/passes/layout/sabre_layout.py +7 -2
  295. qiskit/transpiler/passes/layout/sabre_pre_layout.py +5 -0
  296. qiskit/transpiler/passes/optimization/__init__.py +1 -0
  297. qiskit/transpiler/passes/optimization/collect_cliffords.py +19 -3
  298. qiskit/transpiler/passes/optimization/collect_linear_functions.py +1 -1
  299. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
  300. qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +1 -1
  301. qiskit/transpiler/passes/optimization/consolidate_blocks.py +48 -131
  302. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +4 -2
  303. qiskit/transpiler/passes/optimization/elide_permutations.py +9 -32
  304. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +5 -11
  305. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
  306. qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +1 -1
  307. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +69 -0
  308. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +5 -5
  309. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +4 -4
  310. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +2 -2
  311. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +1 -1
  312. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
  313. qiskit/transpiler/passes/routing/sabre_swap.py +7 -3
  314. qiskit/transpiler/passes/routing/star_prerouting.py +2 -2
  315. qiskit/transpiler/passes/scheduling/alap.py +1 -1
  316. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +2 -2
  317. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
  318. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +2 -0
  319. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +2 -2
  320. qiskit/transpiler/passes/scheduling/asap.py +1 -1
  321. qiskit/transpiler/passes/scheduling/base_scheduler.py +14 -12
  322. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +9 -4
  323. qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
  324. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +16 -5
  325. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +4 -1
  326. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +6 -2
  327. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +9 -4
  328. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +262 -99
  329. qiskit/transpiler/passes/synthesis/hls_plugins.py +637 -7
  330. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +3 -3
  331. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +55 -34
  332. qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +2 -56
  333. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +5 -0
  334. qiskit/transpiler/passes/utils/gate_direction.py +12 -275
  335. qiskit/transpiler/passes/utils/gates_basis.py +7 -30
  336. qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +2 -1
  337. qiskit/transpiler/passmanager_config.py +22 -4
  338. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +40 -14
  339. qiskit/transpiler/preset_passmanagers/common.py +5 -3
  340. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +125 -42
  341. qiskit/transpiler/preset_passmanagers/plugin.py +1 -1
  342. qiskit/transpiler/target.py +74 -16
  343. qiskit/utils/deprecate_pulse.py +119 -0
  344. qiskit/visualization/circuit/_utils.py +2 -2
  345. qiskit/visualization/circuit/circuit_visualization.py +3 -2
  346. qiskit/visualization/circuit/matplotlib.py +1 -1
  347. qiskit/visualization/dag_visualization.py +1 -1
  348. qiskit/visualization/pass_manager_visualization.py +3 -14
  349. qiskit/visualization/pulse_v2/interface.py +3 -1
  350. qiskit/visualization/timeline/core.py +25 -2
  351. qiskit/visualization/timeline/interface.py +12 -0
  352. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/METADATA +9 -8
  353. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/RECORD +357 -346
  354. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/WHEEL +1 -1
  355. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/entry_points.txt +19 -0
  356. qiskit/circuit/library/data_preparation/zz_feature_map.py +0 -118
  357. qiskit/synthesis/two_qubit/weyl.py +0 -97
  358. qiskit/transpiler/passes/synthesis/qubit_tracker.py +0 -132
  359. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/LICENSE.txt +0 -0
  360. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/top_level.txt +0 -0
@@ -14,6 +14,9 @@ ParameterExpression Class to enable creating simple expressions of Parameters.
14
14
  """
15
15
 
16
16
  from __future__ import annotations
17
+
18
+ from dataclasses import dataclass
19
+ from enum import IntEnum
17
20
  from typing import Callable, Union
18
21
 
19
22
  import numbers
@@ -30,12 +33,86 @@ from qiskit.circuit.exceptions import CircuitError
30
33
  ParameterValueType = Union["ParameterExpression", float]
31
34
 
32
35
 
36
+ class _OPCode(IntEnum):
37
+ ADD = 0
38
+ SUB = 1
39
+ MUL = 2
40
+ DIV = 3
41
+ POW = 4
42
+ SIN = 5
43
+ COS = 6
44
+ TAN = 7
45
+ ASIN = 8
46
+ ACOS = 9
47
+ EXP = 10
48
+ LOG = 11
49
+ SIGN = 12
50
+ GRAD = 13
51
+ CONJ = 14
52
+ SUBSTITUTE = 15
53
+ ABS = 16
54
+ ATAN = 17
55
+ RSUB = 18
56
+ RDIV = 19
57
+ RPOW = 20
58
+
59
+
60
+ _OP_CODE_MAP = (
61
+ "__add__",
62
+ "__sub__",
63
+ "__mul__",
64
+ "__truediv__",
65
+ "__pow__",
66
+ "sin",
67
+ "cos",
68
+ "tan",
69
+ "arcsin",
70
+ "arccos",
71
+ "exp",
72
+ "log",
73
+ "sign",
74
+ "gradient",
75
+ "conjugate",
76
+ "subs",
77
+ "abs",
78
+ "arctan",
79
+ "__rsub__",
80
+ "__rtruediv__",
81
+ "__rpow__",
82
+ )
83
+
84
+
85
+ def op_code_to_method(op_code: _OPCode):
86
+ """Return the method name for a given op_code."""
87
+ return _OP_CODE_MAP[op_code]
88
+
89
+
90
+ @dataclass
91
+ class _INSTRUCTION:
92
+ op: _OPCode
93
+ lhs: ParameterValueType | None
94
+ rhs: ParameterValueType | None = None
95
+
96
+
97
+ @dataclass
98
+ class _SUBS:
99
+ binds: dict
100
+ op: _OPCode = _OPCode.SUBSTITUTE
101
+
102
+
33
103
  class ParameterExpression:
34
104
  """ParameterExpression class to enable creating expressions of Parameters."""
35
105
 
36
- __slots__ = ["_parameter_symbols", "_parameter_keys", "_symbol_expr", "_name_map"]
106
+ __slots__ = [
107
+ "_parameter_symbols",
108
+ "_parameter_keys",
109
+ "_symbol_expr",
110
+ "_name_map",
111
+ "_qpy_replay",
112
+ "_standalone_param",
113
+ ]
37
114
 
38
- def __init__(self, symbol_map: dict, expr):
115
+ def __init__(self, symbol_map: dict, expr, *, _qpy_replay=None):
39
116
  """Create a new :class:`ParameterExpression`.
40
117
 
41
118
  Not intended to be called directly, but to be instantiated via operations
@@ -54,6 +131,11 @@ class ParameterExpression:
54
131
  self._parameter_keys = frozenset(p._hash_key() for p in self._parameter_symbols)
55
132
  self._symbol_expr = expr
56
133
  self._name_map: dict | None = None
134
+ self._standalone_param = False
135
+ if _qpy_replay is not None:
136
+ self._qpy_replay = _qpy_replay
137
+ else:
138
+ self._qpy_replay = []
57
139
 
58
140
  @property
59
141
  def parameters(self) -> set:
@@ -69,8 +151,14 @@ class ParameterExpression:
69
151
 
70
152
  def conjugate(self) -> "ParameterExpression":
71
153
  """Return the conjugate."""
154
+ if self._standalone_param:
155
+ new_op = _INSTRUCTION(_OPCode.CONJ, self)
156
+ else:
157
+ new_op = _INSTRUCTION(_OPCode.CONJ, None)
158
+ new_replay = self._qpy_replay.copy()
159
+ new_replay.append(new_op)
72
160
  conjugated = ParameterExpression(
73
- self._parameter_symbols, symengine.conjugate(self._symbol_expr)
161
+ self._parameter_symbols, symengine.conjugate(self._symbol_expr), _qpy_replay=new_replay
74
162
  )
75
163
  return conjugated
76
164
 
@@ -117,6 +205,7 @@ class ParameterExpression:
117
205
  self._raise_if_passed_unknown_parameters(parameter_values.keys())
118
206
  self._raise_if_passed_nan(parameter_values)
119
207
 
208
+ new_op = _SUBS(parameter_values)
120
209
  symbol_values = {}
121
210
  for parameter, value in parameter_values.items():
122
211
  if (param_expr := self._parameter_symbols.get(parameter)) is not None:
@@ -143,7 +232,12 @@ class ParameterExpression:
143
232
  f"(Expression: {self}, Bindings: {parameter_values})."
144
233
  )
145
234
 
146
- return ParameterExpression(free_parameter_symbols, bound_symbol_expr)
235
+ new_replay = self._qpy_replay.copy()
236
+ new_replay.append(new_op)
237
+
238
+ return ParameterExpression(
239
+ free_parameter_symbols, bound_symbol_expr, _qpy_replay=new_replay
240
+ )
147
241
 
148
242
  def subs(
149
243
  self, parameter_map: dict, allow_unknown_parameters: bool = False
@@ -175,6 +269,7 @@ class ParameterExpression:
175
269
  for p in replacement_expr.parameters
176
270
  }
177
271
  self._raise_if_parameter_names_conflict(inbound_names, parameter_map.keys())
272
+ new_op = _SUBS(parameter_map)
178
273
 
179
274
  # Include existing parameters in self not set to be replaced.
180
275
  new_parameter_symbols = {
@@ -192,8 +287,12 @@ class ParameterExpression:
192
287
  new_parameter_symbols[p] = symbol_type(p.name)
193
288
 
194
289
  substituted_symbol_expr = self._symbol_expr.subs(symbol_map)
290
+ new_replay = self._qpy_replay.copy()
291
+ new_replay.append(new_op)
195
292
 
196
- return ParameterExpression(new_parameter_symbols, substituted_symbol_expr)
293
+ return ParameterExpression(
294
+ new_parameter_symbols, substituted_symbol_expr, _qpy_replay=new_replay
295
+ )
197
296
 
198
297
  def _raise_if_passed_unknown_parameters(self, parameters):
199
298
  unknown_parameters = parameters - self.parameters
@@ -231,7 +330,11 @@ class ParameterExpression:
231
330
  )
232
331
 
233
332
  def _apply_operation(
234
- self, operation: Callable, other: ParameterValueType, reflected: bool = False
333
+ self,
334
+ operation: Callable,
335
+ other: ParameterValueType,
336
+ reflected: bool = False,
337
+ op_code: _OPCode = None,
235
338
  ) -> "ParameterExpression":
236
339
  """Base method implementing math operations between Parameters and
237
340
  either a constant or a second ParameterExpression.
@@ -253,7 +356,6 @@ class ParameterExpression:
253
356
  A new expression describing the result of the operation.
254
357
  """
255
358
  self_expr = self._symbol_expr
256
-
257
359
  if isinstance(other, ParameterExpression):
258
360
  self._raise_if_parameter_names_conflict(other._names)
259
361
  parameter_symbols = {**self._parameter_symbols, **other._parameter_symbols}
@@ -266,10 +368,26 @@ class ParameterExpression:
266
368
 
267
369
  if reflected:
268
370
  expr = operation(other_expr, self_expr)
371
+ if op_code in {_OPCode.RSUB, _OPCode.RDIV, _OPCode.RPOW}:
372
+ if self._standalone_param:
373
+ new_op = _INSTRUCTION(op_code, self, other)
374
+ else:
375
+ new_op = _INSTRUCTION(op_code, None, other)
376
+ else:
377
+ if self._standalone_param:
378
+ new_op = _INSTRUCTION(op_code, other, self)
379
+ else:
380
+ new_op = _INSTRUCTION(op_code, other, None)
269
381
  else:
270
382
  expr = operation(self_expr, other_expr)
271
-
272
- out_expr = ParameterExpression(parameter_symbols, expr)
383
+ if self._standalone_param:
384
+ new_op = _INSTRUCTION(op_code, self, other)
385
+ else:
386
+ new_op = _INSTRUCTION(op_code, None, other)
387
+ new_replay = self._qpy_replay.copy()
388
+ new_replay.append(new_op)
389
+
390
+ out_expr = ParameterExpression(parameter_symbols, expr, _qpy_replay=new_replay)
273
391
  out_expr._name_map = self._names.copy()
274
392
  if isinstance(other, ParameterExpression):
275
393
  out_expr._names.update(other._names.copy())
@@ -291,6 +409,13 @@ class ParameterExpression:
291
409
  # If it is not contained then return 0
292
410
  return 0.0
293
411
 
412
+ if self._standalone_param:
413
+ new_op = _INSTRUCTION(_OPCode.GRAD, self, param)
414
+ else:
415
+ new_op = _INSTRUCTION(_OPCode.GRAD, None, param)
416
+ qpy_replay = self._qpy_replay.copy()
417
+ qpy_replay.append(new_op)
418
+
294
419
  # Compute the gradient of the parameter expression w.r.t. param
295
420
  key = self._parameter_symbols[param]
296
421
  expr_grad = symengine.Derivative(self._symbol_expr, key)
@@ -304,7 +429,7 @@ class ParameterExpression:
304
429
  parameter_symbols[parameter] = symbol
305
430
  # If the gradient corresponds to a parameter expression then return the new expression.
306
431
  if len(parameter_symbols) > 0:
307
- return ParameterExpression(parameter_symbols, expr=expr_grad)
432
+ return ParameterExpression(parameter_symbols, expr=expr_grad, _qpy_replay=qpy_replay)
308
433
  # If no free symbols left, return a complex or float gradient
309
434
  expr_grad_cplx = complex(expr_grad)
310
435
  if expr_grad_cplx.imag != 0:
@@ -313,81 +438,89 @@ class ParameterExpression:
313
438
  return float(expr_grad)
314
439
 
315
440
  def __add__(self, other):
316
- return self._apply_operation(operator.add, other)
441
+ return self._apply_operation(operator.add, other, op_code=_OPCode.ADD)
317
442
 
318
443
  def __radd__(self, other):
319
- return self._apply_operation(operator.add, other, reflected=True)
444
+ return self._apply_operation(operator.add, other, reflected=True, op_code=_OPCode.ADD)
320
445
 
321
446
  def __sub__(self, other):
322
- return self._apply_operation(operator.sub, other)
447
+ return self._apply_operation(operator.sub, other, op_code=_OPCode.SUB)
323
448
 
324
449
  def __rsub__(self, other):
325
- return self._apply_operation(operator.sub, other, reflected=True)
450
+ return self._apply_operation(operator.sub, other, reflected=True, op_code=_OPCode.RSUB)
326
451
 
327
452
  def __mul__(self, other):
328
- return self._apply_operation(operator.mul, other)
453
+ return self._apply_operation(operator.mul, other, op_code=_OPCode.MUL)
329
454
 
330
455
  def __pos__(self):
331
- return self._apply_operation(operator.mul, 1)
456
+ return self._apply_operation(operator.mul, 1, op_code=_OPCode.MUL)
332
457
 
333
458
  def __neg__(self):
334
- return self._apply_operation(operator.mul, -1)
459
+ return self._apply_operation(operator.mul, -1, op_code=_OPCode.MUL)
335
460
 
336
461
  def __rmul__(self, other):
337
- return self._apply_operation(operator.mul, other, reflected=True)
462
+ return self._apply_operation(operator.mul, other, reflected=True, op_code=_OPCode.MUL)
338
463
 
339
464
  def __truediv__(self, other):
340
465
  if other == 0:
341
466
  raise ZeroDivisionError("Division of a ParameterExpression by zero.")
342
- return self._apply_operation(operator.truediv, other)
467
+ return self._apply_operation(operator.truediv, other, op_code=_OPCode.DIV)
343
468
 
344
469
  def __rtruediv__(self, other):
345
- return self._apply_operation(operator.truediv, other, reflected=True)
470
+ return self._apply_operation(operator.truediv, other, reflected=True, op_code=_OPCode.RDIV)
346
471
 
347
472
  def __pow__(self, other):
348
- return self._apply_operation(pow, other)
473
+ return self._apply_operation(pow, other, op_code=_OPCode.POW)
349
474
 
350
475
  def __rpow__(self, other):
351
- return self._apply_operation(pow, other, reflected=True)
476
+ return self._apply_operation(pow, other, reflected=True, op_code=_OPCode.RPOW)
352
477
 
353
- def _call(self, ufunc):
354
- return ParameterExpression(self._parameter_symbols, ufunc(self._symbol_expr))
478
+ def _call(self, ufunc, op_code):
479
+ if self._standalone_param:
480
+ new_op = _INSTRUCTION(op_code, self)
481
+ else:
482
+ new_op = _INSTRUCTION(op_code, None)
483
+ new_replay = self._qpy_replay.copy()
484
+ new_replay.append(new_op)
485
+ return ParameterExpression(
486
+ self._parameter_symbols, ufunc(self._symbol_expr), _qpy_replay=new_replay
487
+ )
355
488
 
356
489
  def sin(self):
357
490
  """Sine of a ParameterExpression"""
358
- return self._call(symengine.sin)
491
+ return self._call(symengine.sin, op_code=_OPCode.SIN)
359
492
 
360
493
  def cos(self):
361
494
  """Cosine of a ParameterExpression"""
362
- return self._call(symengine.cos)
495
+ return self._call(symengine.cos, op_code=_OPCode.COS)
363
496
 
364
497
  def tan(self):
365
498
  """Tangent of a ParameterExpression"""
366
- return self._call(symengine.tan)
499
+ return self._call(symengine.tan, op_code=_OPCode.TAN)
367
500
 
368
501
  def arcsin(self):
369
502
  """Arcsin of a ParameterExpression"""
370
- return self._call(symengine.asin)
503
+ return self._call(symengine.asin, op_code=_OPCode.ASIN)
371
504
 
372
505
  def arccos(self):
373
506
  """Arccos of a ParameterExpression"""
374
- return self._call(symengine.acos)
507
+ return self._call(symengine.acos, op_code=_OPCode.ACOS)
375
508
 
376
509
  def arctan(self):
377
510
  """Arctan of a ParameterExpression"""
378
- return self._call(symengine.atan)
511
+ return self._call(symengine.atan, op_code=_OPCode.ATAN)
379
512
 
380
513
  def exp(self):
381
514
  """Exponential of a ParameterExpression"""
382
- return self._call(symengine.exp)
515
+ return self._call(symengine.exp, op_code=_OPCode.EXP)
383
516
 
384
517
  def log(self):
385
518
  """Logarithm of a ParameterExpression"""
386
- return self._call(symengine.log)
519
+ return self._call(symengine.log, op_code=_OPCode.LOG)
387
520
 
388
521
  def sign(self):
389
522
  """Sign of a ParameterExpression"""
390
- return self._call(symengine.sign)
523
+ return self._call(symengine.sign, op_code=_OPCode.SIGN)
391
524
 
392
525
  def __repr__(self):
393
526
  return f"{self.__class__.__name__}({str(self)})"
@@ -455,7 +588,7 @@ class ParameterExpression:
455
588
 
456
589
  def __abs__(self):
457
590
  """Absolute of a ParameterExpression"""
458
- return self._call(symengine.Abs)
591
+ return self._call(symengine.Abs, _OPCode.ABS)
459
592
 
460
593
  def abs(self):
461
594
  """Absolute of a ParameterExpression"""