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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +1 -20
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/assembler/assemble_schedules.py +0 -2
  5. qiskit/circuit/__init__.py +1 -44
  6. qiskit/circuit/_standard_gates_commutations.py +0 -585
  7. qiskit/circuit/barrier.py +0 -2
  8. qiskit/circuit/controlflow/builder.py +3 -3
  9. qiskit/circuit/controlflow/if_else.py +5 -13
  10. qiskit/circuit/controlflow/while_loop.py +2 -10
  11. qiskit/circuit/delay.py +3 -20
  12. qiskit/circuit/equivalence.py +214 -13
  13. qiskit/circuit/gate.py +1 -3
  14. qiskit/circuit/instruction.py +11 -32
  15. qiskit/circuit/instructionset.py +0 -2
  16. qiskit/circuit/library/__init__.py +14 -110
  17. qiskit/circuit/library/arithmetic/__init__.py +2 -9
  18. qiskit/circuit/library/arithmetic/adders/__init__.py +0 -1
  19. qiskit/circuit/library/arithmetic/adders/adder.py +2 -154
  20. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +56 -20
  21. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +1 -14
  22. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +91 -21
  23. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
  24. qiskit/circuit/library/arithmetic/multipliers/__init__.py +0 -1
  25. qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -8
  26. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +3 -94
  27. qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +1 -8
  28. qiskit/circuit/library/arithmetic/weighted_adder.py +1 -1
  29. qiskit/circuit/library/basis_change/qft.py +38 -20
  30. qiskit/circuit/library/blueprintcircuit.py +0 -64
  31. qiskit/circuit/library/boolean_logic/__init__.py +4 -4
  32. qiskit/circuit/library/boolean_logic/inner_product.py +4 -81
  33. qiskit/circuit/library/boolean_logic/quantum_and.py +4 -107
  34. qiskit/circuit/library/boolean_logic/quantum_or.py +3 -107
  35. qiskit/circuit/library/boolean_logic/quantum_xor.py +3 -97
  36. qiskit/circuit/library/data_preparation/__init__.py +3 -6
  37. qiskit/circuit/library/data_preparation/pauli_feature_map.py +29 -342
  38. qiskit/circuit/library/data_preparation/{_z_feature_map.py → z_feature_map.py} +34 -45
  39. qiskit/circuit/library/data_preparation/zz_feature_map.py +118 -0
  40. qiskit/circuit/library/fourier_checking.py +11 -72
  41. qiskit/circuit/library/generalized_gates/__init__.py +1 -1
  42. qiskit/circuit/library/generalized_gates/diagonal.py +51 -45
  43. qiskit/circuit/library/generalized_gates/gms.py +14 -67
  44. qiskit/circuit/library/generalized_gates/gr.py +4 -4
  45. qiskit/circuit/library/generalized_gates/isometry.py +2 -2
  46. qiskit/circuit/library/generalized_gates/linear_function.py +6 -12
  47. qiskit/circuit/library/generalized_gates/mcmt.py +107 -167
  48. qiskit/circuit/library/generalized_gates/permutation.py +6 -8
  49. qiskit/circuit/library/generalized_gates/rv.py +9 -8
  50. qiskit/circuit/library/graph_state.py +10 -93
  51. qiskit/circuit/library/grover_operator.py +2 -270
  52. qiskit/circuit/library/hidden_linear_function.py +20 -83
  53. qiskit/circuit/library/iqp.py +20 -99
  54. qiskit/circuit/library/n_local/__init__.py +7 -19
  55. qiskit/circuit/library/n_local/efficient_su2.py +5 -118
  56. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +0 -259
  57. qiskit/circuit/library/n_local/excitation_preserving.py +6 -130
  58. qiskit/circuit/library/n_local/n_local.py +5 -406
  59. qiskit/circuit/library/n_local/pauli_two_design.py +4 -106
  60. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -80
  61. qiskit/circuit/library/n_local/real_amplitudes.py +7 -127
  62. qiskit/circuit/library/n_local/two_local.py +7 -14
  63. qiskit/circuit/library/overlap.py +26 -91
  64. qiskit/circuit/library/pauli_evolution.py +15 -17
  65. qiskit/circuit/library/phase_estimation.py +4 -80
  66. qiskit/circuit/library/quantum_volume.py +20 -72
  67. qiskit/circuit/library/standard_gates/__init__.py +1 -20
  68. qiskit/circuit/library/standard_gates/dcx.py +1 -2
  69. qiskit/circuit/library/standard_gates/ecr.py +2 -2
  70. qiskit/circuit/library/standard_gates/h.py +3 -4
  71. qiskit/circuit/library/standard_gates/i.py +1 -2
  72. qiskit/circuit/library/standard_gates/iswap.py +2 -2
  73. qiskit/circuit/library/standard_gates/p.py +12 -20
  74. qiskit/circuit/library/standard_gates/r.py +1 -1
  75. qiskit/circuit/library/standard_gates/rx.py +3 -4
  76. qiskit/circuit/library/standard_gates/rxx.py +2 -2
  77. qiskit/circuit/library/standard_gates/ry.py +3 -4
  78. qiskit/circuit/library/standard_gates/ryy.py +2 -2
  79. qiskit/circuit/library/standard_gates/rz.py +12 -13
  80. qiskit/circuit/library/standard_gates/rzx.py +6 -6
  81. qiskit/circuit/library/standard_gates/rzz.py +1 -1
  82. qiskit/circuit/library/standard_gates/s.py +4 -4
  83. qiskit/circuit/library/standard_gates/swap.py +3 -3
  84. qiskit/circuit/library/standard_gates/sx.py +3 -4
  85. qiskit/circuit/library/standard_gates/t.py +2 -2
  86. qiskit/circuit/library/standard_gates/u.py +3 -11
  87. qiskit/circuit/library/standard_gates/u1.py +15 -65
  88. qiskit/circuit/library/standard_gates/u2.py +1 -4
  89. qiskit/circuit/library/standard_gates/u3.py +3 -31
  90. qiskit/circuit/library/standard_gates/x.py +5 -7
  91. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -2
  92. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -2
  93. qiskit/circuit/library/standard_gates/y.py +3 -4
  94. qiskit/circuit/library/standard_gates/z.py +3 -3
  95. qiskit/circuit/library/templates/clifford/clifford_2_1.py +8 -9
  96. qiskit/circuit/library/templates/clifford/clifford_2_2.py +9 -10
  97. qiskit/circuit/library/templates/clifford/clifford_2_3.py +7 -9
  98. qiskit/circuit/library/templates/clifford/clifford_2_4.py +8 -9
  99. qiskit/circuit/library/templates/clifford/clifford_3_1.py +8 -9
  100. qiskit/circuit/library/templates/clifford/clifford_4_1.py +9 -10
  101. qiskit/circuit/library/templates/clifford/clifford_4_2.py +9 -10
  102. qiskit/circuit/library/templates/clifford/clifford_4_3.py +9 -10
  103. qiskit/circuit/library/templates/clifford/clifford_4_4.py +9 -10
  104. qiskit/circuit/library/templates/clifford/clifford_5_1.py +9 -10
  105. qiskit/circuit/library/templates/clifford/clifford_6_1.py +9 -10
  106. qiskit/circuit/library/templates/clifford/clifford_6_2.py +9 -10
  107. qiskit/circuit/library/templates/clifford/clifford_6_3.py +9 -10
  108. qiskit/circuit/library/templates/clifford/clifford_6_4.py +8 -9
  109. qiskit/circuit/library/templates/clifford/clifford_6_5.py +9 -10
  110. qiskit/circuit/library/templates/clifford/clifford_8_1.py +9 -10
  111. qiskit/circuit/library/templates/clifford/clifford_8_2.py +9 -10
  112. qiskit/circuit/library/templates/clifford/clifford_8_3.py +9 -10
  113. qiskit/circuit/library/templates/nct/template_nct_2a_1.py +7 -9
  114. qiskit/circuit/library/templates/nct/template_nct_2a_2.py +8 -10
  115. qiskit/circuit/library/templates/nct/template_nct_2a_3.py +10 -12
  116. qiskit/circuit/library/templates/nct/template_nct_4a_1.py +14 -16
  117. qiskit/circuit/library/templates/nct/template_nct_4a_2.py +12 -14
  118. qiskit/circuit/library/templates/nct/template_nct_4a_3.py +10 -12
  119. qiskit/circuit/library/templates/nct/template_nct_4b_1.py +12 -14
  120. qiskit/circuit/library/templates/nct/template_nct_4b_2.py +10 -12
  121. qiskit/circuit/library/templates/nct/template_nct_5a_1.py +10 -12
  122. qiskit/circuit/library/templates/nct/template_nct_5a_2.py +10 -12
  123. qiskit/circuit/library/templates/nct/template_nct_5a_3.py +10 -12
  124. qiskit/circuit/library/templates/nct/template_nct_5a_4.py +9 -11
  125. qiskit/circuit/library/templates/nct/template_nct_6a_1.py +9 -11
  126. qiskit/circuit/library/templates/nct/template_nct_6a_2.py +10 -12
  127. qiskit/circuit/library/templates/nct/template_nct_6a_3.py +10 -12
  128. qiskit/circuit/library/templates/nct/template_nct_6a_4.py +10 -12
  129. qiskit/circuit/library/templates/nct/template_nct_6b_1.py +10 -12
  130. qiskit/circuit/library/templates/nct/template_nct_6b_2.py +10 -12
  131. qiskit/circuit/library/templates/nct/template_nct_6c_1.py +10 -12
  132. qiskit/circuit/library/templates/nct/template_nct_7a_1.py +11 -13
  133. qiskit/circuit/library/templates/nct/template_nct_7b_1.py +11 -13
  134. qiskit/circuit/library/templates/nct/template_nct_7c_1.py +11 -13
  135. qiskit/circuit/library/templates/nct/template_nct_7d_1.py +11 -13
  136. qiskit/circuit/library/templates/nct/template_nct_7e_1.py +11 -13
  137. qiskit/circuit/library/templates/nct/template_nct_9a_1.py +11 -13
  138. qiskit/circuit/library/templates/nct/template_nct_9c_1.py +9 -11
  139. qiskit/circuit/library/templates/nct/template_nct_9c_10.py +10 -12
  140. qiskit/circuit/library/templates/nct/template_nct_9c_11.py +10 -12
  141. qiskit/circuit/library/templates/nct/template_nct_9c_12.py +10 -12
  142. qiskit/circuit/library/templates/nct/template_nct_9c_2.py +10 -12
  143. qiskit/circuit/library/templates/nct/template_nct_9c_3.py +10 -12
  144. qiskit/circuit/library/templates/nct/template_nct_9c_4.py +10 -12
  145. qiskit/circuit/library/templates/nct/template_nct_9c_5.py +10 -12
  146. qiskit/circuit/library/templates/nct/template_nct_9c_6.py +10 -12
  147. qiskit/circuit/library/templates/nct/template_nct_9c_7.py +10 -12
  148. qiskit/circuit/library/templates/nct/template_nct_9c_8.py +10 -12
  149. qiskit/circuit/library/templates/nct/template_nct_9c_9.py +10 -12
  150. qiskit/circuit/library/templates/nct/template_nct_9d_1.py +9 -11
  151. qiskit/circuit/library/templates/nct/template_nct_9d_10.py +10 -12
  152. qiskit/circuit/library/templates/nct/template_nct_9d_2.py +10 -12
  153. qiskit/circuit/library/templates/nct/template_nct_9d_3.py +10 -12
  154. qiskit/circuit/library/templates/nct/template_nct_9d_4.py +10 -12
  155. qiskit/circuit/library/templates/nct/template_nct_9d_5.py +10 -12
  156. qiskit/circuit/library/templates/nct/template_nct_9d_6.py +10 -12
  157. qiskit/circuit/library/templates/nct/template_nct_9d_7.py +10 -12
  158. qiskit/circuit/library/templates/nct/template_nct_9d_8.py +10 -12
  159. qiskit/circuit/library/templates/nct/template_nct_9d_9.py +10 -12
  160. qiskit/circuit/library/templates/rzx/rzx_cy.py +10 -11
  161. qiskit/circuit/library/templates/rzx/rzx_xz.py +15 -16
  162. qiskit/circuit/library/templates/rzx/rzx_yz.py +10 -12
  163. qiskit/circuit/library/templates/rzx/rzx_zz1.py +20 -22
  164. qiskit/circuit/library/templates/rzx/rzx_zz2.py +15 -16
  165. qiskit/circuit/library/templates/rzx/rzx_zz3.py +15 -17
  166. qiskit/circuit/parameter.py +0 -4
  167. qiskit/circuit/parameterexpression.py +34 -167
  168. qiskit/circuit/quantumcircuit.py +126 -162
  169. qiskit/circuit/singleton.py +0 -2
  170. qiskit/circuit/store.py +0 -2
  171. qiskit/compiler/assembler.py +4 -17
  172. qiskit/compiler/scheduler.py +0 -2
  173. qiskit/compiler/sequencer.py +0 -2
  174. qiskit/compiler/transpiler.py +26 -81
  175. qiskit/converters/circuit_to_dag.py +2 -2
  176. qiskit/converters/circuit_to_dagdependency.py +1 -1
  177. qiskit/converters/circuit_to_dagdependency_v2.py +1 -1
  178. qiskit/converters/circuit_to_instruction.py +1 -1
  179. qiskit/converters/dag_to_circuit.py +5 -7
  180. qiskit/converters/dag_to_dagdependency.py +1 -1
  181. qiskit/converters/dag_to_dagdependency_v2.py +1 -1
  182. qiskit/converters/dagdependency_to_circuit.py +1 -5
  183. qiskit/converters/dagdependency_to_dag.py +1 -6
  184. qiskit/dagcircuit/collect_blocks.py +3 -3
  185. qiskit/dagcircuit/dagdependency.py +5 -18
  186. qiskit/dagcircuit/dagdependency_v2.py +1 -1
  187. qiskit/dagcircuit/dagnode.py +2 -2
  188. qiskit/passmanager/__init__.py +2 -2
  189. qiskit/primitives/backend_estimator.py +2 -5
  190. qiskit/primitives/backend_sampler_v2.py +18 -61
  191. qiskit/primitives/base/base_estimator.py +2 -2
  192. qiskit/primitives/containers/data_bin.py +1 -9
  193. qiskit/primitives/statevector_sampler.py +1 -1
  194. qiskit/primitives/utils.py +1 -1
  195. qiskit/providers/__init__.py +3 -3
  196. qiskit/providers/backend.py +1 -12
  197. qiskit/providers/backend_compat.py +3 -23
  198. qiskit/providers/basic_provider/basic_simulator.py +2 -12
  199. qiskit/providers/fake_provider/fake_pulse_backend.py +1 -6
  200. qiskit/providers/fake_provider/generic_backend_v2.py +30 -46
  201. qiskit/providers/models/pulsedefaults.py +0 -2
  202. qiskit/pulse/builder.py +18 -59
  203. qiskit/pulse/calibration_entries.py +1 -4
  204. qiskit/pulse/channels.py +0 -2
  205. qiskit/pulse/exceptions.py +0 -2
  206. qiskit/pulse/instruction_schedule_map.py +6 -21
  207. qiskit/pulse/instructions/acquire.py +0 -2
  208. qiskit/pulse/instructions/delay.py +0 -2
  209. qiskit/pulse/instructions/directives.py +0 -8
  210. qiskit/pulse/instructions/frequency.py +0 -3
  211. qiskit/pulse/instructions/instruction.py +0 -2
  212. qiskit/pulse/instructions/phase.py +0 -3
  213. qiskit/pulse/instructions/play.py +0 -2
  214. qiskit/pulse/instructions/reference.py +0 -2
  215. qiskit/pulse/instructions/snapshot.py +0 -2
  216. qiskit/pulse/library/pulse.py +0 -2
  217. qiskit/pulse/library/symbolic_pulses.py +0 -28
  218. qiskit/pulse/library/waveform.py +0 -2
  219. qiskit/pulse/macros.py +1 -1
  220. qiskit/pulse/schedule.py +13 -12
  221. qiskit/pulse/transforms/alignments.py +3 -5
  222. qiskit/pulse/transforms/dag.py +0 -7
  223. qiskit/qasm2/export.py +3 -5
  224. qiskit/qasm2/parse.py +2 -46
  225. qiskit/qasm3/__init__.py +0 -1
  226. qiskit/qasm3/ast.py +15 -123
  227. qiskit/qasm3/exporter.py +77 -103
  228. qiskit/qobj/converters/pulse_instruction.py +4 -6
  229. qiskit/qpy/__init__.py +0 -181
  230. qiskit/qpy/binary_io/circuits.py +5 -20
  231. qiskit/qpy/binary_io/schedules.py +4 -3
  232. qiskit/qpy/binary_io/value.py +13 -310
  233. qiskit/qpy/common.py +2 -46
  234. qiskit/qpy/formats.py +0 -7
  235. qiskit/qpy/interface.py +4 -40
  236. qiskit/quantum_info/__init__.py +0 -4
  237. qiskit/quantum_info/operators/channel/transformations.py +21 -28
  238. qiskit/quantum_info/operators/dihedral/dihedral.py +1 -1
  239. qiskit/quantum_info/operators/operator.py +8 -54
  240. qiskit/quantum_info/operators/symplectic/base_pauli.py +19 -11
  241. qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
  242. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +1 -1
  243. qiskit/quantum_info/operators/symplectic/pauli.py +0 -2
  244. qiskit/quantum_info/operators/symplectic/pauli_list.py +4 -4
  245. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +2 -23
  246. qiskit/quantum_info/states/densitymatrix.py +5 -5
  247. qiskit/quantum_info/states/stabilizerstate.py +1 -1
  248. qiskit/quantum_info/states/statevector.py +6 -6
  249. qiskit/result/mitigation/base_readout_mitigator.py +1 -1
  250. qiskit/result/mitigation/correlated_readout_mitigator.py +1 -9
  251. qiskit/result/mitigation/local_readout_mitigator.py +1 -9
  252. qiskit/result/mitigation/utils.py +0 -57
  253. qiskit/scheduler/config.py +0 -2
  254. qiskit/scheduler/methods/basic.py +0 -3
  255. qiskit/scheduler/schedule_circuit.py +0 -2
  256. qiskit/scheduler/sequence.py +0 -2
  257. qiskit/synthesis/__init__.py +0 -25
  258. qiskit/synthesis/clifford/clifford_decompose_bm.py +2 -1
  259. qiskit/synthesis/clifford/clifford_decompose_greedy.py +2 -3
  260. qiskit/synthesis/clifford/clifford_decompose_layers.py +1 -2
  261. qiskit/synthesis/evolution/__init__.py +0 -1
  262. qiskit/synthesis/evolution/lie_trotter.py +42 -16
  263. qiskit/synthesis/evolution/product_formula.py +238 -165
  264. qiskit/synthesis/evolution/qdrift.py +29 -36
  265. qiskit/synthesis/evolution/suzuki_trotter.py +27 -87
  266. qiskit/synthesis/multi_controlled/__init__.py +0 -1
  267. qiskit/synthesis/qft/qft_decompose_full.py +1 -19
  268. qiskit/synthesis/qft/qft_decompose_lnn.py +1 -2
  269. qiskit/synthesis/stabilizer/stabilizer_decompose.py +1 -2
  270. qiskit/synthesis/two_qubit/two_qubit_decompose.py +63 -4
  271. qiskit/synthesis/two_qubit/weyl.py +97 -0
  272. qiskit/synthesis/unitary/qsd.py +5 -5
  273. qiskit/transpiler/__init__.py +14 -21
  274. qiskit/transpiler/basepasses.py +1 -1
  275. qiskit/transpiler/passes/__init__.py +0 -2
  276. qiskit/transpiler/passes/basis/basis_translator.py +565 -9
  277. qiskit/transpiler/passes/basis/decompose.py +12 -45
  278. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  279. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
  280. qiskit/transpiler/passes/calibration/pulse_gate.py +2 -4
  281. qiskit/transpiler/passes/calibration/rx_builder.py +7 -11
  282. qiskit/transpiler/passes/calibration/rzx_builder.py +30 -46
  283. qiskit/transpiler/passes/layout/disjoint_utils.py +13 -15
  284. qiskit/transpiler/passes/layout/sabre_layout.py +2 -7
  285. qiskit/transpiler/passes/layout/sabre_pre_layout.py +0 -5
  286. qiskit/transpiler/passes/optimization/__init__.py +0 -1
  287. qiskit/transpiler/passes/optimization/collect_cliffords.py +3 -19
  288. qiskit/transpiler/passes/optimization/collect_linear_functions.py +1 -1
  289. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
  290. qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +1 -1
  291. qiskit/transpiler/passes/optimization/consolidate_blocks.py +131 -48
  292. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +2 -4
  293. qiskit/transpiler/passes/optimization/elide_permutations.py +32 -9
  294. qiskit/transpiler/passes/optimization/inverse_cancellation.py +0 -2
  295. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +11 -5
  296. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
  297. qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +1 -1
  298. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +5 -5
  299. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +4 -4
  300. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +2 -2
  301. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +1 -1
  302. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
  303. qiskit/transpiler/passes/routing/sabre_swap.py +3 -7
  304. qiskit/transpiler/passes/routing/star_prerouting.py +2 -2
  305. qiskit/transpiler/passes/scheduling/alap.py +1 -1
  306. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +2 -2
  307. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
  308. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -2
  309. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +2 -2
  310. qiskit/transpiler/passes/scheduling/asap.py +1 -1
  311. qiskit/transpiler/passes/scheduling/base_scheduler.py +12 -14
  312. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +4 -9
  313. qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
  314. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +5 -16
  315. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +1 -4
  316. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +2 -6
  317. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -9
  318. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +99 -262
  319. qiskit/transpiler/passes/synthesis/hls_plugins.py +7 -638
  320. qiskit/transpiler/passes/synthesis/qubit_tracker.py +132 -0
  321. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +3 -3
  322. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -55
  323. qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +56 -2
  324. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -5
  325. qiskit/transpiler/passes/utils/gate_direction.py +275 -12
  326. qiskit/transpiler/passes/utils/gates_basis.py +30 -7
  327. qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +1 -2
  328. qiskit/transpiler/passmanager_config.py +4 -22
  329. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +14 -40
  330. qiskit/transpiler/preset_passmanagers/common.py +3 -5
  331. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +42 -125
  332. qiskit/transpiler/preset_passmanagers/plugin.py +1 -1
  333. qiskit/transpiler/target.py +16 -74
  334. qiskit/visualization/circuit/_utils.py +2 -2
  335. qiskit/visualization/circuit/circuit_visualization.py +2 -3
  336. qiskit/visualization/circuit/matplotlib.py +1 -1
  337. qiskit/visualization/dag_visualization.py +1 -1
  338. qiskit/visualization/pass_manager_visualization.py +14 -3
  339. qiskit/visualization/pulse_v2/interface.py +1 -3
  340. qiskit/visualization/timeline/core.py +2 -25
  341. qiskit/visualization/timeline/interface.py +0 -12
  342. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/METADATA +19 -20
  343. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/RECORD +347 -358
  344. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/WHEEL +1 -1
  345. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/entry_points.txt +0 -19
  346. qiskit/circuit/library/data_preparation/_zz_feature_map.py +0 -150
  347. qiskit/circuit/twirling.py +0 -145
  348. qiskit/synthesis/arithmetic/__init__.py +0 -16
  349. qiskit/synthesis/arithmetic/adders/__init__.py +0 -17
  350. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +0 -154
  351. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +0 -103
  352. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +0 -161
  353. qiskit/synthesis/arithmetic/multipliers/__init__.py +0 -16
  354. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +0 -102
  355. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +0 -99
  356. qiskit/synthesis/evolution/pauli_network.py +0 -80
  357. qiskit/synthesis/multi_controlled/mcmt_vchain.py +0 -52
  358. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +0 -69
  359. qiskit/utils/deprecate_pulse.py +0 -119
  360. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/LICENSE.txt +0 -0
  361. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/top_level.txt +0 -0
@@ -21,7 +21,6 @@ from qiskit.transpiler.basepasses import TransformationPass
21
21
  from qiskit.transpiler.exceptions import TranspilerError
22
22
  from qiskit.transpiler.layout import Layout
23
23
  from qiskit.transpiler.passes.calibration.rzx_builder import _check_calibration_type, CRCalType
24
- from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
25
24
 
26
25
  from qiskit.dagcircuit import DAGCircuit
27
26
  from qiskit.converters import circuit_to_dag
@@ -35,7 +34,6 @@ class EchoRZXWeylDecomposition(TransformationPass):
35
34
  Each pair of RZXGates forms an echoed RZXGate.
36
35
  """
37
36
 
38
- @deprecate_pulse_dependency
39
37
  def __init__(self, instruction_schedule_map=None, target=None):
40
38
  """EchoRZXWeylDecomposition pass.
41
39
 
@@ -64,7 +62,7 @@ class EchoRZXWeylDecomposition(TransformationPass):
64
62
  def _echo_rzx_dag(theta):
65
63
  """Return the following circuit
66
64
 
67
- .. code-block:: text
65
+ .. parsed-literal::
68
66
 
69
67
  ┌───────────────┐┌───┐┌────────────────┐┌───┐
70
68
  q_0: ┤0 ├┤ X ├┤0 ├┤ X ├
@@ -85,7 +83,7 @@ class EchoRZXWeylDecomposition(TransformationPass):
85
83
  def _reverse_echo_rzx_dag(theta):
86
84
  """Return the following circuit
87
85
 
88
- .. code-block:: text
86
+ .. parsed-literal::
89
87
 
90
88
  ┌───┐┌───────────────┐ ┌────────────────┐┌───┐
91
89
  q_0: ┤ H ├┤1 ├─────┤1 ├┤ H ├─────
@@ -15,9 +15,10 @@
15
15
 
16
16
  import logging
17
17
 
18
+ from qiskit.circuit.library.standard_gates import SwapGate
19
+ from qiskit.circuit.library.generalized_gates import PermutationGate
18
20
  from qiskit.transpiler.basepasses import TransformationPass
19
21
  from qiskit.transpiler.layout import Layout
20
- from qiskit._accelerate import elide_permutations as elide_permutations_rs
21
22
 
22
23
  logger = logging.getLogger(__name__)
23
24
 
@@ -66,16 +67,38 @@ class ElidePermutations(TransformationPass):
66
67
  )
67
68
  return dag
68
69
 
69
- result = elide_permutations_rs.run(dag)
70
-
71
- # If the pass did not do anything, the result is None
72
- if result is None:
70
+ op_count = dag.count_ops(recurse=False)
71
+ if op_count.get("swap", 0) == 0 and op_count.get("permutation", 0) == 0:
73
72
  return dag
74
73
 
75
- # Otherwise, the result is a pair consisting of the rewritten DAGCircuit and the
76
- # qubit mapping.
77
- (new_dag, qubit_mapping) = result
78
-
74
+ new_dag = dag.copy_empty_like()
75
+ qubit_mapping = list(range(len(dag.qubits)))
76
+
77
+ def _apply_mapping(qargs):
78
+ return tuple(dag.qubits[qubit_mapping[dag.find_bit(qubit).index]] for qubit in qargs)
79
+
80
+ for node in dag.topological_op_nodes():
81
+ if not isinstance(node.op, (SwapGate, PermutationGate)):
82
+ new_dag.apply_operation_back(
83
+ node.op, _apply_mapping(node.qargs), node.cargs, check=False
84
+ )
85
+ elif getattr(node.op, "condition", None) is not None:
86
+ new_dag.apply_operation_back(
87
+ node.op, _apply_mapping(node.qargs), node.cargs, check=False
88
+ )
89
+ elif isinstance(node.op, SwapGate):
90
+ index_0 = dag.find_bit(node.qargs[0]).index
91
+ index_1 = dag.find_bit(node.qargs[1]).index
92
+ qubit_mapping[index_1], qubit_mapping[index_0] = (
93
+ qubit_mapping[index_0],
94
+ qubit_mapping[index_1],
95
+ )
96
+ elif isinstance(node.op, PermutationGate):
97
+ starting_indices = [qubit_mapping[dag.find_bit(qarg).index] for qarg in node.qargs]
98
+ pattern = node.op.params[0]
99
+ pattern_indices = [qubit_mapping[idx] for idx in pattern]
100
+ for i, j in zip(starting_indices, pattern_indices):
101
+ qubit_mapping[i] = j
79
102
  input_qubit_mapping = {qubit: index for index, qubit in enumerate(dag.qubits)}
80
103
  self.property_set["original_layout"] = Layout(input_qubit_mapping)
81
104
  if self.property_set["original_qubit_indices"] is None:
@@ -19,7 +19,6 @@ from qiskit.circuit import Gate
19
19
  from qiskit.dagcircuit import DAGCircuit
20
20
  from qiskit.transpiler.basepasses import TransformationPass
21
21
  from qiskit.transpiler.exceptions import TranspilerError
22
- from qiskit.transpiler.passes.utils import control_flow
23
22
 
24
23
  from qiskit._accelerate.inverse_cancellation import inverse_cancellation
25
24
 
@@ -75,7 +74,6 @@ class InverseCancellation(TransformationPass):
75
74
 
76
75
  super().__init__()
77
76
 
78
- @control_flow.trivial_recurse
79
77
  def run(self, dag: DAGCircuit):
80
78
  """Run the InverseCancellation pass on `dag`.
81
79
 
@@ -170,13 +170,13 @@ class Optimize1qGatesDecomposition(TransformationPass):
170
170
  return False
171
171
 
172
172
  # do we even have calibrations?
173
- has_cals_p = dag._calibrations_prop is not None and len(dag._calibrations_prop) > 0
173
+ has_cals_p = dag.calibrations is not None and len(dag.calibrations) > 0
174
174
  # does this run have uncalibrated gates?
175
- uncalibrated_p = not has_cals_p or any(not dag._has_calibration_for(g) for g in old_run)
175
+ uncalibrated_p = not has_cals_p or any(not dag.has_calibration_for(g) for g in old_run)
176
176
  # does this run have gates not in the image of ._decomposers _and_ uncalibrated?
177
177
  if basis is not None:
178
178
  uncalibrated_and_not_basis_p = any(
179
- g.name not in basis and (not has_cals_p or not dag._has_calibration_for(g))
179
+ g.name not in basis and (not has_cals_p or not dag.has_calibration_for(g))
180
180
  for g in old_run
181
181
  )
182
182
  else:
@@ -222,12 +222,18 @@ class Optimize1qGatesDecomposition(TransformationPass):
222
222
  def _error(self, circuit, qubit):
223
223
  """
224
224
  Calculate a rough error for a `circuit` that runs on a specific
225
- `qubit` of `target` (`circuit` is a list of DAGOPNodes).
225
+ `qubit` of `target` (`circuit` can either be an OneQubitGateSequence
226
+ from Rust or a list of DAGOPNodes).
226
227
 
227
228
  Use basis errors from target if available, otherwise use length
228
229
  of circuit as a weak proxy for error.
229
230
  """
230
- return euler_one_qubit_decomposer.compute_error_list(circuit, qubit, self.error_map)
231
+ if isinstance(circuit, euler_one_qubit_decomposer.OneQubitGateSequence):
232
+ return euler_one_qubit_decomposer.compute_error_one_qubit_sequence(
233
+ circuit, qubit, self.error_map
234
+ )
235
+ else:
236
+ return euler_one_qubit_decomposer.compute_error_list(circuit, qubit, self.error_map)
231
237
 
232
238
 
233
239
  def _possible_decomposers(basis_set):
@@ -86,7 +86,7 @@ class Optimize1qGates(TransformationPass):
86
86
  for current_node in run:
87
87
  left_name = current_node.name
88
88
  if (
89
- getattr(current_node, "condition", None) is not None
89
+ getattr(current_node.op, "condition", None) is not None
90
90
  or len(current_node.qargs) != 1
91
91
  or left_name not in ["p", "u1", "u2", "u3", "u", "id"]
92
92
  ):
@@ -40,7 +40,7 @@ class OptimizeSwapBeforeMeasure(TransformationPass):
40
40
 
41
41
  swaps = dag.op_nodes(SwapGate)
42
42
  for swap in swaps[::-1]:
43
- if getattr(swap.op, "_condition", None) is not None:
43
+ if getattr(swap.op, "condition", None) is not None:
44
44
  continue
45
45
  final_successor = []
46
46
  for successor in dag.descendants(swap):
@@ -242,7 +242,7 @@ class BackwardMatch:
242
242
  Returns:
243
243
  bool: True if the same, False otherwise.
244
244
  """
245
- return node_circuit.op.soft_compare(node_template.op)
245
+ return node_circuit.op == node_template.op
246
246
 
247
247
  def _is_same_q_conf(self, node_circuit, node_template, qarg_circuit):
248
248
  """
@@ -304,15 +304,15 @@ class BackwardMatch:
304
304
  """
305
305
  if (
306
306
  node_circuit.type == "op"
307
- and getattr(node_circuit.op, "_condition", None)
307
+ and getattr(node_circuit.op, "condition", None)
308
308
  and node_template.type == "op"
309
- and getattr(node_template.op, "_condition", None)
309
+ and getattr(node_template.op, "condition", None)
310
310
  ):
311
311
  if set(carg_circuit) != set(node_template.cindices):
312
312
  return False
313
313
  if (
314
- getattr(node_circuit.op, "_condition", None)[1]
315
- != getattr(node_template.op, "_condition", None)[1]
314
+ getattr(node_circuit.op, "condition", None)[1]
315
+ != getattr(node_template.op, "condition", None)[1]
316
316
  ):
317
317
  return False
318
318
  return True
@@ -311,15 +311,15 @@ class ForwardMatch:
311
311
  """
312
312
  if (
313
313
  node_circuit.type == "op"
314
- and getattr(node_circuit.op, "_condition", None)
314
+ and getattr(node_circuit.op, "condition", None)
315
315
  and node_template.type == "op"
316
- and getattr(node_template.op, "_condition", None)
316
+ and getattr(node_template.op, "condition", None)
317
317
  ):
318
318
  if set(self.carg_indices) != set(node_template.cindices):
319
319
  return False
320
320
  if (
321
- getattr(node_circuit.op, "_condition", None)[1]
322
- != getattr(node_template.op, "_condition", None)[1]
321
+ getattr(node_circuit.op, "condition", None)[1]
322
+ != getattr(node_template.op, "condition", None)[1]
323
323
  ):
324
324
  return False
325
325
  return True
@@ -450,7 +450,7 @@ class TemplateSubstitution:
450
450
  template_sublist and circuit_sublist match up to the
451
451
  assignment of the parameters. For example the template
452
452
 
453
- .. code-block:: text
453
+ .. parsed-literal::
454
454
 
455
455
  ┌───────────┐ ┌────────┐
456
456
  q_0: ┤ P(-1.0*β) ├──■────────────■──┤0 ├
@@ -460,7 +460,7 @@ class TemplateSubstitution:
460
460
 
461
461
  should only maximally match once in the circuit
462
462
 
463
- .. code-block:: text
463
+ .. parsed-literal::
464
464
 
465
465
  ┌───────┐
466
466
  q_0: ┤ P(-2) ├──■────────────■────────────────────────────
@@ -41,7 +41,7 @@ class Commuting2qGateRouter(TransformationPass):
41
41
  qubit :class:`.PauliEvolutionGate` to qubits 0, 1, 3, and 4 of the five qubit device with
42
42
  the coupling map
43
43
 
44
- .. code-block:: text
44
+ .. parsed-literal::
45
45
 
46
46
  0 -- 1 -- 2
47
47
  |
@@ -30,7 +30,7 @@ class SwapStrategy:
30
30
  parallel. This means that a qubit can only be present once in a swap layer. For example, the
31
31
  following swap layers represent the optimal swap strategy for a line with five qubits
32
32
 
33
- .. code-block:: text
33
+ .. parsed-literal::
34
34
 
35
35
  (
36
36
  ((0, 1), (2, 3)), # Swap layer no. 1
@@ -41,9 +41,8 @@ class SabreSwap(TransformationPass):
41
41
  r"""Map input circuit onto a backend topology via insertion of SWAPs.
42
42
 
43
43
  Implementation of the SWAP-based heuristic search from the SABRE qubit
44
- mapping paper [2] (Algorithm 1) with the modifications from the LightSABRE
45
- paper [1]. The heuristic aims to minimize the number of lossy SWAPs inserted
46
- and the depth of the circuit.
44
+ mapping paper [1] (Algorithm 1). The heuristic aims to minimize the number
45
+ of lossy SWAPs inserted and the depth of the circuit.
47
46
 
48
47
  This algorithm starts from an initial layout of virtual qubits onto physical
49
48
  qubits, and iterates over the circuit DAG until all gates are exhausted,
@@ -70,10 +69,7 @@ class SabreSwap(TransformationPass):
70
69
 
71
70
  **References:**
72
71
 
73
- [1] Henry Zou and Matthew Treinish and Kevin Hartman and Alexander Ivrii and Jake Lishman.
74
- "LightSABRE: A Lightweight and Enhanced SABRE Algorithm"
75
- `arXiv:2409.08368 <https://doi.org/10.48550/arXiv.2409.08368>`__
76
- [2] Li, Gushu, Yufei Ding, and Yuan Xie. "Tackling the qubit mapping problem
72
+ [1] Li, Gushu, Yufei Ding, and Yuan Xie. "Tackling the qubit mapping problem
77
73
  for NISQ-era quantum devices." ASPLOS 2019.
78
74
  `arXiv:1809.02573 <https://arxiv.org/pdf/1809.02573.pdf>`_
79
75
  """
@@ -223,7 +223,7 @@ class StarPreRouting(TransformationPass):
223
223
  return (
224
224
  len(node.qargs) <= 2
225
225
  and len(node.cargs) == 0
226
- and getattr(node, "condition", None) is None
226
+ and getattr(node.op, "condition", None) is None
227
227
  and not isinstance(node.op, Barrier)
228
228
  )
229
229
 
@@ -372,7 +372,7 @@ def _extract_nodes(nodes, dag):
372
372
  qubit_indices = [dag.find_bit(qubit).index for qubit in node.qargs]
373
373
  classical_bit_indices = set()
374
374
 
375
- if node.condition is not None:
375
+ if node.op.condition is not None:
376
376
  classical_bit_indices.update(condition_resources(node.op.condition).clbits)
377
377
 
378
378
  if isinstance(node.op, SwitchCaseOp):
@@ -144,7 +144,7 @@ class ALAPSchedule(BaseSchedulerTransform):
144
144
 
145
145
  new_dag.name = dag.name
146
146
  new_dag.metadata = dag.metadata
147
- new_dag._calibrations_prop = dag._calibrations_prop
147
+ new_dag.calibrations = dag.calibrations
148
148
 
149
149
  # set circuit duration and unit to indicate it is scheduled
150
150
  new_dag.duration = circuit_duration
@@ -63,7 +63,7 @@ class AlignMeasures(TransformationPass):
63
63
  Examples:
64
64
  We assume executing the following circuit on a backend with ``alignment=16``.
65
65
 
66
- .. code-block:: text
66
+ .. parsed-literal::
67
67
 
68
68
  ┌───┐┌────────────────┐┌─┐
69
69
  q_0: ┤ X ├┤ Delay(100[dt]) ├┤M├
@@ -74,7 +74,7 @@ class AlignMeasures(TransformationPass):
74
74
  Note that delay of 100 dt induces a misalignment of 4 dt at the measurement.
75
75
  This pass appends an extra 12 dt time shift to the input circuit.
76
76
 
77
- .. code-block:: text
77
+ .. parsed-literal::
78
78
 
79
79
  ┌───┐┌────────────────┐┌─┐
80
80
  q_0: ┤ X ├┤ Delay(112[dt]) ├┤M├
@@ -70,7 +70,7 @@ class InstructionDurationCheck(AnalysisPass):
70
70
  return
71
71
 
72
72
  # Check custom gate durations
73
- for inst_defs in dag._calibrations_prop.values():
73
+ for inst_defs in dag.calibrations.values():
74
74
  for caldef in inst_defs.values():
75
75
  dur = caldef.duration
76
76
  if not (dur % self.acquire_align == 0 and dur % self.pulse_align == 0):
@@ -17,7 +17,6 @@ from qiskit.pulse import Play
17
17
  from qiskit.transpiler.basepasses import AnalysisPass
18
18
  from qiskit.transpiler.exceptions import TranspilerError
19
19
  from qiskit.transpiler.target import Target
20
- from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
21
20
 
22
21
 
23
22
  class ValidatePulseGates(AnalysisPass):
@@ -41,7 +40,6 @@ class ValidatePulseGates(AnalysisPass):
41
40
  the backend control electronics.
42
41
  """
43
42
 
44
- @deprecate_pulse_dependency
45
43
  def __init__(
46
44
  self,
47
45
  granularity: int = 1,
@@ -35,7 +35,7 @@ class ConstrainedReschedule(AnalysisPass):
35
35
 
36
36
  We assume executing the following circuit on a backend with 16 dt of acquire alignment.
37
37
 
38
- .. code-block:: text
38
+ .. parsed-literal::
39
39
 
40
40
  ┌───┐┌────────────────┐┌─┐
41
41
  q_0: ┤ X ├┤ Delay(100[dt]) ├┤M├
@@ -46,7 +46,7 @@ class ConstrainedReschedule(AnalysisPass):
46
46
  Note that delay of 100 dt induces a misalignment of 4 dt at the measurement.
47
47
  This pass appends an extra 12 dt time shift to the input circuit.
48
48
 
49
- .. code-block:: text
49
+ .. parsed-literal::
50
50
 
51
51
  ┌───┐┌────────────────┐┌─┐
52
52
  q_0: ┤ X ├┤ Delay(112[dt]) ├┤M├
@@ -167,7 +167,7 @@ class ASAPSchedule(BaseSchedulerTransform):
167
167
 
168
168
  new_dag.name = dag.name
169
169
  new_dag.metadata = dag.metadata
170
- new_dag._calibrations_prop = dag._calibrations_prop
170
+ new_dag.calibrations = dag.calibrations
171
171
 
172
172
  # set circuit duration and unit to indicate it is scheduled
173
173
  new_dag.duration = circuit_duration
@@ -42,7 +42,7 @@ class BaseSchedulerTransform(TransformationPass):
42
42
  conditioned on the same register are commute, i.e. read-access to the
43
43
  classical register doesn't change its state.
44
44
 
45
- .. code-block:: text
45
+ .. parsed-literal::
46
46
 
47
47
  qc = QuantumCircuit(2, 1)
48
48
  qc.delay(100, 0)
@@ -52,7 +52,7 @@ class BaseSchedulerTransform(TransformationPass):
52
52
  The scheduler SHOULD comply with above topological ordering policy of the DAG circuit.
53
53
  Accordingly, the `asap`-scheduled circuit will become
54
54
 
55
- .. code-block:: text
55
+ .. parsed-literal::
56
56
 
57
57
  ┌────────────────┐ ┌───┐
58
58
  q_0: ┤ Delay(100[dt]) ├───┤ X ├──────────────
@@ -76,7 +76,7 @@ class BaseSchedulerTransform(TransformationPass):
76
76
  is moved to the classical register (C).
77
77
  The sequence from t0 to t1 of the measure instruction interval might be modeled as follows:
78
78
 
79
- .. code-block:: text
79
+ .. parsed-literal::
80
80
 
81
81
  Q ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
82
82
  B ░░▒▒▒▒▒▒▒▒░░░░░░░░░
@@ -90,7 +90,7 @@ class BaseSchedulerTransform(TransformationPass):
90
90
 
91
91
  This precise model may induce weird edge case.
92
92
 
93
- .. code-block:: text
93
+ .. parsed-literal::
94
94
 
95
95
  ┌───┐
96
96
  q_0: ───┤ X ├──────
@@ -107,7 +107,7 @@ class BaseSchedulerTransform(TransformationPass):
107
107
  is unchanged during the stimulus, thus two nodes are simultaneously operated.
108
108
  If one `alap`-schedule this circuit, it may return following circuit.
109
109
 
110
- .. code-block:: text
110
+ .. parsed-literal::
111
111
 
112
112
  ┌────────────────┐ ┌───┐
113
113
  q_0: ┤ Delay(500[dt]) ├───┤ X ├──────
@@ -122,7 +122,7 @@ class BaseSchedulerTransform(TransformationPass):
122
122
  It looks like the topological ordering between the nodes are flipped in the scheduled view.
123
123
  This behavior can be understood by considering the control flow model described above,
124
124
 
125
- .. code-block:: text
125
+ .. parsed-literal::
126
126
 
127
127
  : Quantum Circuit, first-measure
128
128
  0 ░░░░░░░░░░░░▒▒▒▒▒▒░
@@ -154,7 +154,7 @@ class BaseSchedulerTransform(TransformationPass):
154
154
  In this case, ``Measure`` instruction immediately locks the register C.
155
155
  Under this configuration, the `alap`-scheduled circuit of above example may become
156
156
 
157
- .. code-block:: text
157
+ .. parsed-literal::
158
158
 
159
159
  ┌───┐
160
160
  q_0: ───┤ X ├──────
@@ -168,8 +168,7 @@ class BaseSchedulerTransform(TransformationPass):
168
168
  it may separately schedule qubit and classical register,
169
169
  insertion of the delay yields unnecessary longer total execution time.
170
170
 
171
- .. code-block:: text
172
-
171
+ .. parsed-literal::
173
172
  : Quantum Circuit, first-xgate
174
173
  0 ░▒▒▒░░░░░░░░░░░░░░░
175
174
  1 ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
@@ -186,7 +185,7 @@ class BaseSchedulerTransform(TransformationPass):
186
185
  If finite conditional latency is provided, for example, 30 dt, the circuit
187
186
  is scheduled as follows.
188
187
 
189
- .. code-block:: text
188
+ .. parsed-literal::
190
189
 
191
190
  ┌───────────────┐ ┌───┐
192
191
  q_0: ┤ Delay(30[dt]) ├───┤ X ├──────
@@ -198,8 +197,7 @@ class BaseSchedulerTransform(TransformationPass):
198
197
 
199
198
  with the timing model:
200
199
 
201
- .. code-block:: text
202
-
200
+ .. parsed-literal::
203
201
  : Quantum Circuit, first-xgate
204
202
  0 ░░▒▒▒░░░░░░░░░░░░░░░
205
203
  1 ░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
@@ -266,10 +264,10 @@ class BaseSchedulerTransform(TransformationPass):
266
264
  """A helper method to get duration from node or calibration."""
267
265
  indices = [dag.find_bit(qarg).index for qarg in node.qargs]
268
266
 
269
- if dag._has_calibration_for(node):
267
+ if dag.has_calibration_for(node):
270
268
  # If node has calibration, this value should be the highest priority
271
269
  cal_key = tuple(indices), tuple(float(p) for p in node.op.params)
272
- duration = dag._calibrations_prop[node.op.name][cal_key].duration
270
+ duration = dag.calibrations[node.op.name][cal_key].duration
273
271
  else:
274
272
  duration = node.op.duration
275
273
 
@@ -13,7 +13,6 @@
13
13
  """Dynamical Decoupling insertion pass."""
14
14
 
15
15
  import itertools
16
- import warnings
17
16
 
18
17
  import numpy as np
19
18
  from qiskit.circuit import Gate, Delay, Reset
@@ -289,15 +288,11 @@ class DynamicalDecoupling(TransformationPass):
289
288
  """
290
289
  circ_durations = InstructionDurations()
291
290
 
292
- if dag._calibrations_prop:
291
+ if dag.calibrations:
293
292
  cal_durations = []
294
- with warnings.catch_warnings():
295
- warnings.simplefilter(action="ignore", category=DeprecationWarning)
296
- # `schedule.duration` emits pulse deprecation warnings which we don't want
297
- # to see here
298
- for gate, gate_cals in dag._calibrations_prop.items():
299
- for (qubits, parameters), schedule in gate_cals.items():
300
- cal_durations.append((gate, qubits, parameters, schedule.duration))
293
+ for gate, gate_cals in dag.calibrations.items():
294
+ for (qubits, parameters), schedule in gate_cals.items():
295
+ cal_durations.append((gate, qubits, parameters, schedule.duration))
301
296
  circ_durations.update(cal_durations, circ_durations.dt)
302
297
 
303
298
  if self._durations is not None:
@@ -99,7 +99,7 @@ class BasePadding(TransformationPass):
99
99
  new_dag.name = dag.name
100
100
  new_dag.metadata = dag.metadata
101
101
  new_dag.unit = self.property_set["time_unit"]
102
- new_dag._calibrations_prop = dag._calibrations_prop
102
+ new_dag.calibrations = dag.calibrations
103
103
  new_dag.global_phase = dag.global_phase
104
104
 
105
105
  idle_after = {bit: 0 for bit in dag.qubits}
@@ -14,7 +14,6 @@
14
14
  from __future__ import annotations
15
15
 
16
16
  import logging
17
- import warnings
18
17
  import numpy as np
19
18
 
20
19
  from qiskit.circuit import Gate, ParameterExpression, Qubit
@@ -188,15 +187,11 @@ class PadDynamicalDecoupling(BasePadding):
188
187
  """
189
188
  circ_durations = InstructionDurations()
190
189
 
191
- if dag._calibrations_prop:
190
+ if dag.calibrations:
192
191
  cal_durations = []
193
- with warnings.catch_warnings():
194
- warnings.simplefilter(action="ignore", category=DeprecationWarning)
195
- # `schedule.duration` emits pulse deprecation warnings which we don't want
196
- # to see here
197
- for gate, gate_cals in dag._calibrations_prop.items():
198
- for (qubits, parameters), schedule in gate_cals.items():
199
- cal_durations.append((gate, qubits, parameters, schedule.duration))
192
+ for gate, gate_cals in dag.calibrations.items():
193
+ for (qubits, parameters), schedule in gate_cals.items():
194
+ cal_durations.append((gate, qubits, parameters, schedule.duration))
200
195
  circ_durations.update(cal_durations, circ_durations.dt)
201
196
 
202
197
  if self._durations is not None:
@@ -257,13 +252,7 @@ class PadDynamicalDecoupling(BasePadding):
257
252
  try:
258
253
  # Check calibration.
259
254
  params = self._resolve_params(gate)
260
- with warnings.catch_warnings():
261
- warnings.simplefilter(action="ignore", category=DeprecationWarning)
262
- # `schedule.duration` emits pulse deprecation warnings which we don't want
263
- # to see here
264
- gate_length = dag._calibrations_prop[gate.name][
265
- ((physical_index,), params)
266
- ].duration
255
+ gate_length = dag.calibrations[gate.name][((physical_index,), params)].duration
267
256
  if gate_length % self._alignment != 0:
268
257
  # This is necessary to implement lightweight scheduling logic for this pass.
269
258
  # Usually the pulse alignment constraint and pulse data chunk size take
@@ -27,9 +27,6 @@ class PadDelay(BasePadding):
27
27
 
28
28
  .. code-block:: python
29
29
 
30
- from qiskit import QuantumCircuit
31
- from qiskit.transpiler import InstructionDurations
32
-
33
30
  durations = InstructionDurations([("x", None, 160), ("cx", None, 800)])
34
31
 
35
32
  qc = QuantumCircuit(2)
@@ -39,7 +36,7 @@ class PadDelay(BasePadding):
39
36
 
40
37
  The ASAP-scheduled circuit output may become
41
38
 
42
- .. code-block:: text
39
+ .. parsed-literal::
43
40
 
44
41
  ┌────────────────┐
45
42
  q_0: ┤ Delay(160[dt]) ├──■──
@@ -64,14 +64,10 @@ class BaseScheduler(AnalysisPass):
64
64
  """A helper method to get duration from node or calibration."""
65
65
  indices = [dag.find_bit(qarg).index for qarg in node.qargs]
66
66
 
67
- if dag._has_calibration_for(node):
67
+ if dag.has_calibration_for(node):
68
68
  # If node has calibration, this value should be the highest priority
69
69
  cal_key = tuple(indices), tuple(float(p) for p in node.op.params)
70
- with warnings.catch_warnings():
71
- warnings.simplefilter(action="ignore", category=DeprecationWarning)
72
- # `schedule.duration` emits pulse deprecation warnings which we don't want
73
- # to see here
74
- duration = dag._calibrations_prop[node.op.name][cal_key].duration
70
+ duration = dag.calibrations[node.op.name][cal_key].duration
75
71
 
76
72
  # Note that node duration is updated (but this is analysis pass)
77
73
  op = node.op.to_mutable()
@@ -12,7 +12,6 @@
12
12
 
13
13
  """Unify time unit in circuit for scheduling and following passes."""
14
14
  from typing import Set
15
- import warnings
16
15
 
17
16
  from qiskit.circuit import Delay
18
17
  from qiskit.dagcircuit import DAGCircuit
@@ -122,15 +121,11 @@ class TimeUnitConversion(TransformationPass):
122
121
  """
123
122
  circ_durations = InstructionDurations()
124
123
 
125
- if dag._calibrations_prop:
124
+ if dag.calibrations:
126
125
  cal_durations = []
127
- with warnings.catch_warnings():
128
- warnings.simplefilter(action="ignore", category=DeprecationWarning)
129
- # `schedule.duration` emits pulse deprecation warnings which we don't want
130
- # to see here
131
- for gate, gate_cals in dag._calibrations_prop.items():
132
- for (qubits, parameters), schedule in gate_cals.items():
133
- cal_durations.append((gate, qubits, parameters, schedule.duration))
126
+ for gate, gate_cals in dag.calibrations.items():
127
+ for (qubits, parameters), schedule in gate_cals.items():
128
+ cal_durations.append((gate, qubits, parameters, schedule.duration))
134
129
  circ_durations.update(cal_durations, circ_durations.dt)
135
130
 
136
131
  if self._durations_provided: