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
@@ -10,17 +10,40 @@
10
10
  # copyright notice, and modified files need to carry a notice indicating
11
11
  # that they have been altered from the originals.
12
12
 
13
- """Rearrange the direction of the 2-qubit gate nodes to match the directed coupling map."""
13
+ """Rearrange the direction of the cx nodes to match the directed coupling map."""
14
+
15
+ from math import pi
14
16
 
15
17
  from qiskit.transpiler.basepasses import TransformationPass
16
- from qiskit._accelerate.gate_direction import fix_gate_direction_coupling, fix_gate_direction_target
18
+ from qiskit.transpiler.exceptions import TranspilerError
19
+
20
+ from qiskit.converters import dag_to_circuit, circuit_to_dag
21
+ from qiskit.circuit import QuantumRegister, ControlFlowOp
22
+ from qiskit.dagcircuit import DAGCircuit, DAGOpNode
23
+ from qiskit.circuit.library.standard_gates import (
24
+ SGate,
25
+ SdgGate,
26
+ SXGate,
27
+ HGate,
28
+ CXGate,
29
+ CZGate,
30
+ ECRGate,
31
+ RXXGate,
32
+ RYYGate,
33
+ RZZGate,
34
+ RZXGate,
35
+ SwapGate,
36
+ )
37
+
38
+
39
+ def _swap_node_qargs(node):
40
+ return DAGOpNode(node.op, node.qargs[::-1], node.cargs)
17
41
 
18
42
 
19
43
  class GateDirection(TransformationPass):
20
44
  """Modify asymmetric gates to match the hardware coupling direction.
21
45
 
22
- This pass supports replacements for the `cx`, `cz`, `ecr`, `swap`, `rzx`, `rxx`, `ryy` and
23
- `rzz` gates, using the following identities::
46
+ This pass makes use of the following identities::
24
47
 
25
48
  ┌───┐┌───┐┌───┐
26
49
  q_0: ──■── q_0: ┤ H ├┤ X ├┤ H ├
@@ -35,9 +58,6 @@ class GateDirection(TransformationPass):
35
58
  │ ECR │ = ┌┴───┴┐├────┤└┬───┬┘│ Ecr │├───┤
36
59
  q_1: ┤1 ├ q_1: ┤ Sdg ├┤ √X ├─┤ S ├─┤0 ├┤ H ├
37
60
  └──────┘ └─────┘└────┘ └───┘ └──────┘└───┘
38
- Note: This is done in terms of less-efficient S/SX/Sdg gates instead of the more natural
39
- `RY(pi /2)` so we have a chance for basis translation to keep things in a discrete basis
40
- during resynthesis, if that's what's being asked for.
41
61
 
42
62
 
43
63
  ┌──────┐ ┌───┐┌──────┐┌───┐
@@ -46,18 +66,18 @@ class GateDirection(TransformationPass):
46
66
  q_1: ┤1 ├ q_1: ┤ H ├┤0 ├┤ H ├
47
67
  └──────┘ └───┘└──────┘└───┘
48
68
 
49
- cz, swap, rxx, ryy and rzz directions are fixed by reversing their qargs order.
50
-
51
69
  This pass assumes that the positions of the qubits in the :attr:`.DAGCircuit.qubits` attribute
52
70
  are the physical qubit indices. For example if ``dag.qubits[0]`` is qubit 0 in the
53
71
  :class:`.CouplingMap` or :class:`.Target`.
54
72
  """
55
73
 
74
+ _KNOWN_REPLACEMENTS = frozenset(["cx", "cz", "ecr", "swap", "rzx", "rxx", "ryy", "rzz"])
75
+
56
76
  def __init__(self, coupling_map, target=None):
57
77
  """GateDirection pass.
58
78
 
59
79
  Args:
60
- coupling_map (CouplingMap): Directed graph representing a coupling map.
80
+ coupling_map (CouplingMap): Directed graph represented a coupling map.
61
81
  target (Target): The backend target to use for this pass. If this is specified
62
82
  it will be used instead of the coupling map
63
83
  """
@@ -65,6 +85,248 @@ class GateDirection(TransformationPass):
65
85
  self.coupling_map = coupling_map
66
86
  self.target = target
67
87
 
88
+ # Create the replacement dag and associated register.
89
+ self._cx_dag = DAGCircuit()
90
+ qr = QuantumRegister(2)
91
+ self._cx_dag.add_qreg(qr)
92
+ self._cx_dag.apply_operation_back(HGate(), [qr[0]], [])
93
+ self._cx_dag.apply_operation_back(HGate(), [qr[1]], [])
94
+ self._cx_dag.apply_operation_back(CXGate(), [qr[1], qr[0]], [])
95
+ self._cx_dag.apply_operation_back(HGate(), [qr[0]], [])
96
+ self._cx_dag.apply_operation_back(HGate(), [qr[1]], [])
97
+
98
+ # This is done in terms of less-efficient S/SX/Sdg gates instead of the more natural
99
+ # `RY(pi /2)` so we have a chance for basis translation to keep things in a discrete basis
100
+ # during resynthesis, if that's what's being asked for.
101
+ self._ecr_dag = DAGCircuit()
102
+ qr = QuantumRegister(2)
103
+ self._ecr_dag.global_phase = -pi / 2
104
+ self._ecr_dag.add_qreg(qr)
105
+ self._ecr_dag.apply_operation_back(SGate(), [qr[0]], [])
106
+ self._ecr_dag.apply_operation_back(SXGate(), [qr[0]], [])
107
+ self._ecr_dag.apply_operation_back(SdgGate(), [qr[0]], [])
108
+ self._ecr_dag.apply_operation_back(SdgGate(), [qr[1]], [])
109
+ self._ecr_dag.apply_operation_back(SXGate(), [qr[1]], [])
110
+ self._ecr_dag.apply_operation_back(SGate(), [qr[1]], [])
111
+ self._ecr_dag.apply_operation_back(ECRGate(), [qr[1], qr[0]], [])
112
+ self._ecr_dag.apply_operation_back(HGate(), [qr[0]], [])
113
+ self._ecr_dag.apply_operation_back(HGate(), [qr[1]], [])
114
+
115
+ self._cz_dag = DAGCircuit()
116
+ qr = QuantumRegister(2)
117
+ self._cz_dag.add_qreg(qr)
118
+ self._cz_dag.apply_operation_back(CZGate(), [qr[1], qr[0]], [])
119
+
120
+ self._swap_dag = DAGCircuit()
121
+ qr = QuantumRegister(2)
122
+ self._swap_dag.add_qreg(qr)
123
+ self._swap_dag.apply_operation_back(SwapGate(), [qr[1], qr[0]], [])
124
+
125
+ # If adding more replacements (either static or dynamic), also update the class variable
126
+ # `_KNOWN_REPLACMENTS` to include them in the error messages.
127
+ self._static_replacements = {
128
+ "cx": self._cx_dag,
129
+ "cz": self._cz_dag,
130
+ "ecr": self._ecr_dag,
131
+ "swap": self._swap_dag,
132
+ }
133
+
134
+ @staticmethod
135
+ def _rzx_dag(parameter):
136
+ _rzx_dag = DAGCircuit()
137
+ qr = QuantumRegister(2)
138
+ _rzx_dag.add_qreg(qr)
139
+ _rzx_dag.apply_operation_back(HGate(), [qr[0]], [])
140
+ _rzx_dag.apply_operation_back(HGate(), [qr[1]], [])
141
+ _rzx_dag.apply_operation_back(RZXGate(parameter), [qr[1], qr[0]], [])
142
+ _rzx_dag.apply_operation_back(HGate(), [qr[0]], [])
143
+ _rzx_dag.apply_operation_back(HGate(), [qr[1]], [])
144
+ return _rzx_dag
145
+
146
+ @staticmethod
147
+ def _rxx_dag(parameter):
148
+ _rxx_dag = DAGCircuit()
149
+ qr = QuantumRegister(2)
150
+ _rxx_dag.add_qreg(qr)
151
+ _rxx_dag.apply_operation_back(RXXGate(parameter), [qr[1], qr[0]], [])
152
+ return _rxx_dag
153
+
154
+ @staticmethod
155
+ def _ryy_dag(parameter):
156
+ _ryy_dag = DAGCircuit()
157
+ qr = QuantumRegister(2)
158
+ _ryy_dag.add_qreg(qr)
159
+ _ryy_dag.apply_operation_back(RYYGate(parameter), [qr[1], qr[0]], [])
160
+ return _ryy_dag
161
+
162
+ @staticmethod
163
+ def _rzz_dag(parameter):
164
+ _rzz_dag = DAGCircuit()
165
+ qr = QuantumRegister(2)
166
+ _rzz_dag.add_qreg(qr)
167
+ _rzz_dag.apply_operation_back(RZZGate(parameter), [qr[1], qr[0]], [])
168
+ return _rzz_dag
169
+
170
+ def _run_coupling_map(self, dag, wire_map, edges=None):
171
+ if edges is None:
172
+ edges = set(self.coupling_map.get_edges())
173
+ if not edges:
174
+ return dag
175
+ # Don't include directives to avoid things like barrier, which are assumed always supported.
176
+ for node in dag.op_nodes(include_directives=False):
177
+ if isinstance(node.op, ControlFlowOp):
178
+ new_op = node.op.replace_blocks(
179
+ dag_to_circuit(
180
+ self._run_coupling_map(
181
+ circuit_to_dag(block),
182
+ {
183
+ inner: wire_map[outer]
184
+ for outer, inner in zip(node.qargs, block.qubits)
185
+ },
186
+ edges,
187
+ )
188
+ )
189
+ for block in node.op.blocks
190
+ )
191
+ dag.substitute_node(node, new_op, propagate_condition=False)
192
+ continue
193
+ if len(node.qargs) != 2:
194
+ continue
195
+ if dag.has_calibration_for(node):
196
+ continue
197
+ qargs = (wire_map[node.qargs[0]], wire_map[node.qargs[1]])
198
+ if qargs not in edges and (qargs[1], qargs[0]) not in edges:
199
+ raise TranspilerError(
200
+ f"The circuit requires a connection between physical qubits {qargs}"
201
+ )
202
+ if qargs not in edges:
203
+ replacement = self._static_replacements.get(node.name)
204
+ if replacement is not None:
205
+ dag.substitute_node_with_dag(node, replacement)
206
+ elif node.name == "rzx":
207
+ dag.substitute_node_with_dag(node, self._rzx_dag(*node.op.params))
208
+ elif node.name == "rxx":
209
+ dag.substitute_node_with_dag(node, self._rxx_dag(*node.op.params))
210
+ elif node.name == "ryy":
211
+ dag.substitute_node_with_dag(node, self._ryy_dag(*node.op.params))
212
+ elif node.name == "rzz":
213
+ dag.substitute_node_with_dag(node, self._rzz_dag(*node.op.params))
214
+ else:
215
+ raise TranspilerError(
216
+ f"'{node.name}' would be supported on '{qargs}' if the direction were"
217
+ f" swapped, but no rules are known to do that."
218
+ f" {list(self._KNOWN_REPLACEMENTS)} can be automatically flipped."
219
+ )
220
+ return dag
221
+
222
+ def _run_target(self, dag, wire_map):
223
+ # Don't include directives to avoid things like barrier, which are assumed always supported.
224
+ for node in dag.op_nodes(include_directives=False):
225
+ if isinstance(node.op, ControlFlowOp):
226
+ new_op = node.op.replace_blocks(
227
+ dag_to_circuit(
228
+ self._run_target(
229
+ circuit_to_dag(block),
230
+ {
231
+ inner: wire_map[outer]
232
+ for outer, inner in zip(node.qargs, block.qubits)
233
+ },
234
+ )
235
+ )
236
+ for block in node.op.blocks
237
+ )
238
+ dag.substitute_node(node, new_op, propagate_condition=False)
239
+ continue
240
+ if len(node.qargs) != 2:
241
+ continue
242
+ if dag.has_calibration_for(node):
243
+ continue
244
+ qargs = (wire_map[node.qargs[0]], wire_map[node.qargs[1]])
245
+ swapped = (qargs[1], qargs[0])
246
+ if node.name in self._static_replacements:
247
+ if self.target.instruction_supported(node.name, qargs):
248
+ continue
249
+ if self.target.instruction_supported(node.name, swapped):
250
+ dag.substitute_node_with_dag(node, self._static_replacements[node.name])
251
+ else:
252
+ raise TranspilerError(
253
+ f"The circuit requires a connection between physical qubits {qargs}"
254
+ f" for {node.name}"
255
+ )
256
+ elif node.name == "rzx":
257
+ if self.target.instruction_supported(
258
+ qargs=qargs, operation_class=RZXGate, parameters=node.op.params
259
+ ):
260
+ continue
261
+ if self.target.instruction_supported(
262
+ qargs=swapped, operation_class=RZXGate, parameters=node.op.params
263
+ ):
264
+ dag.substitute_node_with_dag(node, self._rzx_dag(*node.op.params))
265
+ else:
266
+ raise TranspilerError(
267
+ f"The circuit requires a connection between physical qubits {qargs}"
268
+ f" for {node.name}"
269
+ )
270
+ elif node.name == "rxx":
271
+ if self.target.instruction_supported(
272
+ qargs=qargs, operation_class=RXXGate, parameters=node.op.params
273
+ ):
274
+ continue
275
+ if self.target.instruction_supported(
276
+ qargs=swapped, operation_class=RXXGate, parameters=node.op.params
277
+ ):
278
+ dag.substitute_node_with_dag(node, self._rxx_dag(*node.op.params))
279
+ else:
280
+ raise TranspilerError(
281
+ f"The circuit requires a connection between physical qubits {qargs}"
282
+ f" for {node.name}"
283
+ )
284
+ elif node.name == "ryy":
285
+ if self.target.instruction_supported(
286
+ qargs=qargs, operation_class=RYYGate, parameters=node.op.params
287
+ ):
288
+ continue
289
+ if self.target.instruction_supported(
290
+ qargs=swapped, operation_class=RYYGate, parameters=node.op.params
291
+ ):
292
+ dag.substitute_node_with_dag(node, self._ryy_dag(*node.op.params))
293
+ else:
294
+ raise TranspilerError(
295
+ f"The circuit requires a connection between physical qubits {qargs}"
296
+ f" for {node.name}"
297
+ )
298
+ elif node.name == "rzz":
299
+ if self.target.instruction_supported(
300
+ qargs=qargs, operation_class=RZZGate, parameters=node.op.params
301
+ ):
302
+ continue
303
+ if self.target.instruction_supported(
304
+ qargs=swapped, operation_class=RZZGate, parameters=node.op.params
305
+ ):
306
+ dag.substitute_node_with_dag(node, self._rzz_dag(*node.op.params))
307
+ else:
308
+ raise TranspilerError(
309
+ f"The circuit requires a connection between physical qubits {qargs}"
310
+ f" for {node.name}"
311
+ )
312
+ elif self.target.instruction_supported(node.name, qargs):
313
+ continue
314
+ elif self.target.instruction_supported(node.name, swapped) or dag.has_calibration_for(
315
+ _swap_node_qargs(node)
316
+ ):
317
+ raise TranspilerError(
318
+ f"'{node.name}' would be supported on '{qargs}' if the direction were"
319
+ f" swapped, but no rules are known to do that."
320
+ f" {list(self._KNOWN_REPLACEMENTS)} can be automatically flipped."
321
+ )
322
+ else:
323
+ raise TranspilerError(
324
+ f"'{node.name}' with parameters '{node.op.params}' is not supported on qubits"
325
+ f" '{qargs}' in either direction."
326
+ )
327
+
328
+ return dag
329
+
68
330
  def run(self, dag):
69
331
  """Run the GateDirection pass on `dag`.
70
332
 
@@ -81,6 +343,7 @@ class GateDirection(TransformationPass):
81
343
  TranspilerError: If the circuit cannot be mapped just by flipping the
82
344
  cx nodes.
83
345
  """
346
+ layout_map = {bit: i for i, bit in enumerate(dag.qubits)}
84
347
  if self.target is None:
85
- return fix_gate_direction_coupling(dag, set(self.coupling_map.get_edges()))
86
- return fix_gate_direction_target(dag, self.target)
348
+ return self._run_coupling_map(dag, layout_map)
349
+ return self._run_target(dag, layout_map)
@@ -12,13 +12,9 @@
12
12
 
13
13
  """Check if all gates in the DAGCircuit are in the specified basis gates."""
14
14
 
15
+ from qiskit.converters import circuit_to_dag
15
16
  from qiskit.transpiler.basepasses import AnalysisPass
16
17
 
17
- from qiskit._accelerate.gates_in_basis import (
18
- any_gate_missing_from_basis,
19
- any_gate_missing_from_target,
20
- )
21
-
22
18
 
23
19
  class GatesInBasis(AnalysisPass):
24
20
  """Check if all gates in a DAG are in a given set of gates"""
@@ -44,8 +40,35 @@ class GatesInBasis(AnalysisPass):
44
40
  if self._basis_gates is None and self._target is None:
45
41
  self.property_set["all_gates_in_basis"] = True
46
42
  return
43
+ gates_out_of_basis = False
47
44
  if self._target is not None:
48
- gates_out_of_basis = any_gate_missing_from_target(dag, self._target)
45
+
46
+ def _visit_target(dag, wire_map):
47
+ for gate in dag.op_nodes():
48
+ # Barrier and store are assumed universal and supported by all backends
49
+ if gate.name in ("barrier", "store"):
50
+ continue
51
+ if not self._target.instruction_supported(
52
+ gate.name, tuple(wire_map[bit] for bit in gate.qargs)
53
+ ):
54
+ return True
55
+ # Control-flow ops still need to be supported, so don't skip them in the
56
+ # previous checks.
57
+ if gate.is_control_flow():
58
+ for block in gate.op.blocks:
59
+ inner_wire_map = {
60
+ inner: wire_map[outer]
61
+ for outer, inner in zip(gate.qargs, block.qubits)
62
+ }
63
+ if _visit_target(circuit_to_dag(block), inner_wire_map):
64
+ return True
65
+ return False
66
+
67
+ qubit_map = {qubit: index for index, qubit in enumerate(dag.qubits)}
68
+ gates_out_of_basis = _visit_target(dag, qubit_map)
49
69
  else:
50
- gates_out_of_basis = any_gate_missing_from_basis(dag, self._basis_gates)
70
+ for gate in dag.count_ops(recurse=True):
71
+ if gate not in self._basis_gates:
72
+ gates_out_of_basis = True
73
+ break
51
74
  self.property_set["all_gates_in_basis"] = not gates_out_of_basis
@@ -40,8 +40,7 @@ class MergeAdjacentBarriers(TransformationPass):
40
40
 
41
41
  i.e,
42
42
 
43
- .. code-block:: text
44
-
43
+ .. parsed-literal::
45
44
  ░ ░ ░ ░
46
45
  q_0: ─░──░─ q_0: ─░──░─
47
46
  ░ ░ ░ ░
@@ -13,17 +13,14 @@
13
13
  """Pass Manager Configuration class."""
14
14
 
15
15
  import pprint
16
- import warnings
17
16
 
18
17
  from qiskit.transpiler.coupling import CouplingMap
19
18
  from qiskit.transpiler.instruction_durations import InstructionDurations
20
- from qiskit.utils.deprecate_pulse import deprecate_pulse_arg
21
19
 
22
20
 
23
21
  class PassManagerConfig:
24
22
  """Pass Manager Configuration."""
25
23
 
26
- @deprecate_pulse_arg("inst_map", predicate=lambda inst_map: inst_map is not None)
27
24
  def __init__(
28
25
  self,
29
26
  initial_layout=None,
@@ -116,17 +113,11 @@ class PassManagerConfig:
116
113
  def from_backend(cls, backend, _skip_target=False, **pass_manager_options):
117
114
  """Construct a configuration based on a backend and user input.
118
115
 
119
- This method automatically generates a PassManagerConfig object based on the backend's
116
+ This method automatically gererates a PassManagerConfig object based on the backend's
120
117
  features. User options can be used to overwrite the configuration.
121
118
 
122
- .. deprecated:: 1.3
123
- The method ``PassManagerConfig.from_backend`` will stop supporting inputs of type
124
- :class:`.BackendV1` in the `backend` parameter in a future release no
125
- earlier than 2.0. :class:`.BackendV1` is deprecated and implementations should move
126
- to :class:`.BackendV2`.
127
-
128
119
  Args:
129
- backend (BackendV1 or BackendV2): The backend that provides the configuration.
120
+ backend (BackendV1): The backend that provides the configuration.
130
121
  pass_manager_options: User-defined option-value pairs.
131
122
 
132
123
  Returns:
@@ -135,21 +126,12 @@ class PassManagerConfig:
135
126
  Raises:
136
127
  AttributeError: If the backend does not support a `configuration()` method.
137
128
  """
129
+ res = cls(**pass_manager_options)
138
130
  backend_version = getattr(backend, "version", 0)
139
- if backend_version == 1:
140
- warnings.warn(
141
- "The method PassManagerConfig.from_backend will stop supporting inputs of "
142
- f"type `BackendV1` ( {backend} ) in the `backend` parameter in a future "
143
- "release no earlier than 2.0. `BackendV1` is deprecated and implementations "
144
- "should move to `BackendV2`.",
145
- category=DeprecationWarning,
146
- stacklevel=2,
147
- )
148
131
  if not isinstance(backend_version, int):
149
132
  backend_version = 0
150
133
  if backend_version < 2:
151
134
  config = backend.configuration()
152
- res = cls(**pass_manager_options)
153
135
  if res.basis_gates is None:
154
136
  if backend_version < 2:
155
137
  res.basis_gates = getattr(config, "basis_gates", None)
@@ -162,7 +144,7 @@ class PassManagerConfig:
162
144
  if defaults is not None:
163
145
  res.inst_map = defaults.instruction_schedule_map
164
146
  else:
165
- res.inst_map = backend._instruction_schedule_map
147
+ res.inst_map = backend.instruction_schedule_map
166
148
  if res.coupling_map is None:
167
149
  if backend_version < 2:
168
150
  cmap_edge_list = getattr(config, "coupling_map", None)
@@ -13,7 +13,6 @@
13
13
  """Built-in transpiler stage plugins for preset pass managers."""
14
14
 
15
15
  import os
16
- import warnings
17
16
 
18
17
  from qiskit.transpiler.passes.optimization.split_2q_unitaries import Split2QUnitaries
19
18
  from qiskit.transpiler.passmanager import PassManager
@@ -40,9 +39,9 @@ from qiskit.transpiler.preset_passmanagers.plugin import (
40
39
  from qiskit.transpiler.passes.optimization import (
41
40
  Optimize1qGatesDecomposition,
42
41
  CommutativeCancellation,
42
+ Collect2qBlocks,
43
43
  ConsolidateBlocks,
44
44
  InverseCancellation,
45
- RemoveIdentityEquivalent,
46
45
  )
47
46
  from qiskit.transpiler.passes import Depth, Size, FixedPoint, MinimumPoint
48
47
  from qiskit.transpiler.passes.utils.gates_basis import GatesInBasis
@@ -154,16 +153,8 @@ class DefaultInitPassManager(PassManagerStagePlugin):
154
153
  pass_manager_config.hls_config,
155
154
  pass_manager_config.qubits_initially_zero,
156
155
  )
157
- if pass_manager_config.routing_method != "none":
158
- init.append(ElidePermutations())
156
+ init.append(ElidePermutations())
159
157
  init.append(RemoveDiagonalGatesBeforeMeasure())
160
- # Target not set on RemoveIdentityEquivalent because we haven't applied a Layout
161
- # yet so doing anything relative to an error rate in the target is not valid.
162
- init.append(
163
- RemoveIdentityEquivalent(
164
- approximation_degree=pass_manager_config.approximation_degree
165
- )
166
- )
167
158
  init.append(
168
159
  InverseCancellation(
169
160
  [
@@ -183,6 +174,7 @@ class DefaultInitPassManager(PassManagerStagePlugin):
183
174
  )
184
175
  )
185
176
  init.append(CommutativeCancellation())
177
+ init.append(Collect2qBlocks())
186
178
  init.append(ConsolidateBlocks())
187
179
  # If approximation degree is None that indicates a request to approximate up to the
188
180
  # error rates in the target. However, in the init stage we don't yet know the target
@@ -588,10 +580,6 @@ class OptimizationPassManager(PassManagerStagePlugin):
588
580
 
589
581
  elif optimization_level == 2:
590
582
  _opt = [
591
- RemoveIdentityEquivalent(
592
- approximation_degree=pass_manager_config.approximation_degree,
593
- target=pass_manager_config.target,
594
- ),
595
583
  Optimize1qGatesDecomposition(
596
584
  basis=pass_manager_config.basis_gates, target=pass_manager_config.target
597
585
  ),
@@ -600,6 +588,7 @@ class OptimizationPassManager(PassManagerStagePlugin):
600
588
  elif optimization_level == 3:
601
589
  # Steps for optimization level 3
602
590
  _opt = [
591
+ Collect2qBlocks(),
603
592
  ConsolidateBlocks(
604
593
  basis_gates=pass_manager_config.basis_gates,
605
594
  target=pass_manager_config.target,
@@ -614,10 +603,6 @@ class OptimizationPassManager(PassManagerStagePlugin):
614
603
  plugin_config=pass_manager_config.unitary_synthesis_plugin_config,
615
604
  target=pass_manager_config.target,
616
605
  ),
617
- RemoveIdentityEquivalent(
618
- approximation_degree=pass_manager_config.approximation_degree,
619
- target=pass_manager_config.target,
620
- ),
621
606
  Optimize1qGatesDecomposition(
622
607
  basis=pass_manager_config.basis_gates, target=pass_manager_config.target
623
608
  ),
@@ -647,6 +632,7 @@ class OptimizationPassManager(PassManagerStagePlugin):
647
632
  elif optimization_level == 2:
648
633
  optimization.append(
649
634
  [
635
+ Collect2qBlocks(),
650
636
  ConsolidateBlocks(
651
637
  basis_gates=pass_manager_config.basis_gates,
652
638
  target=pass_manager_config.target,
@@ -689,13 +675,9 @@ class AlapSchedulingPassManager(PassManagerStagePlugin):
689
675
  inst_map = pass_manager_config.inst_map
690
676
  target = pass_manager_config.target
691
677
 
692
- with warnings.catch_warnings():
693
- warnings.simplefilter(action="ignore", category=DeprecationWarning)
694
- # Passing `inst_map` to `generate_scheduling` is deprecated in Qiskit 1.3
695
- # so filtering these warning when building pass managers
696
- return common.generate_scheduling(
697
- instruction_durations, scheduling_method, timing_constraints, inst_map, target
698
- )
678
+ return common.generate_scheduling(
679
+ instruction_durations, scheduling_method, timing_constraints, inst_map, target
680
+ )
699
681
 
700
682
 
701
683
  class AsapSchedulingPassManager(PassManagerStagePlugin):
@@ -710,13 +692,9 @@ class AsapSchedulingPassManager(PassManagerStagePlugin):
710
692
  inst_map = pass_manager_config.inst_map
711
693
  target = pass_manager_config.target
712
694
 
713
- with warnings.catch_warnings():
714
- warnings.simplefilter(action="ignore", category=DeprecationWarning)
715
- # Passing `inst_map` to `generate_scheduling` is deprecated in Qiskit 1.3
716
- # so filtering these warning when building pass managers
717
- return common.generate_scheduling(
718
- instruction_durations, scheduling_method, timing_constraints, inst_map, target
719
- )
695
+ return common.generate_scheduling(
696
+ instruction_durations, scheduling_method, timing_constraints, inst_map, target
697
+ )
720
698
 
721
699
 
722
700
  class DefaultSchedulingPassManager(PassManagerStagePlugin):
@@ -731,13 +709,9 @@ class DefaultSchedulingPassManager(PassManagerStagePlugin):
731
709
  inst_map = pass_manager_config.inst_map
732
710
  target = pass_manager_config.target
733
711
 
734
- with warnings.catch_warnings():
735
- warnings.simplefilter(action="ignore", category=DeprecationWarning)
736
- # Passing `inst_map` to `generate_scheduling` is deprecated in Qiskit 1.3
737
- # so filtering these warning when building pass managers
738
- return common.generate_scheduling(
739
- instruction_durations, scheduling_method, timing_constraints, inst_map, target
740
- )
712
+ return common.generate_scheduling(
713
+ instruction_durations, scheduling_method, timing_constraints, inst_map, target
714
+ )
741
715
 
742
716
 
743
717
  class DefaultLayoutPassManager(PassManagerStagePlugin):
@@ -24,9 +24,9 @@ from qiskit.transpiler.passmanager import PassManager
24
24
  from qiskit.transpiler.passes import Error
25
25
  from qiskit.transpiler.passes import BasisTranslator
26
26
  from qiskit.transpiler.passes import Unroll3qOrMore
27
- from qiskit.transpiler.passes import ConsolidateBlocks
28
- from qiskit.transpiler.passes import Collect1qRuns
29
27
  from qiskit.transpiler.passes import Collect2qBlocks
28
+ from qiskit.transpiler.passes import Collect1qRuns
29
+ from qiskit.transpiler.passes import ConsolidateBlocks
30
30
  from qiskit.transpiler.passes import UnitarySynthesis
31
31
  from qiskit.transpiler.passes import HighLevelSynthesis
32
32
  from qiskit.transpiler.passes import CheckMap
@@ -52,7 +52,6 @@ from qiskit.transpiler.passes.layout.vf2_layout import VF2LayoutStopReason
52
52
  from qiskit.transpiler.passes.layout.vf2_post_layout import VF2PostLayoutStopReason
53
53
  from qiskit.transpiler.exceptions import TranspilerError
54
54
  from qiskit.transpiler.layout import Layout
55
- from qiskit.utils.deprecate_pulse import deprecate_pulse_arg
56
55
 
57
56
 
58
57
  _ControlFlowState = collections.namedtuple("_ControlFlowState", ("working", "not_working"))
@@ -530,7 +529,6 @@ def generate_translation_passmanager(
530
529
  return PassManager(unroll)
531
530
 
532
531
 
533
- @deprecate_pulse_arg("inst_map", predicate=lambda inst_map: inst_map is not None)
534
532
  def generate_scheduling(
535
533
  instruction_durations, scheduling_method, timing_constraints, inst_map, target=None
536
534
  ):
@@ -542,7 +540,7 @@ def generate_scheduling(
542
540
  ``'asap'``/``'as_soon_as_possible'`` or
543
541
  ``'alap'``/``'as_late_as_possible'``
544
542
  timing_constraints (TimingConstraints): Hardware time alignment restrictions.
545
- inst_map (InstructionScheduleMap): DEPRECATED. Mapping object that maps gate to schedule.
543
+ inst_map (InstructionScheduleMap): Mapping object that maps gate to schedule.
546
544
  target (Target): The :class:`~.Target` object representing the backend
547
545
 
548
546
  Returns: