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
@@ -57,6 +57,7 @@ from qiskit.exceptions import QiskitError
57
57
  from qiskit.providers.backend import QubitProperties # pylint: disable=unused-import
58
58
  from qiskit.providers.models.backendproperties import BackendProperties
59
59
  from qiskit.utils import deprecate_func
60
+ from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency, deprecate_pulse_arg
60
61
 
61
62
  logger = logging.getLogger(__name__)
62
63
 
@@ -86,6 +87,7 @@ class InstructionProperties(BaseInstructionProperties):
86
87
  cls, duration, error
87
88
  )
88
89
 
90
+ @deprecate_pulse_arg("calibration", predicate=lambda cals: cals is not None)
89
91
  def __init__(
90
92
  self,
91
93
  duration: float | None = None, # pylint: disable=unused-argument
@@ -99,13 +101,14 @@ class InstructionProperties(BaseInstructionProperties):
99
101
  specified set of qubits
100
102
  error: The average error rate for the instruction on the specified
101
103
  set of qubits.
102
- calibration: The pulse representation of the instruction.
104
+ calibration: DEPRECATED. The pulse representation of the instruction.
103
105
  """
104
106
  super().__init__()
105
107
  self._calibration: CalibrationEntry | None = None
106
- self.calibration = calibration
108
+ self._calibration_prop = calibration
107
109
 
108
110
  @property
111
+ @deprecate_pulse_dependency(is_property=True)
109
112
  def calibration(self):
110
113
  """The pulse representation of the instruction.
111
114
 
@@ -133,12 +136,24 @@ class InstructionProperties(BaseInstructionProperties):
133
136
  use own definition to compile the circuit down to the execution format.
134
137
 
135
138
  """
136
- if self._calibration is None:
137
- return None
138
- return self._calibration.get_schedule()
139
+ return self._calibration_prop
139
140
 
140
141
  @calibration.setter
142
+ @deprecate_pulse_dependency(is_property=True)
141
143
  def calibration(self, calibration: Schedule | ScheduleBlock | CalibrationEntry):
144
+ self._calibration_prop = calibration
145
+
146
+ @property
147
+ def _calibration_prop(self):
148
+ if self._calibration is None:
149
+ return None
150
+ with warnings.catch_warnings():
151
+ warnings.simplefilter(action="ignore", category=DeprecationWarning)
152
+ # Clean this alternative path from deprecation warning emitted by `get_schedule`
153
+ return self._calibration.get_schedule()
154
+
155
+ @_calibration_prop.setter
156
+ def _calibration_prop(self, calibration: Schedule | ScheduleBlock | CalibrationEntry):
142
157
  if isinstance(calibration, (Schedule, ScheduleBlock)):
143
158
  new_entry = ScheduleDef()
144
159
  new_entry.define(calibration, user_provided=True)
@@ -153,11 +168,11 @@ class InstructionProperties(BaseInstructionProperties):
153
168
  )
154
169
 
155
170
  def __getstate__(self) -> tuple:
156
- return (super().__getstate__(), self.calibration, self._calibration)
171
+ return (super().__getstate__(), self._calibration_prop, self._calibration)
157
172
 
158
173
  def __setstate__(self, state: tuple):
159
174
  super().__setstate__(state[0])
160
- self.calibration = state[1]
175
+ self._calibration_prop = state[1]
161
176
  self._calibration = state[2]
162
177
 
163
178
 
@@ -447,6 +462,7 @@ class Target(BaseTarget):
447
462
  self._instruction_durations = None
448
463
  self._instruction_schedule_map = None
449
464
 
465
+ @deprecate_pulse_dependency
450
466
  def update_from_instruction_schedule_map(self, inst_map, inst_name_map=None, error_dict=None):
451
467
  """Update the target from an instruction schedule map.
452
468
 
@@ -604,6 +620,7 @@ class Target(BaseTarget):
604
620
  self.granularity, self.min_length, self.pulse_alignment, self.acquire_alignment
605
621
  )
606
622
 
623
+ @deprecate_pulse_dependency
607
624
  def instruction_schedule_map(self):
608
625
  """Return an :class:`~qiskit.pulse.InstructionScheduleMap` for the
609
626
  instructions in the target with a pulse schedule defined.
@@ -612,9 +629,17 @@ class Target(BaseTarget):
612
629
  InstructionScheduleMap: The instruction schedule map for the
613
630
  instructions in this target with a pulse schedule defined.
614
631
  """
632
+ return self._get_instruction_schedule_map()
633
+
634
+ def _get_instruction_schedule_map(self):
615
635
  if self._instruction_schedule_map is not None:
616
636
  return self._instruction_schedule_map
617
- out_inst_schedule_map = InstructionScheduleMap()
637
+ with warnings.catch_warnings():
638
+ warnings.simplefilter(action="ignore", category=DeprecationWarning)
639
+ # `InstructionScheduleMap` is deprecated in Qiskit 1.3 but we want this alternative
640
+ # path to be clean of deprecation warnings
641
+ out_inst_schedule_map = InstructionScheduleMap()
642
+
618
643
  for instruction, qargs in self._gate_map.items():
619
644
  for qarg, properties in qargs.items():
620
645
  # Directly getting CalibrationEntry not to invoke .get_schedule().
@@ -626,6 +651,7 @@ class Target(BaseTarget):
626
651
  self._instruction_schedule_map = out_inst_schedule_map
627
652
  return out_inst_schedule_map
628
653
 
654
+ @deprecate_pulse_dependency
629
655
  def has_calibration(
630
656
  self,
631
657
  operation_name: str,
@@ -640,6 +666,13 @@ class Target(BaseTarget):
640
666
  Returns:
641
667
  Returns ``True`` if the calibration is supported and ``False`` if it isn't.
642
668
  """
669
+ return self._has_calibration(operation_name, qargs)
670
+
671
+ def _has_calibration(
672
+ self,
673
+ operation_name: str,
674
+ qargs: tuple[int, ...],
675
+ ) -> bool:
643
676
  qargs = tuple(qargs)
644
677
  if operation_name not in self._gate_map:
645
678
  return False
@@ -647,6 +680,7 @@ class Target(BaseTarget):
647
680
  return False
648
681
  return getattr(self._gate_map[operation_name][qargs], "_calibration", None) is not None
649
682
 
683
+ @deprecate_pulse_dependency
650
684
  def get_calibration(
651
685
  self,
652
686
  operation_name: str,
@@ -668,7 +702,16 @@ class Target(BaseTarget):
668
702
  Returns:
669
703
  Calibrated pulse schedule of corresponding instruction.
670
704
  """
671
- if not self.has_calibration(operation_name, qargs):
705
+ return self._get_calibration(operation_name, qargs, *args, *kwargs)
706
+
707
+ def _get_calibration(
708
+ self,
709
+ operation_name: str,
710
+ qargs: tuple[int, ...],
711
+ *args: ParameterValueType,
712
+ **kwargs: ParameterValueType,
713
+ ) -> Schedule | ScheduleBlock:
714
+ if not self._has_calibration(operation_name, qargs):
672
715
  raise KeyError(
673
716
  f"Calibration of instruction {operation_name} for qubit {qargs} is not defined."
674
717
  )
@@ -927,6 +970,7 @@ class Target(BaseTarget):
927
970
  super().__setstate__(state["base"])
928
971
 
929
972
  @classmethod
973
+ @deprecate_pulse_arg("inst_map")
930
974
  def from_configuration(
931
975
  cls,
932
976
  basis_gates: list[str],
@@ -965,7 +1009,7 @@ class Target(BaseTarget):
965
1009
  coupling_map: The coupling map representing connectivity constraints
966
1010
  on the backend. If specified all gates from ``basis_gates`` will
967
1011
  be supported on all qubits (or pairs of qubits).
968
- inst_map: The instruction schedule map representing the pulse
1012
+ inst_map: DEPRECATED. The instruction schedule map representing the pulse
969
1013
  :class:`~.Schedule` definitions for each instruction. If this
970
1014
  is specified ``coupling_map`` must be specified. The
971
1015
  ``coupling_map`` is used as the source of truth for connectivity
@@ -1112,9 +1156,16 @@ class Target(BaseTarget):
1112
1156
  if error is None and duration is None and calibration is None:
1113
1157
  gate_properties[(qubit,)] = None
1114
1158
  else:
1115
- gate_properties[(qubit,)] = InstructionProperties(
1116
- duration=duration, error=error, calibration=calibration
1117
- )
1159
+ with warnings.catch_warnings():
1160
+ warnings.filterwarnings(
1161
+ "ignore",
1162
+ category=DeprecationWarning,
1163
+ message=".*``calibration`` is deprecated as of Qiskit 1.3.*",
1164
+ module="qiskit",
1165
+ )
1166
+ gate_properties[(qubit,)] = InstructionProperties(
1167
+ duration=duration, error=error, calibration=calibration
1168
+ )
1118
1169
  target.add_instruction(name_mapping[gate], properties=gate_properties, name=gate)
1119
1170
  edges = list(coupling_map.get_edges())
1120
1171
  for gate in two_qubit_gates:
@@ -1154,9 +1205,16 @@ class Target(BaseTarget):
1154
1205
  if error is None and duration is None and calibration is None:
1155
1206
  gate_properties[edge] = None
1156
1207
  else:
1157
- gate_properties[edge] = InstructionProperties(
1158
- duration=duration, error=error, calibration=calibration
1159
- )
1208
+ with warnings.catch_warnings():
1209
+ warnings.filterwarnings(
1210
+ "ignore",
1211
+ category=DeprecationWarning,
1212
+ message=".*``calibration`` is deprecated as of Qiskit 1.3.*",
1213
+ module="qiskit",
1214
+ )
1215
+ gate_properties[edge] = InstructionProperties(
1216
+ duration=duration, error=error, calibration=calibration
1217
+ )
1160
1218
  target.add_instruction(name_mapping[gate], properties=gate_properties, name=gate)
1161
1219
  for gate in global_ideal_variable_width_gates:
1162
1220
  target.add_instruction(name_mapping[gate], name=gate)
@@ -0,0 +1,119 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2024
4
+ #
5
+ # This code is licensed under the Apache License, Version 2.0. You may
6
+ # obtain a copy of this license in the LICENSE.txt file in the root directory
7
+ # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
+ #
9
+ # Any modifications or derivative works of this code must retain this
10
+ # copyright notice, and modified files need to carry a notice indicating
11
+ # that they have been altered from the originals.
12
+
13
+ """
14
+ Deprecation functions for Qiskit Pulse. To be removed in Qiskit 2.0.
15
+ """
16
+
17
+ import warnings
18
+ import functools
19
+
20
+ from qiskit.utils.deprecation import deprecate_func, deprecate_arg
21
+
22
+
23
+ def deprecate_pulse_func(func):
24
+ """Deprecation message for functions and classes"""
25
+ return deprecate_func(
26
+ since="1.3",
27
+ package_name="Qiskit",
28
+ removal_timeline="in Qiskit 2.0",
29
+ additional_msg="The entire Qiskit Pulse package is being deprecated "
30
+ "and will be moved to the Qiskit Dynamics repository: "
31
+ "https://github.com/qiskit-community/qiskit-dynamics",
32
+ )(func)
33
+
34
+
35
+ def deprecate_pulse_dependency(*args, moving_to_dynamics: bool = False, **kwargs):
36
+ # pylint: disable=missing-param-doc
37
+ """Deprecation message for functions and classes which use or depend on Pulse
38
+
39
+ Args:
40
+ moving_to_dynamics: set to True if the dependency is moving to Qiskit Dynamics. This affects
41
+ the deprecation message being printed, namely saying explicitly whether the dependency will
42
+ be moved to Qiskit Dynamics or whether it will just be removed without an alternative.
43
+ """
44
+
45
+ def msg_handler(func):
46
+ fully_qual_name = format(f"{func.__module__}.{func.__qualname__}")
47
+ if ".__init__" in fully_qual_name: # Deprecating a class' vis it __init__ method
48
+ fully_qual_name = fully_qual_name[:-9]
49
+ elif "is_property" not in kwargs: # Deprecating either a function or a method
50
+ fully_qual_name += "()"
51
+
52
+ message = (
53
+ "The entire Qiskit Pulse package is being deprecated and will be moved to the Qiskit "
54
+ "Dynamics repository: https://github.com/qiskit-community/qiskit-dynamics."
55
+ + (
56
+ format(f" Note that ``{fully_qual_name}`` will be moved as well.")
57
+ if moving_to_dynamics
58
+ else format(
59
+ f" Note that once removed, ``{fully_qual_name}`` will have no alternative in Qiskit."
60
+ )
61
+ )
62
+ )
63
+
64
+ decorator = deprecate_func(
65
+ since="1.3",
66
+ package_name="Qiskit",
67
+ removal_timeline="in Qiskit 2.0",
68
+ additional_msg=message,
69
+ **kwargs,
70
+ )(func)
71
+
72
+ # Taken when `deprecate_pulse_dependency` is used with no arguments and with empty parentheses,
73
+ # in which case the decorated function is passed
74
+
75
+ return decorator
76
+
77
+ if args:
78
+ return msg_handler(args[0])
79
+ return msg_handler
80
+
81
+
82
+ def deprecate_pulse_arg(arg_name: str, **kwargs):
83
+ """Deprecation message for arguments related to Pulse"""
84
+ return deprecate_arg(
85
+ name=arg_name,
86
+ since="1.3",
87
+ package_name="Qiskit",
88
+ removal_timeline="in Qiskit 2.0",
89
+ additional_msg="The entire Qiskit Pulse package is being deprecated "
90
+ "and this argument uses a dependency on the package.",
91
+ **kwargs,
92
+ )
93
+
94
+
95
+ def ignore_pulse_deprecation_warnings(func):
96
+ """Ignore deprecation warnings emitted from the pulse package"""
97
+
98
+ @functools.wraps(func)
99
+ def wrapper(*args, **kwargs):
100
+ with warnings.catch_warnings():
101
+ warnings.filterwarnings(
102
+ "ignore", category=DeprecationWarning, message="The (.*) ``qiskit.pulse"
103
+ )
104
+ return func(*args, **kwargs)
105
+
106
+ return wrapper
107
+
108
+
109
+ def decorate_test_methods(decorator):
110
+ """Put a given decorator on all the decorated class methods whose name starts with `test_`"""
111
+
112
+ def cls_wrapper(cls):
113
+ for attr in dir(cls):
114
+ if attr.startswith("test_") and callable(object.__getattribute__(cls, attr)):
115
+ setattr(cls, attr, decorator(object.__getattribute__(cls, attr)))
116
+
117
+ return cls
118
+
119
+ return cls_wrapper
@@ -503,7 +503,7 @@ def _get_gate_span(qubits, node):
503
503
  # type of op must be the only op in the layer
504
504
  if isinstance(node.op, ControlFlowOp):
505
505
  span = qubits
506
- elif node.cargs or getattr(node.op, "condition", None):
506
+ elif node.cargs or getattr(node, "condition", None):
507
507
  span = qubits[min_index : len(qubits)]
508
508
  else:
509
509
  span = qubits[min_index : max_index + 1]
@@ -582,7 +582,7 @@ class _LayerSpooler(list):
582
582
  curr_index = index
583
583
  last_insertable_index = -1
584
584
  index_stop = -1
585
- if (condition := getattr(node.op, "condition", None)) is not None:
585
+ if (condition := getattr(node, "condition", None)) is not None:
586
586
  index_stop = max(
587
587
  (self.measure_map[bit] for bit in condition_resources(condition).clbits),
588
588
  default=index_stop,
@@ -191,11 +191,12 @@ def circuit_drawer(
191
191
  .. plot::
192
192
  :include-source:
193
193
 
194
- from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
194
+ from qiskit import QuantumCircuit
195
+ from qiskit.visualization import circuit_drawer
195
196
  qc = QuantumCircuit(1, 1)
196
197
  qc.h(0)
197
198
  qc.measure(0, 0)
198
- qc.draw(output='mpl', style={'backgroundcolor': '#EEEEEE'})
199
+ circuit_drawer(qc, output="mpl", style={"backgroundcolor": "#EEEEEE"})
199
200
  """
200
201
  image = None
201
202
  expr_len = max(expr_len, 0)
@@ -135,7 +135,7 @@ class MatplotlibDrawer:
135
135
 
136
136
  self._initial_state = initial_state
137
137
  self._global_phase = self._circuit.global_phase
138
- self._calibrations = self._circuit.calibrations
138
+ self._calibrations = self._circuit._calibrations_prop
139
139
  self._expr_len = expr_len
140
140
  self._cregbundle = cregbundle
141
141
 
@@ -81,7 +81,7 @@ def dag_drawer(dag, scale=0.7, filename=None, style="color"):
81
81
  ``rustworkx`` package to draw the DAG.
82
82
 
83
83
  Args:
84
- dag (DAGCircuit): The dag to draw.
84
+ dag (DAGCircuit or DAGDependency): The dag to draw.
85
85
  scale (float): scaling factor
86
86
  filename (str): file path to save image to (format inferred from name)
87
87
  style (str): 'plain': B&W graph
@@ -58,23 +58,12 @@ def pass_manager_drawer(pass_manager, filename=None, style=None, raw=False):
58
58
  Example:
59
59
  .. code-block::
60
60
 
61
- %matplotlib inline
62
61
  from qiskit import QuantumCircuit
63
- from qiskit.compiler import transpile
64
- from qiskit.transpiler import PassManager
62
+ from qiskit.transpiler import generate_preset_pass_manager
65
63
  from qiskit.visualization import pass_manager_drawer
66
- from qiskit.transpiler.passes import Unroller
67
64
 
68
- circ = QuantumCircuit(3)
69
- circ.ccx(0, 1, 2)
70
- circ.draw()
71
-
72
- pass_ = Unroller(['u1', 'u2', 'u3', 'cx'])
73
- pm = PassManager(pass_)
74
- new_circ = pm.run(circ)
75
- new_circ.draw(output='mpl')
76
-
77
- pass_manager_drawer(pm, "passmanager.jpg")
65
+ pm = generate_preset_pass_manager(optimization_level=0)
66
+ pass_manager_drawer(pm)
78
67
  """
79
68
  import pydot
80
69
 
@@ -28,9 +28,11 @@ from qiskit.visualization.exceptions import VisualizationError
28
28
  from qiskit.visualization.pulse_v2 import core, device_info, stylesheet, types
29
29
  from qiskit.exceptions import MissingOptionalLibraryError
30
30
  from qiskit.utils import deprecate_arg
31
+ from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
31
32
 
32
33
 
33
- @deprecate_arg("show_barriers", new_alias="plot_barriers", since="1.1.0", pending=True)
34
+ @deprecate_pulse_dependency(moving_to_dynamics=True)
35
+ @deprecate_arg("show_barrier", new_alias="plot_barrier", since="1.1.0", pending=True)
34
36
  def draw(
35
37
  program: Union[Waveform, SymbolicPulse, Schedule, ScheduleBlock],
36
38
  style: Optional[Dict[str, Any]] = None,
@@ -58,6 +58,7 @@ from enum import Enum
58
58
  import numpy as np
59
59
 
60
60
  from qiskit import circuit
61
+ from qiskit.transpiler.target import Target
61
62
  from qiskit.visualization.exceptions import VisualizationError
62
63
  from qiskit.visualization.timeline import drawings, types
63
64
  from qiskit.visualization.timeline.stylesheet import QiskitTimelineStyle
@@ -138,11 +139,13 @@ class DrawerCanvas:
138
139
  self._collections[data.data_key] = data
139
140
 
140
141
  # pylint: disable=cyclic-import
141
- def load_program(self, program: circuit.QuantumCircuit):
142
+ def load_program(self, program: circuit.QuantumCircuit, target: Target | None = None):
142
143
  """Load quantum circuit and create drawing..
143
144
 
144
145
  Args:
145
146
  program: Scheduled circuit object to draw.
147
+ target: The target the circuit is scheduled for. This contains backend information
148
+ including the instruction durations used in scheduling.
146
149
 
147
150
  Raises:
148
151
  VisualizationError: When circuit is not scheduled.
@@ -180,10 +183,30 @@ class DrawerCanvas:
180
183
  for bit_pos, bit in enumerate(bits):
181
184
  if not isinstance(instruction.operation, not_gate_like):
182
185
  # Generate draw object for gates
186
+ if target is not None:
187
+ duration = None
188
+ op_props = target.get(instruction.operation.name)
189
+ if op_props is not None:
190
+ inst_props = op_props.get(tuple(instruction.qubits))
191
+ if inst_props is not None:
192
+ duration = inst_props.getattr("duration")
193
+
194
+ if duration is None:
195
+ # Warn here because an incomplete target isn't obvious most of the time
196
+ warnings.warn(
197
+ "Target doesn't contain a duration for "
198
+ f"{instruction.operation.name} on {bit_pos}, this will error in "
199
+ "Qiskit 2.0.",
200
+ DeprecationWarning,
201
+ stacklevel=3,
202
+ )
203
+ duration = instruction.operation.duration
204
+ else:
205
+ duration = instruction.operation.duration
183
206
  gate_source = types.ScheduledGate(
184
207
  t0=t0,
185
208
  operand=instruction.operation,
186
- duration=instruction.operation.duration,
209
+ duration=duration,
187
210
  bits=bits,
188
211
  bit_position=bit_pos,
189
212
  )
@@ -20,8 +20,10 @@ the configured canvas is passed to one of the plotter APIs to generate a visuali
20
20
  """
21
21
 
22
22
  from typing import Optional, Dict, Any, List, Tuple
23
+ import warnings
23
24
 
24
25
  from qiskit import circuit
26
+ from qiskit.transpiler.target import Target
25
27
  from qiskit.exceptions import MissingOptionalLibraryError
26
28
  from qiskit.visualization.exceptions import VisualizationError
27
29
  from qiskit.visualization.timeline import types, core, stylesheet
@@ -43,6 +45,7 @@ def draw(
43
45
  plotter: Optional[str] = types.Plotter.MPL.value,
44
46
  axis: Optional[Any] = None,
45
47
  filename: Optional[str] = None,
48
+ target: Optional[Target] = None,
46
49
  *,
47
50
  show_idle: Optional[bool] = None,
48
51
  show_barriers: Optional[bool] = None,
@@ -81,6 +84,7 @@ def draw(
81
84
  the plotters uses given `axis` instead of internally initializing a figure object.
82
85
  This object format depends on the plotter. See plotters section for details.
83
86
  filename: If provided the output image is dumped into a file under the filename.
87
+ target: The target for the backend the timeline is being generated for.
84
88
  show_idle: DEPRECATED.
85
89
  show_barriers: DEPRECATED.
86
90
 
@@ -361,6 +365,14 @@ def draw(
361
365
  temp_style = stylesheet.QiskitTimelineStyle()
362
366
  temp_style.update(style or stylesheet.IQXStandard())
363
367
 
368
+ if target is None:
369
+ warnings.warn(
370
+ "Target is not specified. In Qiskit 2.0.0 this will be required to get the duration of "
371
+ "instructions.",
372
+ PendingDeprecationWarning,
373
+ stacklevel=2,
374
+ )
375
+
364
376
  # update control properties
365
377
  if idle_wires is not None:
366
378
  temp_style["formatter.control.show_idle"] = idle_wires
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qiskit
3
- Version: 1.3.0b1
3
+ Version: 1.3.0rc2
4
4
  Summary: An open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives.
5
5
  Author-email: Qiskit Development Team <qiskit@us.ibm.com>
6
6
  License: Apache 2.0
@@ -23,6 +23,7 @@ Classifier: Programming Language :: Python :: 3.9
23
23
  Classifier: Programming Language :: Python :: 3.10
24
24
  Classifier: Programming Language :: Python :: 3.11
25
25
  Classifier: Programming Language :: Python :: 3.12
26
+ Classifier: Programming Language :: Python :: 3.13
26
27
  Classifier: Topic :: Scientific/Engineering
27
28
  Requires-Python: >=3.9
28
29
  Description-Content-Type: text/markdown
@@ -35,13 +36,7 @@ Requires-Dist: dill>=0.3
35
36
  Requires-Dist: python-dateutil>=2.8.0
36
37
  Requires-Dist: stevedore>=3.0.0
37
38
  Requires-Dist: typing-extensions
38
- Requires-Dist: symengine>=0.11
39
- Provides-Extra: all
40
- Requires-Dist: qiskit[crosstalk-pass,csp-layout-pass,qasm3-import,visualization]; extra == "all"
41
- Provides-Extra: crosstalk-pass
42
- Requires-Dist: z3-solver>=4.7; extra == "crosstalk-pass"
43
- Provides-Extra: csp-layout-pass
44
- Requires-Dist: python-constraint>=1.4; extra == "csp-layout-pass"
39
+ Requires-Dist: symengine<0.14,>=0.11
45
40
  Provides-Extra: qasm3-import
46
41
  Requires-Dist: qiskit-qasm3-import>=0.1.0; extra == "qasm3-import"
47
42
  Provides-Extra: visualization
@@ -50,6 +45,12 @@ Requires-Dist: pydot; extra == "visualization"
50
45
  Requires-Dist: Pillow>=4.2.1; extra == "visualization"
51
46
  Requires-Dist: pylatexenc>=1.4; extra == "visualization"
52
47
  Requires-Dist: seaborn>=0.9.0; extra == "visualization"
48
+ Provides-Extra: crosstalk-pass
49
+ Requires-Dist: z3-solver>=4.7; extra == "crosstalk-pass"
50
+ Provides-Extra: csp-layout-pass
51
+ Requires-Dist: python-constraint>=1.4; extra == "csp-layout-pass"
52
+ Provides-Extra: all
53
+ Requires-Dist: qiskit[crosstalk-pass,csp-layout-pass,qasm3-import,visualization]; extra == "all"
53
54
 
54
55
  # Qiskit
55
56