qiskit 1.1.2__cp38-abi3-macosx_10_9_universal2.whl → 1.2.0rc1__cp38-abi3-macosx_10_9_universal2.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 (341) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +27 -24
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/_numpy_compat.py +1 -1
  5. qiskit/assembler/assemble_circuits.py +107 -64
  6. qiskit/assembler/assemble_schedules.py +5 -12
  7. qiskit/assembler/disassemble.py +10 -1
  8. qiskit/circuit/__init__.py +1 -1
  9. qiskit/circuit/_classical_resource_map.py +5 -5
  10. qiskit/circuit/_utils.py +0 -13
  11. qiskit/circuit/add_control.py +1 -1
  12. qiskit/circuit/annotated_operation.py +23 -1
  13. qiskit/circuit/classical/expr/expr.py +4 -4
  14. qiskit/circuit/classical/expr/visitors.py +1 -1
  15. qiskit/circuit/classical/types/__init__.py +1 -1
  16. qiskit/circuit/classical/types/types.py +2 -2
  17. qiskit/circuit/classicalfunction/boolean_expression.py +1 -1
  18. qiskit/circuit/classicalfunction/classical_function_visitor.py +5 -5
  19. qiskit/circuit/classicalfunction/utils.py +1 -1
  20. qiskit/circuit/classicalregister.py +1 -1
  21. qiskit/circuit/commutation_checker.py +83 -35
  22. qiskit/circuit/controlflow/_builder_utils.py +1 -1
  23. qiskit/circuit/controlflow/builder.py +10 -6
  24. qiskit/circuit/controlflow/if_else.py +2 -2
  25. qiskit/circuit/controlflow/switch_case.py +1 -1
  26. qiskit/circuit/delay.py +1 -1
  27. qiskit/circuit/duration.py +2 -2
  28. qiskit/circuit/equivalence.py +5 -7
  29. qiskit/circuit/gate.py +11 -8
  30. qiskit/circuit/instruction.py +31 -13
  31. qiskit/circuit/instructionset.py +2 -5
  32. qiskit/circuit/library/__init__.py +2 -1
  33. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +1 -1
  34. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
  35. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +1 -1
  36. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +1 -1
  37. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +3 -3
  38. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +1 -1
  39. qiskit/circuit/library/basis_change/__init__.py +1 -1
  40. qiskit/circuit/library/basis_change/qft.py +40 -6
  41. qiskit/circuit/library/blueprintcircuit.py +3 -5
  42. qiskit/circuit/library/data_preparation/__init__.py +9 -2
  43. qiskit/circuit/library/data_preparation/initializer.py +8 -0
  44. qiskit/circuit/library/data_preparation/state_preparation.py +98 -178
  45. qiskit/circuit/library/generalized_gates/isometry.py +8 -8
  46. qiskit/circuit/library/generalized_gates/linear_function.py +3 -2
  47. qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +4 -4
  48. qiskit/circuit/library/generalized_gates/permutation.py +8 -9
  49. qiskit/circuit/library/generalized_gates/uc.py +3 -3
  50. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +2 -2
  51. qiskit/circuit/library/generalized_gates/unitary.py +13 -11
  52. qiskit/circuit/library/graph_state.py +1 -1
  53. qiskit/circuit/library/hamiltonian_gate.py +1 -2
  54. qiskit/circuit/library/hidden_linear_function.py +1 -1
  55. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +3 -2
  56. qiskit/circuit/library/n_local/n_local.py +4 -5
  57. qiskit/circuit/library/n_local/pauli_two_design.py +1 -1
  58. qiskit/circuit/library/n_local/qaoa_ansatz.py +6 -8
  59. qiskit/circuit/library/n_local/two_local.py +1 -1
  60. qiskit/circuit/library/overlap.py +11 -5
  61. qiskit/circuit/library/pauli_evolution.py +7 -3
  62. qiskit/circuit/library/standard_gates/dcx.py +3 -0
  63. qiskit/circuit/library/standard_gates/ecr.py +3 -0
  64. qiskit/circuit/library/standard_gates/global_phase.py +3 -0
  65. qiskit/circuit/library/standard_gates/h.py +13 -5
  66. qiskit/circuit/library/standard_gates/i.py +3 -0
  67. qiskit/circuit/library/standard_gates/iswap.py +3 -0
  68. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +19 -10
  69. qiskit/circuit/library/standard_gates/p.py +14 -9
  70. qiskit/circuit/library/standard_gates/r.py +3 -0
  71. qiskit/circuit/library/standard_gates/rx.py +21 -6
  72. qiskit/circuit/library/standard_gates/rxx.py +40 -1
  73. qiskit/circuit/library/standard_gates/ry.py +21 -6
  74. qiskit/circuit/library/standard_gates/ryy.py +40 -1
  75. qiskit/circuit/library/standard_gates/rz.py +22 -6
  76. qiskit/circuit/library/standard_gates/rzx.py +40 -1
  77. qiskit/circuit/library/standard_gates/rzz.py +41 -2
  78. qiskit/circuit/library/standard_gates/s.py +77 -0
  79. qiskit/circuit/library/standard_gates/swap.py +12 -5
  80. qiskit/circuit/library/standard_gates/sx.py +14 -5
  81. qiskit/circuit/library/standard_gates/t.py +5 -0
  82. qiskit/circuit/library/standard_gates/u.py +22 -7
  83. qiskit/circuit/library/standard_gates/u1.py +8 -3
  84. qiskit/circuit/library/standard_gates/u2.py +3 -0
  85. qiskit/circuit/library/standard_gates/u3.py +22 -7
  86. qiskit/circuit/library/standard_gates/x.py +156 -92
  87. qiskit/circuit/library/standard_gates/xx_minus_yy.py +40 -1
  88. qiskit/circuit/library/standard_gates/xx_plus_yy.py +52 -11
  89. qiskit/circuit/library/standard_gates/y.py +6 -1
  90. qiskit/circuit/library/standard_gates/z.py +8 -1
  91. qiskit/circuit/operation.py +1 -1
  92. qiskit/circuit/parameter.py +9 -10
  93. qiskit/circuit/parameterexpression.py +16 -13
  94. qiskit/circuit/parametertable.py +1 -190
  95. qiskit/circuit/parametervector.py +1 -1
  96. qiskit/circuit/quantumcircuit.py +392 -384
  97. qiskit/circuit/quantumcircuitdata.py +3 -5
  98. qiskit/circuit/quantumregister.py +1 -1
  99. qiskit/circuit/random/__init__.py +1 -1
  100. qiskit/circuit/random/utils.py +175 -26
  101. qiskit/circuit/register.py +5 -7
  102. qiskit/circuit/singleton.py +3 -3
  103. qiskit/circuit/tools/pi_check.py +4 -4
  104. qiskit/compiler/assembler.py +95 -24
  105. qiskit/compiler/scheduler.py +2 -2
  106. qiskit/compiler/transpiler.py +41 -127
  107. qiskit/converters/circuit_to_dag.py +4 -6
  108. qiskit/converters/circuit_to_gate.py +4 -8
  109. qiskit/converters/circuit_to_instruction.py +5 -17
  110. qiskit/converters/dag_to_circuit.py +2 -6
  111. qiskit/dagcircuit/collect_blocks.py +2 -2
  112. qiskit/dagcircuit/dagcircuit.py +190 -187
  113. qiskit/dagcircuit/dagdependency.py +4 -4
  114. qiskit/dagcircuit/dagdependency_v2.py +4 -4
  115. qiskit/dagcircuit/dagdepnode.py +1 -1
  116. qiskit/dagcircuit/dagnode.py +66 -157
  117. qiskit/passmanager/flow_controllers.py +1 -1
  118. qiskit/passmanager/passmanager.py +3 -3
  119. qiskit/primitives/__init__.py +1 -5
  120. qiskit/primitives/backend_estimator.py +25 -15
  121. qiskit/primitives/backend_estimator_v2.py +31 -7
  122. qiskit/primitives/backend_sampler.py +21 -12
  123. qiskit/primitives/backend_sampler_v2.py +12 -3
  124. qiskit/primitives/base/base_estimator.py +31 -4
  125. qiskit/primitives/base/base_primitive.py +2 -2
  126. qiskit/primitives/base/base_result.py +2 -2
  127. qiskit/primitives/base/base_sampler.py +26 -2
  128. qiskit/primitives/base/estimator_result.py +2 -2
  129. qiskit/primitives/base/sampler_result.py +2 -2
  130. qiskit/primitives/containers/__init__.py +0 -1
  131. qiskit/primitives/containers/bindings_array.py +2 -2
  132. qiskit/primitives/containers/bit_array.py +108 -10
  133. qiskit/primitives/containers/shape.py +3 -3
  134. qiskit/primitives/estimator.py +9 -2
  135. qiskit/primitives/primitive_job.py +1 -1
  136. qiskit/primitives/sampler.py +10 -3
  137. qiskit/primitives/statevector_estimator.py +5 -3
  138. qiskit/primitives/statevector_sampler.py +11 -5
  139. qiskit/primitives/utils.py +16 -0
  140. qiskit/providers/backend.py +15 -6
  141. qiskit/providers/backend_compat.py +7 -4
  142. qiskit/providers/basic_provider/basic_provider_tools.py +1 -1
  143. qiskit/providers/basic_provider/basic_simulator.py +32 -24
  144. qiskit/providers/fake_provider/fake_backend.py +10 -3
  145. qiskit/providers/fake_provider/fake_openpulse_2q.py +154 -146
  146. qiskit/providers/fake_provider/fake_openpulse_3q.py +226 -217
  147. qiskit/providers/fake_provider/fake_qasm_backend.py +5 -1
  148. qiskit/providers/fake_provider/generic_backend_v2.py +80 -50
  149. qiskit/providers/models/__init__.py +11 -0
  150. qiskit/providers/models/backendconfiguration.py +50 -4
  151. qiskit/providers/models/backendproperties.py +13 -2
  152. qiskit/providers/models/pulsedefaults.py +10 -11
  153. qiskit/providers/options.py +13 -13
  154. qiskit/providers/providerutils.py +3 -1
  155. qiskit/pulse/configuration.py +8 -12
  156. qiskit/pulse/instruction_schedule_map.py +3 -5
  157. qiskit/pulse/instructions/acquire.py +7 -8
  158. qiskit/pulse/instructions/instruction.py +2 -3
  159. qiskit/pulse/library/samplers/decorators.py +5 -9
  160. qiskit/pulse/library/symbolic_pulses.py +4 -7
  161. qiskit/pulse/library/waveform.py +2 -5
  162. qiskit/pulse/macros.py +11 -6
  163. qiskit/pulse/parser.py +8 -10
  164. qiskit/pulse/schedule.py +9 -17
  165. qiskit/pulse/transforms/alignments.py +1 -3
  166. qiskit/pulse/utils.py +1 -2
  167. qiskit/qasm/libs/stdgates.inc +35 -28
  168. qiskit/qasm2/__init__.py +7 -7
  169. qiskit/qasm2/export.py +5 -9
  170. qiskit/qasm2/parse.py +1 -1
  171. qiskit/qasm3/ast.py +9 -25
  172. qiskit/qasm3/exporter.py +578 -481
  173. qiskit/qasm3/printer.py +7 -16
  174. qiskit/qobj/common.py +10 -0
  175. qiskit/qobj/converters/lo_config.py +9 -0
  176. qiskit/qobj/converters/pulse_instruction.py +13 -6
  177. qiskit/qobj/pulse_qobj.py +69 -15
  178. qiskit/qobj/qasm_qobj.py +72 -20
  179. qiskit/qobj/utils.py +9 -0
  180. qiskit/qpy/binary_io/circuits.py +8 -5
  181. qiskit/qpy/binary_io/schedules.py +1 -1
  182. qiskit/qpy/binary_io/value.py +3 -3
  183. qiskit/qpy/interface.py +3 -2
  184. qiskit/qpy/type_keys.py +2 -2
  185. qiskit/quantum_info/operators/channel/quantum_channel.py +3 -6
  186. qiskit/quantum_info/operators/channel/superop.py +2 -2
  187. qiskit/quantum_info/operators/channel/transformations.py +1 -1
  188. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -4
  189. qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +1 -3
  190. qiskit/quantum_info/operators/dihedral/random.py +6 -3
  191. qiskit/quantum_info/operators/measures.py +2 -2
  192. qiskit/quantum_info/operators/op_shape.py +12 -20
  193. qiskit/quantum_info/operators/operator.py +14 -21
  194. qiskit/quantum_info/operators/predicates.py +1 -0
  195. qiskit/quantum_info/operators/symplectic/base_pauli.py +7 -11
  196. qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
  197. qiskit/quantum_info/operators/symplectic/pauli.py +3 -3
  198. qiskit/quantum_info/operators/symplectic/pauli_list.py +9 -10
  199. qiskit/quantum_info/operators/symplectic/random.py +1 -1
  200. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +14 -16
  201. qiskit/quantum_info/quaternion.py +1 -1
  202. qiskit/quantum_info/states/densitymatrix.py +5 -8
  203. qiskit/quantum_info/states/stabilizerstate.py +128 -37
  204. qiskit/quantum_info/states/statevector.py +4 -8
  205. qiskit/result/counts.py +2 -2
  206. qiskit/result/mitigation/correlated_readout_mitigator.py +2 -2
  207. qiskit/result/mitigation/local_readout_mitigator.py +2 -2
  208. qiskit/result/mitigation/utils.py +1 -3
  209. qiskit/result/models.py +17 -16
  210. qiskit/result/result.py +15 -20
  211. qiskit/scheduler/lowering.py +2 -2
  212. qiskit/synthesis/__init__.py +2 -1
  213. qiskit/synthesis/clifford/__init__.py +1 -1
  214. qiskit/synthesis/clifford/clifford_decompose_ag.py +2 -2
  215. qiskit/synthesis/clifford/clifford_decompose_bm.py +10 -240
  216. qiskit/synthesis/clifford/clifford_decompose_greedy.py +9 -303
  217. qiskit/synthesis/clifford/clifford_decompose_layers.py +25 -23
  218. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +1 -1
  219. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +1 -1
  220. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +1 -1
  221. qiskit/synthesis/discrete_basis/solovay_kitaev.py +2 -2
  222. qiskit/synthesis/evolution/evolution_synthesis.py +4 -2
  223. qiskit/synthesis/evolution/lie_trotter.py +46 -19
  224. qiskit/synthesis/evolution/product_formula.py +111 -55
  225. qiskit/synthesis/evolution/qdrift.py +40 -10
  226. qiskit/synthesis/evolution/suzuki_trotter.py +43 -33
  227. qiskit/synthesis/linear/__init__.py +1 -0
  228. qiskit/synthesis/linear/cnot_synth.py +22 -96
  229. qiskit/synthesis/linear/linear_depth_lnn.py +8 -8
  230. qiskit/synthesis/linear/linear_matrix_utils.py +13 -161
  231. qiskit/synthesis/linear_phase/cnot_phase_synth.py +1 -1
  232. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +3 -3
  233. qiskit/synthesis/linear_phase/cz_depth_lnn.py +1 -1
  234. qiskit/synthesis/one_qubit/one_qubit_decompose.py +29 -29
  235. qiskit/synthesis/permutation/permutation_full.py +5 -29
  236. qiskit/synthesis/permutation/permutation_lnn.py +2 -24
  237. qiskit/synthesis/permutation/permutation_utils.py +2 -59
  238. qiskit/synthesis/qft/__init__.py +1 -0
  239. qiskit/synthesis/qft/qft_decompose_full.py +79 -0
  240. qiskit/synthesis/qft/qft_decompose_lnn.py +17 -9
  241. qiskit/synthesis/stabilizer/stabilizer_circuit.py +6 -6
  242. qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -2
  243. qiskit/synthesis/two_qubit/local_invariance.py +8 -38
  244. qiskit/synthesis/two_qubit/two_qubit_decompose.py +48 -129
  245. qiskit/synthesis/unitary/aqc/cnot_structures.py +1 -1
  246. qiskit/synthesis/unitary/qsd.py +5 -3
  247. qiskit/transpiler/__init__.py +1 -0
  248. qiskit/transpiler/basepasses.py +1 -1
  249. qiskit/transpiler/coupling.py +3 -3
  250. qiskit/transpiler/instruction_durations.py +1 -2
  251. qiskit/transpiler/layout.py +3 -3
  252. qiskit/transpiler/passes/__init__.py +2 -0
  253. qiskit/transpiler/passes/basis/basis_translator.py +82 -63
  254. qiskit/transpiler/passes/basis/translate_parameterized.py +3 -5
  255. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  256. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +10 -10
  257. qiskit/transpiler/passes/calibration/rx_builder.py +3 -3
  258. qiskit/transpiler/passes/calibration/rzx_builder.py +3 -3
  259. qiskit/transpiler/passes/layout/apply_layout.py +13 -3
  260. qiskit/transpiler/passes/layout/sabre_layout.py +10 -8
  261. qiskit/transpiler/passes/layout/sabre_pre_layout.py +4 -1
  262. qiskit/transpiler/passes/layout/set_layout.py +2 -2
  263. qiskit/transpiler/passes/layout/vf2_layout.py +1 -1
  264. qiskit/transpiler/passes/layout/vf2_utils.py +3 -3
  265. qiskit/transpiler/passes/optimization/__init__.py +1 -0
  266. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
  267. qiskit/transpiler/passes/optimization/commutation_analysis.py +7 -10
  268. qiskit/transpiler/passes/optimization/commutative_cancellation.py +35 -19
  269. qiskit/transpiler/passes/optimization/consolidate_blocks.py +11 -8
  270. qiskit/transpiler/passes/optimization/inverse_cancellation.py +6 -6
  271. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +64 -41
  272. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
  273. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +83 -0
  274. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +1 -1
  275. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +2 -2
  276. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -1
  277. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -2
  278. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
  279. qiskit/transpiler/passes/routing/layout_transformation.py +2 -1
  280. qiskit/transpiler/passes/routing/sabre_swap.py +35 -26
  281. qiskit/transpiler/passes/routing/star_prerouting.py +80 -105
  282. qiskit/transpiler/passes/routing/stochastic_swap.py +1 -3
  283. qiskit/transpiler/passes/scheduling/alap.py +1 -2
  284. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -2
  285. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
  286. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +1 -1
  287. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +1 -1
  288. qiskit/transpiler/passes/scheduling/asap.py +1 -2
  289. qiskit/transpiler/passes/scheduling/base_scheduler.py +5 -5
  290. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +3 -3
  291. qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
  292. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +11 -11
  293. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +7 -6
  294. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -3
  295. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +211 -36
  296. qiskit/transpiler/passes/synthesis/plugin.py +2 -2
  297. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +80 -40
  298. qiskit/transpiler/passes/utils/__init__.py +0 -1
  299. qiskit/transpiler/passes/utils/check_gate_direction.py +4 -4
  300. qiskit/transpiler/passes/utils/check_map.py +3 -6
  301. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +3 -4
  302. qiskit/transpiler/passes/utils/error.py +2 -2
  303. qiskit/transpiler/passes/utils/fixed_point.py +3 -3
  304. qiskit/transpiler/passes/utils/gate_direction.py +1 -1
  305. qiskit/transpiler/passes/utils/gates_basis.py +1 -2
  306. qiskit/transpiler/passmanager.py +7 -6
  307. qiskit/transpiler/preset_passmanagers/__init__.py +4 -228
  308. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +117 -18
  309. qiskit/transpiler/preset_passmanagers/common.py +3 -6
  310. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +518 -0
  311. qiskit/transpiler/preset_passmanagers/level0.py +1 -1
  312. qiskit/transpiler/target.py +27 -8
  313. qiskit/user_config.py +29 -6
  314. qiskit/utils/classtools.py +3 -3
  315. qiskit/utils/deprecation.py +3 -2
  316. qiskit/utils/lazy_tester.py +2 -2
  317. qiskit/utils/optionals.py +8 -8
  318. qiskit/visualization/bloch.py +19 -67
  319. qiskit/visualization/circuit/_utils.py +34 -10
  320. qiskit/visualization/circuit/circuit_visualization.py +23 -16
  321. qiskit/visualization/circuit/latex.py +29 -27
  322. qiskit/visualization/circuit/matplotlib.py +4 -2
  323. qiskit/visualization/circuit/qcstyle.py +2 -2
  324. qiskit/visualization/circuit/text.py +9 -15
  325. qiskit/visualization/dag_visualization.py +5 -12
  326. qiskit/visualization/pulse_v2/core.py +1 -1
  327. qiskit/visualization/pulse_v2/events.py +1 -1
  328. qiskit/visualization/pulse_v2/generators/frame.py +3 -4
  329. qiskit/visualization/pulse_v2/generators/waveform.py +5 -9
  330. qiskit/visualization/pulse_v2/layouts.py +1 -5
  331. qiskit/visualization/pulse_v2/plotters/matplotlib.py +1 -2
  332. qiskit/visualization/state_visualization.py +5 -6
  333. qiskit/visualization/timeline/plotters/matplotlib.py +1 -2
  334. qiskit/visualization/transition_visualization.py +7 -2
  335. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/METADATA +26 -26
  336. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/RECORD +340 -338
  337. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/WHEEL +1 -1
  338. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/entry_points.txt +3 -0
  339. qiskit/transpiler/passes/utils/block_to_matrix.py +0 -47
  340. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/LICENSE.txt +0 -0
  341. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  # This code is part of Qiskit.
2
2
  #
3
- # (C) Copyright IBM 2017, 2019.
3
+ # (C) Copyright IBM 2017, 2024.
4
4
  #
5
5
  # This code is licensed under the Apache License, Version 2.0. You may
6
6
  # obtain a copy of this license in the LICENSE.txt file in the root directory
@@ -21,7 +21,8 @@ This module contains functions for generating the preset pass managers
21
21
  for the transpiler. The preset pass managers are instances of
22
22
  :class:`~.StagedPassManager` which are used to execute the circuit
23
23
  transformations as part of Qiskit's compiler inside the
24
- :func:`~.transpile` function at the different optimization levels.
24
+ :func:`~.transpile` function at the different optimization levels, but
25
+ can also be used in a standalone manner.
25
26
  The functionality here is divided into two parts, the first includes the
26
27
  functions used generate the entire pass manager which is used by
27
28
  :func:`~.transpile` (:ref:`preset_pass_manager_generators`) and the
@@ -56,238 +57,13 @@ Stage Generator Functions
56
57
  .. autofunction:: generate_scheduling
57
58
  .. currentmodule:: qiskit.transpiler.preset_passmanagers
58
59
  """
59
-
60
- import warnings
61
-
62
- from qiskit.transpiler.passmanager_config import PassManagerConfig
63
- from qiskit.transpiler.target import target_to_backend_properties
64
- from qiskit.transpiler import CouplingMap
65
-
60
+ from .generate_preset_pass_manager import generate_preset_pass_manager
66
61
  from .level0 import level_0_pass_manager
67
62
  from .level1 import level_1_pass_manager
68
63
  from .level2 import level_2_pass_manager
69
64
  from .level3 import level_3_pass_manager
70
65
 
71
66
 
72
- def generate_preset_pass_manager(
73
- optimization_level,
74
- backend=None,
75
- target=None,
76
- basis_gates=None,
77
- inst_map=None,
78
- coupling_map=None,
79
- instruction_durations=None,
80
- backend_properties=None,
81
- timing_constraints=None,
82
- initial_layout=None,
83
- layout_method=None,
84
- routing_method=None,
85
- translation_method=None,
86
- scheduling_method=None,
87
- approximation_degree=1.0,
88
- seed_transpiler=None,
89
- unitary_synthesis_method="default",
90
- unitary_synthesis_plugin_config=None,
91
- hls_config=None,
92
- init_method=None,
93
- optimization_method=None,
94
- *,
95
- _skip_target=False,
96
- ):
97
- """Generate a preset :class:`~.PassManager`
98
-
99
- This function is used to quickly generate a preset pass manager. Preset pass
100
- managers are the default pass managers used by the :func:`~.transpile`
101
- function. This function provides a convenient and simple method to construct
102
- a standalone :class:`~.PassManager` object that mirrors what the :func:`~.transpile`
103
- function internally builds and uses.
104
-
105
- The target constraints for the pass manager construction can be specified through a :class:`.Target`
106
- instance, a :class:`.BackendV1` or :class:`.BackendV2` instance, or via loose constraints
107
- (``basis_gates``, ``inst_map``, ``coupling_map``, ``backend_properties``, ``instruction_durations``,
108
- ``dt`` or ``timing_constraints``).
109
- The order of priorities for target constraints works as follows: if a ``target``
110
- input is provided, it will take priority over any ``backend`` input or loose constraints.
111
- If a ``backend`` is provided together with any loose constraint
112
- from the list above, the loose constraint will take priority over the corresponding backend
113
- constraint. This behavior is independent of whether the ``backend`` instance is of type
114
- :class:`.BackendV1` or :class:`.BackendV2`, as summarized in the table below. The first column
115
- in the table summarizes the potential user-provided constraints, and each cell shows whether
116
- the priority is assigned to that specific constraint input or another input
117
- (`target`/`backend(V1)`/`backend(V2)`).
118
-
119
- ============================ ========= ======================== =======================
120
- User Provided target backend(V1) backend(V2)
121
- ============================ ========= ======================== =======================
122
- **basis_gates** target basis_gates basis_gates
123
- **coupling_map** target coupling_map coupling_map
124
- **instruction_durations** target instruction_durations instruction_durations
125
- **inst_map** target inst_map inst_map
126
- **dt** target dt dt
127
- **timing_constraints** target timing_constraints timing_constraints
128
- **backend_properties** target backend_properties backend_properties
129
- ============================ ========= ======================== =======================
130
-
131
- Args:
132
- optimization_level (int): The optimization level to generate a
133
- :class:`~.PassManager` for. This can be 0, 1, 2, or 3. Higher
134
- levels generate more optimized circuits, at the expense of
135
- longer transpilation time:
136
-
137
- * 0: no optimization
138
- * 1: light optimization
139
- * 2: heavy optimization
140
- * 3: even heavier optimization
141
-
142
- backend (Backend): An optional backend object which can be used as the
143
- source of the default values for the ``basis_gates``, ``inst_map``,
144
- ``coupling_map``, ``backend_properties``, ``instruction_durations``,
145
- ``timing_constraints``, and ``target``. If any of those other arguments
146
- are specified in addition to ``backend`` they will take precedence
147
- over the value contained in the backend.
148
- target (Target): The :class:`~.Target` representing a backend compilation
149
- target. The following attributes will be inferred from this
150
- argument if they are not set: ``coupling_map``, ``basis_gates``,
151
- ``instruction_durations``, ``inst_map``, ``timing_constraints``
152
- and ``backend_properties``.
153
- basis_gates (list): List of basis gate names to unroll to
154
- (e.g: ``['u1', 'u2', 'u3', 'cx']``).
155
- inst_map (InstructionScheduleMap): Mapping object that maps gate to schedules.
156
- If any user defined calibration is found in the map and this is used in a
157
- circuit, transpiler attaches the custom gate definition to the circuit.
158
- This enables one to flexibly override the low-level instruction
159
- implementation.
160
- coupling_map (CouplingMap or list): Directed graph represented a coupling
161
- map.
162
- instruction_durations (InstructionDurations): Dictionary of duration
163
- (in dt) for each instruction.
164
- timing_constraints (TimingConstraints): Hardware time alignment restrictions.
165
- initial_layout (Layout | List[int]): Initial position of virtual qubits on
166
- physical qubits.
167
- layout_method (str): The :class:`~.Pass` to use for choosing initial qubit
168
- placement. Valid choices are ``'trivial'``, ``'dense'``,
169
- and ``'sabre'``, representing :class:`~.TrivialLayout`, :class:`~.DenseLayout` and
170
- :class:`~.SabreLayout` respectively. This can also
171
- be the external plugin name to use for the ``layout`` stage of the output
172
- :class:`~.StagedPassManager`. You can see a list of installed plugins by using
173
- :func:`~.list_stage_plugins` with ``"layout"`` for the ``stage_name`` argument.
174
- routing_method (str): The pass to use for routing qubits on the
175
- architecture. Valid choices are ``'basic'``, ``'lookahead'``, ``'stochastic'``,
176
- ``'sabre'``, and ``'none'`` representing :class:`~.BasicSwap`,
177
- :class:`~.LookaheadSwap`, :class:`~.StochasticSwap`, :class:`~.SabreSwap`, and
178
- erroring if routing is required respectively. This can also be the external plugin
179
- name to use for the ``routing`` stage of the output :class:`~.StagedPassManager`.
180
- You can see a list of installed plugins by using :func:`~.list_stage_plugins` with
181
- ``"routing"`` for the ``stage_name`` argument.
182
- translation_method (str): The method to use for translating gates to
183
- basis gates. Valid choices ``'translator'``, ``'synthesis'`` representing
184
- :class:`~.BasisTranslator`, and :class:`~.UnitarySynthesis` respectively. This can
185
- also be the external plugin name to use for the ``translation`` stage of the output
186
- :class:`~.StagedPassManager`. You can see a list of installed plugins by using
187
- :func:`~.list_stage_plugins` with ``"translation"`` for the ``stage_name`` argument.
188
- scheduling_method (str): The pass to use for scheduling instructions. Valid choices
189
- are ``'alap'`` and ``'asap'``. This can also be the external plugin name to use
190
- for the ``scheduling`` stage of the output :class:`~.StagedPassManager`. You can
191
- see a list of installed plugins by using :func:`~.list_stage_plugins` with
192
- ``"scheduling"`` for the ``stage_name`` argument.
193
- backend_properties (BackendProperties): Properties returned by a
194
- backend, including information on gate errors, readout errors,
195
- qubit coherence times, etc.
196
- approximation_degree (float): Heuristic dial used for circuit approximation
197
- (1.0=no approximation, 0.0=maximal approximation).
198
- seed_transpiler (int): Sets random seed for the stochastic parts of
199
- the transpiler.
200
- unitary_synthesis_method (str): The name of the unitary synthesis
201
- method to use. By default ``'default'`` is used. You can see a list of
202
- installed plugins with :func:`.unitary_synthesis_plugin_names`.
203
- unitary_synthesis_plugin_config (dict): An optional configuration dictionary
204
- that will be passed directly to the unitary synthesis plugin. By
205
- default this setting will have no effect as the default unitary
206
- synthesis method does not take custom configuration. This should
207
- only be necessary when a unitary synthesis plugin is specified with
208
- the ``unitary_synthesis_method`` argument. As this is custom for each
209
- unitary synthesis plugin refer to the plugin documentation for how
210
- to use this option.
211
- hls_config (HLSConfig): An optional configuration class :class:`~.HLSConfig`
212
- that will be passed directly to :class:`~.HighLevelSynthesis` transformation pass.
213
- This configuration class allows to specify for various high-level objects
214
- the lists of synthesis algorithms and their parameters.
215
- init_method (str): The plugin name to use for the ``init`` stage of
216
- the output :class:`~.StagedPassManager`. By default an external
217
- plugin is not used. You can see a list of installed plugins by
218
- using :func:`~.list_stage_plugins` with ``"init"`` for the stage
219
- name argument.
220
- optimization_method (str): The plugin name to use for the
221
- ``optimization`` stage of the output
222
- :class:`~.StagedPassManager`. By default an external
223
- plugin is not used. You can see a list of installed plugins by
224
- using :func:`~.list_stage_plugins` with ``"optimization"`` for the
225
- ``stage_name`` argument.
226
-
227
- Returns:
228
- StagedPassManager: The preset pass manager for the given options
229
-
230
- Raises:
231
- ValueError: if an invalid value for ``optimization_level`` is passed in.
232
- """
233
-
234
- if coupling_map is not None and not isinstance(coupling_map, CouplingMap):
235
- coupling_map = CouplingMap(coupling_map)
236
-
237
- if target is not None:
238
- if coupling_map is None:
239
- coupling_map = target.build_coupling_map()
240
- if basis_gates is None:
241
- basis_gates = target.operation_names
242
- if instruction_durations is None:
243
- instruction_durations = target.durations()
244
- if inst_map is None:
245
- inst_map = target.instruction_schedule_map()
246
- if timing_constraints is None:
247
- timing_constraints = target.timing_constraints()
248
- if backend_properties is None:
249
- backend_properties = target_to_backend_properties(target)
250
-
251
- pm_options = {
252
- "target": target,
253
- "basis_gates": basis_gates,
254
- "inst_map": inst_map,
255
- "coupling_map": coupling_map,
256
- "instruction_durations": instruction_durations,
257
- "backend_properties": backend_properties,
258
- "timing_constraints": timing_constraints,
259
- "layout_method": layout_method,
260
- "routing_method": routing_method,
261
- "translation_method": translation_method,
262
- "scheduling_method": scheduling_method,
263
- "approximation_degree": approximation_degree,
264
- "seed_transpiler": seed_transpiler,
265
- "unitary_synthesis_method": unitary_synthesis_method,
266
- "unitary_synthesis_plugin_config": unitary_synthesis_plugin_config,
267
- "initial_layout": initial_layout,
268
- "hls_config": hls_config,
269
- "init_method": init_method,
270
- "optimization_method": optimization_method,
271
- }
272
-
273
- if backend is not None:
274
- pm_options["_skip_target"] = _skip_target
275
- pm_config = PassManagerConfig.from_backend(backend, **pm_options)
276
- else:
277
- pm_config = PassManagerConfig(**pm_options)
278
- if optimization_level == 0:
279
- pm = level_0_pass_manager(pm_config)
280
- elif optimization_level == 1:
281
- pm = level_1_pass_manager(pm_config)
282
- elif optimization_level == 2:
283
- pm = level_2_pass_manager(pm_config)
284
- elif optimization_level == 3:
285
- pm = level_3_pass_manager(pm_config)
286
- else:
287
- raise ValueError(f"Invalid optimization level {optimization_level}")
288
- return pm
289
-
290
-
291
67
  __all__ = [
292
68
  "level_0_pass_manager",
293
69
  "level_1_pass_manager",
@@ -12,6 +12,10 @@
12
12
 
13
13
  """Built-in transpiler stage plugins for preset pass managers."""
14
14
 
15
+ import os
16
+
17
+ from qiskit.circuit import Instruction
18
+ from qiskit.transpiler.passes.optimization.split_2q_unitaries import Split2QUnitaries
15
19
  from qiskit.transpiler.passmanager import PassManager
16
20
  from qiskit.transpiler.exceptions import TranspilerError
17
21
  from qiskit.transpiler.passes import BasicSwap
@@ -62,7 +66,22 @@ from qiskit.circuit.library.standard_gates import (
62
66
  CYGate,
63
67
  SXGate,
64
68
  SXdgGate,
69
+ get_standard_gate_name_mapping,
65
70
  )
71
+ from qiskit.utils.parallel import CPU_COUNT
72
+ from qiskit import user_config
73
+
74
+ CONFIG = user_config.get_config()
75
+
76
+ _discrete_skipped_ops = {
77
+ "delay",
78
+ "reset",
79
+ "measure",
80
+ "switch_case",
81
+ "if_else",
82
+ "for_loop",
83
+ "while_loop",
84
+ }
66
85
 
67
86
 
68
87
  class DefaultInitPassManager(PassManagerStagePlugin):
@@ -154,6 +173,58 @@ class DefaultInitPassManager(PassManagerStagePlugin):
154
173
  )
155
174
  )
156
175
  init.append(CommutativeCancellation())
176
+ # skip peephole optimization before routing if target basis gate set is discrete,
177
+ # i.e. only consists of Cliffords that an user might want to keep
178
+ # use rz, sx, x, cx as basis, rely on physical optimziation to fix everything later one
179
+ stdgates = get_standard_gate_name_mapping()
180
+
181
+ def _is_one_op_non_discrete(ops):
182
+ """Checks if one operation in `ops` is not discrete, i.e. is parameterizable
183
+ Args:
184
+ ops (List(Operation)): list of operations to check
185
+ Returns
186
+ True if at least one operation in `ops` is not discrete, False otherwise
187
+ """
188
+ found_one_continuous_gate = False
189
+ for op in ops:
190
+ if isinstance(op, str):
191
+ if op in _discrete_skipped_ops:
192
+ continue
193
+ op = stdgates.get(op, None)
194
+
195
+ if op is not None and op.name in _discrete_skipped_ops:
196
+ continue
197
+
198
+ if op is None or not isinstance(op, Instruction):
199
+ return False
200
+
201
+ if len(op.params) > 0:
202
+ found_one_continuous_gate = True
203
+ return found_one_continuous_gate
204
+
205
+ target = pass_manager_config.target
206
+ basis = pass_manager_config.basis_gates
207
+ # consolidate gates before routing if the user did not specify a discrete basis gate, i.e.
208
+ # * no target or basis gate set has been specified
209
+ # * target has been specified, and we have one non-discrete gate in the target's spec
210
+ # * basis gates have been specified, and we have one non-discrete gate in that set
211
+ do_consolidate_blocks_init = target is None and basis is None
212
+ do_consolidate_blocks_init |= target is not None and _is_one_op_non_discrete(
213
+ target.operations
214
+ )
215
+ do_consolidate_blocks_init |= basis is not None and _is_one_op_non_discrete(basis)
216
+
217
+ if do_consolidate_blocks_init:
218
+ init.append(Collect2qBlocks())
219
+ init.append(ConsolidateBlocks())
220
+ # If approximation degree is None that indicates a request to approximate up to the
221
+ # error rates in the target. However, in the init stage we don't yet know the target
222
+ # qubits being used to figure out the fidelity so just use the default fidelity parameter
223
+ # in this case.
224
+ if pass_manager_config.approximation_degree is not None:
225
+ init.append(Split2QUnitaries(pass_manager_config.approximation_degree))
226
+ else:
227
+ init.append(Split2QUnitaries())
157
228
  else:
158
229
  raise TranspilerError(f"Invalid optimization level {optimization_level}")
159
230
  return init
@@ -397,11 +468,12 @@ class SabreSwapPassManager(PassManagerStagePlugin):
397
468
  pass_manager_config.initial_layout,
398
469
  )
399
470
  if optimization_level == 0:
471
+ trial_count = _get_trial_count(5)
400
472
  routing_pass = SabreSwap(
401
473
  coupling_map_routing,
402
474
  heuristic="basic",
403
475
  seed=seed_transpiler,
404
- trials=5,
476
+ trials=trial_count,
405
477
  )
406
478
  return common.generate_routing_passmanager(
407
479
  routing_pass,
@@ -411,11 +483,12 @@ class SabreSwapPassManager(PassManagerStagePlugin):
411
483
  use_barrier_before_measurement=True,
412
484
  )
413
485
  if optimization_level == 1:
486
+ trial_count = _get_trial_count(5)
414
487
  routing_pass = SabreSwap(
415
488
  coupling_map_routing,
416
489
  heuristic="decay",
417
490
  seed=seed_transpiler,
418
- trials=5,
491
+ trials=trial_count,
419
492
  )
420
493
  return common.generate_routing_passmanager(
421
494
  routing_pass,
@@ -429,11 +502,13 @@ class SabreSwapPassManager(PassManagerStagePlugin):
429
502
  use_barrier_before_measurement=True,
430
503
  )
431
504
  if optimization_level == 2:
505
+ trial_count = _get_trial_count(20)
506
+
432
507
  routing_pass = SabreSwap(
433
508
  coupling_map_routing,
434
509
  heuristic="decay",
435
510
  seed=seed_transpiler,
436
- trials=10,
511
+ trials=trial_count,
437
512
  )
438
513
  return common.generate_routing_passmanager(
439
514
  routing_pass,
@@ -446,11 +521,12 @@ class SabreSwapPassManager(PassManagerStagePlugin):
446
521
  use_barrier_before_measurement=True,
447
522
  )
448
523
  if optimization_level == 3:
524
+ trial_count = _get_trial_count(20)
449
525
  routing_pass = SabreSwap(
450
526
  coupling_map_routing,
451
527
  heuristic="decay",
452
528
  seed=seed_transpiler,
453
- trials=20,
529
+ trials=trial_count,
454
530
  )
455
531
  return common.generate_routing_passmanager(
456
532
  routing_pass,
@@ -737,12 +813,15 @@ class DefaultLayoutPassManager(PassManagerStagePlugin):
737
813
  max_trials=2500, # Limits layout scoring to < 600ms on ~400 qubit devices
738
814
  )
739
815
  layout.append(ConditionalController(choose_layout_1, condition=_layout_not_perfect))
816
+
817
+ trial_count = _get_trial_count(5)
818
+
740
819
  choose_layout_2 = SabreLayout(
741
820
  coupling_map,
742
821
  max_iterations=2,
743
822
  seed=pass_manager_config.seed_transpiler,
744
- swap_trials=5,
745
- layout_trials=5,
823
+ swap_trials=trial_count,
824
+ layout_trials=trial_count,
746
825
  skip_routing=pass_manager_config.routing_method is not None
747
826
  and pass_manager_config.routing_method != "sabre",
748
827
  )
@@ -769,12 +848,15 @@ class DefaultLayoutPassManager(PassManagerStagePlugin):
769
848
  layout.append(
770
849
  ConditionalController(choose_layout_0, condition=_choose_layout_condition)
771
850
  )
851
+
852
+ trial_count = _get_trial_count(20)
853
+
772
854
  choose_layout_1 = SabreLayout(
773
855
  coupling_map,
774
856
  max_iterations=2,
775
857
  seed=pass_manager_config.seed_transpiler,
776
- swap_trials=20,
777
- layout_trials=20,
858
+ swap_trials=trial_count,
859
+ layout_trials=trial_count,
778
860
  skip_routing=pass_manager_config.routing_method is not None
779
861
  and pass_manager_config.routing_method != "sabre",
780
862
  )
@@ -801,12 +883,15 @@ class DefaultLayoutPassManager(PassManagerStagePlugin):
801
883
  layout.append(
802
884
  ConditionalController(choose_layout_0, condition=_choose_layout_condition)
803
885
  )
886
+
887
+ trial_count = _get_trial_count(20)
888
+
804
889
  choose_layout_1 = SabreLayout(
805
890
  coupling_map,
806
891
  max_iterations=4,
807
892
  seed=pass_manager_config.seed_transpiler,
808
- swap_trials=20,
809
- layout_trials=20,
893
+ swap_trials=trial_count,
894
+ layout_trials=trial_count,
810
895
  skip_routing=pass_manager_config.routing_method is not None
811
896
  and pass_manager_config.routing_method != "sabre",
812
897
  )
@@ -902,42 +987,50 @@ class SabreLayoutPassManager(PassManagerStagePlugin):
902
987
  layout = PassManager()
903
988
  layout.append(_given_layout)
904
989
  if optimization_level == 0:
990
+ trial_count = _get_trial_count(5)
991
+
905
992
  layout_pass = SabreLayout(
906
993
  coupling_map,
907
994
  max_iterations=1,
908
995
  seed=pass_manager_config.seed_transpiler,
909
- swap_trials=5,
910
- layout_trials=5,
996
+ swap_trials=trial_count,
997
+ layout_trials=trial_count,
911
998
  skip_routing=pass_manager_config.routing_method is not None
912
999
  and pass_manager_config.routing_method != "sabre",
913
1000
  )
914
1001
  elif optimization_level == 1:
1002
+ trial_count = _get_trial_count(5)
1003
+
915
1004
  layout_pass = SabreLayout(
916
1005
  coupling_map,
917
1006
  max_iterations=2,
918
1007
  seed=pass_manager_config.seed_transpiler,
919
- swap_trials=5,
920
- layout_trials=5,
1008
+ swap_trials=trial_count,
1009
+ layout_trials=trial_count,
921
1010
  skip_routing=pass_manager_config.routing_method is not None
922
1011
  and pass_manager_config.routing_method != "sabre",
923
1012
  )
924
1013
  elif optimization_level == 2:
1014
+ trial_count = _get_trial_count(20)
1015
+
925
1016
  layout_pass = SabreLayout(
926
1017
  coupling_map,
927
1018
  max_iterations=2,
928
1019
  seed=pass_manager_config.seed_transpiler,
929
- swap_trials=20,
930
- layout_trials=20,
1020
+ swap_trials=trial_count,
1021
+ layout_trials=trial_count,
931
1022
  skip_routing=pass_manager_config.routing_method is not None
932
1023
  and pass_manager_config.routing_method != "sabre",
933
1024
  )
934
1025
  elif optimization_level == 3:
1026
+ trial_count = _get_trial_count(20)
1027
+
935
1028
  layout_pass = SabreLayout(
936
1029
  coupling_map,
937
1030
  max_iterations=4,
938
1031
  seed=pass_manager_config.seed_transpiler,
939
- swap_trials=20,
940
- layout_trials=20,
1032
+ swap_trials=trial_count,
1033
+ layout_trials=trial_count,
941
1034
  skip_routing=pass_manager_config.routing_method is not None
942
1035
  and pass_manager_config.routing_method != "sabre",
943
1036
  )
@@ -957,3 +1050,9 @@ class SabreLayoutPassManager(PassManagerStagePlugin):
957
1050
  embed = common.generate_embed_passmanager(coupling_map)
958
1051
  layout.append(ConditionalController(embed.to_flow_controller(), condition=_swap_mapped))
959
1052
  return layout
1053
+
1054
+
1055
+ def _get_trial_count(default_trials=5):
1056
+ if CONFIG.get("sabre_all_threads", None) or os.getenv("QISKIT_SABRE_ALL_THREADS"):
1057
+ return max(CPU_COUNT, default_trials)
1058
+ return default_trials
@@ -364,10 +364,7 @@ def generate_routing_passmanager(
364
364
  routing.append(ConditionalController(ApplyLayout(), condition=_apply_post_layout_condition))
365
365
 
366
366
  def filter_fn(node):
367
- return (
368
- getattr(node.op, "label", None)
369
- != "qiskit.transpiler.internal.routing.protection.barrier"
370
- )
367
+ return node.label != "qiskit.transpiler.internal.routing.protection.barrier"
371
368
 
372
369
  routing.append([FilterOpNodes(filter_fn)])
373
370
 
@@ -518,7 +515,7 @@ def generate_translation_passmanager(
518
515
  ),
519
516
  ]
520
517
  else:
521
- raise TranspilerError("Invalid translation method %s." % method)
518
+ raise TranspilerError(f"Invalid translation method {method}.")
522
519
  return PassManager(unroll)
523
520
 
524
521
 
@@ -557,7 +554,7 @@ def generate_scheduling(
557
554
  try:
558
555
  scheduling.append(scheduler[scheduling_method](instruction_durations, target=target))
559
556
  except KeyError as ex:
560
- raise TranspilerError("Invalid scheduling method %s." % scheduling_method) from ex
557
+ raise TranspilerError(f"Invalid scheduling method {scheduling_method}.") from ex
561
558
  elif instruction_durations:
562
559
  # No scheduling. But do unit conversion for delays.
563
560
  def _contains_delay(property_set):