qiskit 1.4.0__cp39-abi3-macosx_11_0_arm64.whl → 2.0.0rc1__cp39-abi3-macosx_11_0_arm64.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 (456) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +2 -5
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/circuit/__init__.py +24 -5
  5. qiskit/circuit/{add_control.py → _add_control.py} +32 -12
  6. qiskit/circuit/_classical_resource_map.py +5 -3
  7. qiskit/circuit/barrier.py +3 -7
  8. qiskit/circuit/classical/expr/__init__.py +31 -3
  9. qiskit/circuit/classical/expr/constructors.py +248 -28
  10. qiskit/circuit/classical/expr/expr.py +104 -3
  11. qiskit/circuit/classical/expr/visitors.py +75 -0
  12. qiskit/circuit/classical/types/__init__.py +12 -8
  13. qiskit/circuit/classical/types/ordering.py +14 -7
  14. qiskit/circuit/classical/types/types.py +36 -0
  15. qiskit/circuit/commutation_checker.py +34 -7
  16. qiskit/circuit/controlflow/__init__.py +32 -1
  17. qiskit/circuit/controlflow/_builder_utils.py +9 -5
  18. qiskit/circuit/controlflow/box.py +163 -0
  19. qiskit/circuit/controlflow/break_loop.py +1 -1
  20. qiskit/circuit/controlflow/builder.py +139 -39
  21. qiskit/circuit/controlflow/continue_loop.py +1 -3
  22. qiskit/circuit/controlflow/control_flow.py +10 -0
  23. qiskit/circuit/controlflow/for_loop.py +2 -1
  24. qiskit/circuit/controlflow/if_else.py +3 -16
  25. qiskit/circuit/controlflow/switch_case.py +2 -8
  26. qiskit/circuit/controlflow/while_loop.py +2 -7
  27. qiskit/circuit/controlledgate.py +2 -4
  28. qiskit/circuit/delay.py +40 -11
  29. qiskit/circuit/duration.py +0 -15
  30. qiskit/circuit/gate.py +2 -4
  31. qiskit/circuit/instruction.py +7 -140
  32. qiskit/circuit/instructionset.py +7 -54
  33. qiskit/circuit/library/__init__.py +34 -5
  34. qiskit/circuit/library/arithmetic/__init__.py +16 -10
  35. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  36. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +2 -2
  37. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
  38. qiskit/circuit/library/arithmetic/exact_reciprocal.py +64 -21
  39. qiskit/circuit/library/arithmetic/integer_comparator.py +37 -80
  40. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +169 -2
  41. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +59 -5
  42. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +154 -6
  43. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +114 -4
  44. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +191 -15
  45. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +93 -39
  46. qiskit/circuit/library/arithmetic/quadratic_form.py +168 -2
  47. qiskit/circuit/library/arithmetic/weighted_adder.py +73 -1
  48. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  49. qiskit/circuit/library/blueprintcircuit.py +52 -16
  50. qiskit/circuit/library/data_preparation/initializer.py +1 -1
  51. qiskit/circuit/library/data_preparation/pauli_feature_map.py +4 -4
  52. qiskit/circuit/library/data_preparation/state_preparation.py +1 -1
  53. qiskit/circuit/library/generalized_gates/gms.py +1 -1
  54. qiskit/circuit/library/generalized_gates/isometry.py +1 -1
  55. qiskit/circuit/library/generalized_gates/pauli.py +1 -2
  56. qiskit/circuit/library/generalized_gates/uc.py +97 -7
  57. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +1 -1
  58. qiskit/circuit/library/generalized_gates/unitary.py +4 -2
  59. qiskit/circuit/library/hamiltonian_gate.py +1 -1
  60. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  61. qiskit/circuit/library/n_local/n_local.py +1 -1
  62. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  63. qiskit/circuit/library/overlap.py +2 -2
  64. qiskit/circuit/library/pauli_evolution.py +39 -24
  65. qiskit/circuit/library/phase_oracle.py +130 -51
  66. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  67. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  68. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  69. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  70. qiskit/circuit/library/standard_gates/h.py +4 -9
  71. qiskit/circuit/library/standard_gates/i.py +2 -2
  72. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  73. qiskit/circuit/library/standard_gates/p.py +15 -34
  74. qiskit/circuit/library/standard_gates/r.py +2 -6
  75. qiskit/circuit/library/standard_gates/rx.py +5 -15
  76. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  77. qiskit/circuit/library/standard_gates/ry.py +5 -17
  78. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  79. qiskit/circuit/library/standard_gates/rz.py +5 -17
  80. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  81. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  82. qiskit/circuit/library/standard_gates/s.py +6 -15
  83. qiskit/circuit/library/standard_gates/swap.py +4 -11
  84. qiskit/circuit/library/standard_gates/sx.py +7 -12
  85. qiskit/circuit/library/standard_gates/t.py +6 -7
  86. qiskit/circuit/library/standard_gates/u.py +2 -10
  87. qiskit/circuit/library/standard_gates/u1.py +5 -16
  88. qiskit/circuit/library/standard_gates/u2.py +2 -6
  89. qiskit/circuit/library/standard_gates/u3.py +3 -11
  90. qiskit/circuit/library/standard_gates/x.py +13 -60
  91. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  92. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/y.py +4 -9
  94. qiskit/circuit/library/standard_gates/z.py +5 -15
  95. qiskit/circuit/measure.py +11 -2
  96. qiskit/circuit/parameterexpression.py +4 -0
  97. qiskit/circuit/quantumcircuit.py +881 -555
  98. qiskit/circuit/random/utils.py +12 -6
  99. qiskit/circuit/reset.py +5 -2
  100. qiskit/circuit/singleton.py +5 -11
  101. qiskit/circuit/store.py +0 -8
  102. qiskit/compiler/__init__.py +1 -7
  103. qiskit/compiler/transpiler.py +38 -196
  104. qiskit/converters/circuit_to_dag.py +4 -2
  105. qiskit/converters/circuit_to_dagdependency.py +0 -2
  106. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  107. qiskit/converters/circuit_to_gate.py +1 -1
  108. qiskit/converters/circuit_to_instruction.py +16 -29
  109. qiskit/converters/dag_to_circuit.py +5 -5
  110. qiskit/converters/dag_to_dagdependency.py +0 -1
  111. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  112. qiskit/converters/dagdependency_to_circuit.py +0 -6
  113. qiskit/converters/dagdependency_to_dag.py +0 -6
  114. qiskit/dagcircuit/collect_blocks.py +32 -20
  115. qiskit/dagcircuit/dagdependency.py +3 -37
  116. qiskit/dagcircuit/dagdependency_v2.py +2 -80
  117. qiskit/dagcircuit/dagnode.py +14 -2
  118. qiskit/passmanager/__init__.py +24 -6
  119. qiskit/passmanager/passmanager.py +26 -24
  120. qiskit/primitives/__init__.py +44 -35
  121. qiskit/primitives/backend_estimator_v2.py +102 -23
  122. qiskit/primitives/backend_sampler_v2.py +5 -20
  123. qiskit/primitives/base/__init__.py +4 -4
  124. qiskit/primitives/base/base_estimator.py +77 -82
  125. qiskit/primitives/base/base_primitive_job.py +2 -2
  126. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  127. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  128. qiskit/primitives/base/base_sampler.py +52 -60
  129. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  130. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  131. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  132. qiskit/primitives/containers/bindings_array.py +3 -1
  133. qiskit/primitives/containers/bit_array.py +23 -0
  134. qiskit/primitives/containers/data_bin.py +3 -1
  135. qiskit/primitives/containers/observables_array.py +19 -2
  136. qiskit/primitives/statevector_sampler.py +6 -8
  137. qiskit/primitives/utils.py +14 -189
  138. qiskit/providers/__init__.py +4 -130
  139. qiskit/providers/backend.py +11 -314
  140. qiskit/providers/basic_provider/__init__.py +3 -1
  141. qiskit/providers/basic_provider/basic_provider.py +29 -9
  142. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  143. qiskit/providers/exceptions.py +0 -33
  144. qiskit/providers/fake_provider/__init__.py +0 -37
  145. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  146. qiskit/qasm2/__init__.py +21 -6
  147. qiskit/qasm2/export.py +2 -10
  148. qiskit/qasm2/parse.py +11 -25
  149. qiskit/qasm3/__init__.py +5 -1
  150. qiskit/qasm3/ast.py +44 -0
  151. qiskit/qasm3/exporter.py +65 -27
  152. qiskit/qasm3/printer.py +35 -4
  153. qiskit/qpy/__init__.py +141 -19
  154. qiskit/qpy/binary_io/__init__.py +0 -1
  155. qiskit/qpy/binary_io/circuits.py +91 -116
  156. qiskit/qpy/binary_io/schedules.py +61 -388
  157. qiskit/qpy/binary_io/value.py +168 -28
  158. qiskit/qpy/common.py +10 -7
  159. qiskit/qpy/formats.py +41 -0
  160. qiskit/qpy/interface.py +29 -62
  161. qiskit/qpy/type_keys.py +58 -221
  162. qiskit/quantum_info/analysis/distance.py +3 -1
  163. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  164. qiskit/quantum_info/operators/operator.py +6 -2
  165. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  166. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  167. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  168. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  169. qiskit/quantum_info/states/densitymatrix.py +16 -6
  170. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  171. qiskit/quantum_info/states/statevector.py +16 -6
  172. qiskit/result/__init__.py +5 -17
  173. qiskit/result/models.py +18 -10
  174. qiskit/result/result.py +28 -126
  175. qiskit/result/sampled_expval.py +1 -2
  176. qiskit/result/utils.py +3 -4
  177. qiskit/synthesis/__init__.py +21 -1
  178. qiskit/synthesis/arithmetic/__init__.py +3 -1
  179. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  180. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  181. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  182. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  183. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  184. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  185. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  186. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  187. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  188. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  189. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  190. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  191. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  192. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -0
  193. qiskit/synthesis/evolution/lie_trotter.py +10 -7
  194. qiskit/synthesis/evolution/product_formula.py +44 -35
  195. qiskit/synthesis/evolution/qdrift.py +17 -24
  196. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  197. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  198. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  199. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  200. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  201. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  202. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  203. qiskit/synthesis/two_qubit/__init__.py +1 -0
  204. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  205. qiskit/transpiler/__init__.py +32 -232
  206. qiskit/transpiler/basepasses.py +20 -51
  207. qiskit/transpiler/layout.py +1 -1
  208. qiskit/transpiler/passes/__init__.py +2 -40
  209. qiskit/transpiler/passes/basis/basis_translator.py +4 -3
  210. qiskit/transpiler/passes/basis/decompose.py +1 -15
  211. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  212. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  213. qiskit/transpiler/passes/layout/apply_layout.py +5 -0
  214. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  215. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +4 -4
  216. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  217. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  218. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  219. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  220. qiskit/transpiler/passes/optimization/__init__.py +1 -3
  221. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  222. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  223. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  224. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  225. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  226. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  227. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  228. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  229. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  230. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  231. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  232. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  233. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  234. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  235. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -0
  236. qiskit/transpiler/passes/routing/__init__.py +0 -1
  237. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  238. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  239. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  240. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  241. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  242. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  243. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  244. qiskit/transpiler/passes/scheduling/padding/base_padding.py +30 -2
  245. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -58
  246. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +11 -3
  247. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  248. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  249. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  250. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +127 -59
  251. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  252. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  253. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  254. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  255. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  256. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  257. qiskit/transpiler/passes/utils/__init__.py +0 -1
  258. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  259. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  260. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  261. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  262. qiskit/transpiler/passmanager.py +13 -0
  263. qiskit/transpiler/passmanager_config.py +5 -81
  264. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  265. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  266. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +101 -322
  267. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  268. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  269. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  270. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  271. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  272. qiskit/transpiler/target.py +67 -524
  273. qiskit/user_config.py +8 -4
  274. qiskit/utils/__init__.py +13 -12
  275. qiskit/utils/deprecation.py +4 -112
  276. qiskit/utils/optionals.py +11 -4
  277. qiskit/utils/parallel.py +214 -87
  278. qiskit/utils/units.py +4 -1
  279. qiskit/visualization/__init__.py +3 -7
  280. qiskit/visualization/array.py +4 -1
  281. qiskit/visualization/bloch.py +1 -1
  282. qiskit/visualization/circuit/_utils.py +19 -19
  283. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  284. qiskit/visualization/circuit/matplotlib.py +13 -23
  285. qiskit/visualization/circuit/text.py +7 -3
  286. qiskit/visualization/dag_visualization.py +2 -1
  287. qiskit/visualization/gate_map.py +39 -154
  288. qiskit/visualization/pass_manager_visualization.py +6 -2
  289. qiskit/visualization/state_visualization.py +6 -0
  290. qiskit/visualization/timeline/core.py +27 -12
  291. qiskit/visualization/timeline/interface.py +23 -18
  292. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/METADATA +2 -2
  293. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/RECORD +297 -444
  294. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/WHEEL +2 -1
  295. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/entry_points.txt +8 -2
  296. qiskit/assembler/__init__.py +0 -42
  297. qiskit/assembler/assemble_circuits.py +0 -451
  298. qiskit/assembler/assemble_schedules.py +0 -367
  299. qiskit/assembler/disassemble.py +0 -310
  300. qiskit/assembler/run_config.py +0 -77
  301. qiskit/circuit/bit.py +0 -106
  302. qiskit/circuit/classicalfunction/__init__.py +0 -152
  303. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  304. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  305. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  306. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  307. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  308. qiskit/circuit/classicalfunction/types.py +0 -18
  309. qiskit/circuit/classicalfunction/utils.py +0 -91
  310. qiskit/circuit/classicalregister.py +0 -57
  311. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  312. qiskit/circuit/quantumregister.py +0 -75
  313. qiskit/circuit/register.py +0 -246
  314. qiskit/compiler/assembler.py +0 -689
  315. qiskit/compiler/scheduler.py +0 -109
  316. qiskit/compiler/sequencer.py +0 -71
  317. qiskit/primitives/backend_estimator.py +0 -486
  318. qiskit/primitives/backend_sampler.py +0 -222
  319. qiskit/primitives/estimator.py +0 -172
  320. qiskit/primitives/sampler.py +0 -162
  321. qiskit/providers/backend_compat.py +0 -507
  322. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  323. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  324. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  325. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  326. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  327. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  328. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  329. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  330. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  332. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  333. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  335. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  336. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  337. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  338. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  339. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  341. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  342. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  343. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  344. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  345. qiskit/providers/fake_provider/fake_1q.py +0 -91
  346. qiskit/providers/fake_provider/fake_backend.py +0 -165
  347. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  348. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  349. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  350. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  351. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  352. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  353. qiskit/providers/models/__init__.py +0 -89
  354. qiskit/providers/models/backendconfiguration.py +0 -1040
  355. qiskit/providers/models/backendproperties.py +0 -535
  356. qiskit/providers/models/backendstatus.py +0 -104
  357. qiskit/providers/models/jobstatus.py +0 -77
  358. qiskit/providers/models/pulsedefaults.py +0 -305
  359. qiskit/providers/provider.py +0 -95
  360. qiskit/pulse/__init__.py +0 -158
  361. qiskit/pulse/builder.py +0 -2262
  362. qiskit/pulse/calibration_entries.py +0 -381
  363. qiskit/pulse/channels.py +0 -227
  364. qiskit/pulse/configuration.py +0 -245
  365. qiskit/pulse/exceptions.py +0 -45
  366. qiskit/pulse/filters.py +0 -309
  367. qiskit/pulse/instruction_schedule_map.py +0 -424
  368. qiskit/pulse/instructions/__init__.py +0 -67
  369. qiskit/pulse/instructions/acquire.py +0 -150
  370. qiskit/pulse/instructions/delay.py +0 -71
  371. qiskit/pulse/instructions/directives.py +0 -154
  372. qiskit/pulse/instructions/frequency.py +0 -135
  373. qiskit/pulse/instructions/instruction.py +0 -270
  374. qiskit/pulse/instructions/phase.py +0 -152
  375. qiskit/pulse/instructions/play.py +0 -99
  376. qiskit/pulse/instructions/reference.py +0 -100
  377. qiskit/pulse/instructions/snapshot.py +0 -82
  378. qiskit/pulse/library/__init__.py +0 -97
  379. qiskit/pulse/library/continuous.py +0 -430
  380. qiskit/pulse/library/pulse.py +0 -148
  381. qiskit/pulse/library/samplers/__init__.py +0 -15
  382. qiskit/pulse/library/samplers/decorators.py +0 -295
  383. qiskit/pulse/library/samplers/strategies.py +0 -71
  384. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  385. qiskit/pulse/library/waveform.py +0 -136
  386. qiskit/pulse/macros.py +0 -262
  387. qiskit/pulse/parameter_manager.py +0 -445
  388. qiskit/pulse/parser.py +0 -314
  389. qiskit/pulse/reference_manager.py +0 -58
  390. qiskit/pulse/schedule.py +0 -1854
  391. qiskit/pulse/transforms/__init__.py +0 -106
  392. qiskit/pulse/transforms/alignments.py +0 -406
  393. qiskit/pulse/transforms/base_transforms.py +0 -71
  394. qiskit/pulse/transforms/canonicalization.py +0 -498
  395. qiskit/pulse/transforms/dag.py +0 -122
  396. qiskit/pulse/utils.py +0 -149
  397. qiskit/qobj/__init__.py +0 -75
  398. qiskit/qobj/common.py +0 -81
  399. qiskit/qobj/converters/__init__.py +0 -18
  400. qiskit/qobj/converters/lo_config.py +0 -177
  401. qiskit/qobj/converters/pulse_instruction.py +0 -897
  402. qiskit/qobj/pulse_qobj.py +0 -709
  403. qiskit/qobj/qasm_qobj.py +0 -708
  404. qiskit/qobj/utils.py +0 -46
  405. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  406. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  407. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  408. qiskit/result/mitigation/utils.py +0 -217
  409. qiskit/scheduler/__init__.py +0 -40
  410. qiskit/scheduler/config.py +0 -37
  411. qiskit/scheduler/lowering.py +0 -187
  412. qiskit/scheduler/methods/__init__.py +0 -15
  413. qiskit/scheduler/methods/basic.py +0 -140
  414. qiskit/scheduler/schedule_circuit.py +0 -69
  415. qiskit/scheduler/sequence.py +0 -104
  416. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  417. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  418. qiskit/transpiler/passes/calibration/builders.py +0 -20
  419. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  420. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  421. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  422. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  423. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  424. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  425. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  426. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  427. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  428. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  429. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  430. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  431. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  432. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  433. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  434. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  435. qiskit/utils/deprecate_pulse.py +0 -119
  436. qiskit/utils/multiprocessing.py +0 -56
  437. qiskit/visualization/pulse_v2/__init__.py +0 -21
  438. qiskit/visualization/pulse_v2/core.py +0 -901
  439. qiskit/visualization/pulse_v2/device_info.py +0 -173
  440. qiskit/visualization/pulse_v2/drawings.py +0 -253
  441. qiskit/visualization/pulse_v2/events.py +0 -254
  442. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  443. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  444. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  445. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  446. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  447. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  448. qiskit/visualization/pulse_v2/interface.py +0 -459
  449. qiskit/visualization/pulse_v2/layouts.py +0 -387
  450. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  451. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  452. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  453. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  454. qiskit/visualization/pulse_v2/types.py +0 -242
  455. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/LICENSE.txt +0 -0
  456. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -14,29 +14,19 @@
14
14
  Preset pass manager generation function
15
15
  """
16
16
 
17
- import copy
18
17
  import warnings
19
18
 
20
- from qiskit.circuit.controlflow import (
21
- CONTROL_FLOW_OP_NAMES,
22
- IfElseOp,
23
- WhileLoopOp,
24
- ForLoopOp,
25
- SwitchCaseOp,
26
- )
19
+ from qiskit.circuit.controlflow import CONTROL_FLOW_OP_NAMES, get_control_flow_name_mapping
27
20
  from qiskit.circuit.library.standard_gates import get_standard_gate_name_mapping
28
- from qiskit.circuit.quantumregister import Qubit
21
+ from qiskit.circuit import Qubit
29
22
  from qiskit.providers.backend import Backend
30
- from qiskit.providers.backend_compat import BackendV2Converter
31
23
  from qiskit.transpiler.coupling import CouplingMap
32
24
  from qiskit.transpiler.exceptions import TranspilerError
33
25
  from qiskit.transpiler.instruction_durations import InstructionDurations
34
26
  from qiskit.transpiler.layout import Layout
35
27
  from qiskit.transpiler.passmanager_config import PassManagerConfig
36
- from qiskit.transpiler.target import Target, target_to_backend_properties
28
+ from qiskit.transpiler.target import Target, _FakeTarget
37
29
  from qiskit.transpiler.timing_constraints import TimingConstraints
38
- from qiskit.utils import deprecate_arg
39
- from qiskit.utils.deprecate_pulse import deprecate_pulse_arg
40
30
 
41
31
  from .level0 import level_0_pass_manager
42
32
  from .level1 import level_1_pass_manager
@@ -44,43 +34,15 @@ from .level2 import level_2_pass_manager
44
34
  from .level3 import level_3_pass_manager
45
35
 
46
36
 
47
- @deprecate_arg(
48
- name="instruction_durations",
49
- since="1.3",
50
- package_name="Qiskit",
51
- removal_timeline="in Qiskit 2.0",
52
- additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
53
- "with defined instruction durations with "
54
- "`Target.from_configuration(..., instruction_durations=...)`",
55
- )
56
- @deprecate_arg(
57
- name="timing_constraints",
58
- since="1.3",
59
- package_name="Qiskit",
60
- removal_timeline="in Qiskit 2.0",
61
- additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
62
- "with defined timing constraints with "
63
- "`Target.from_configuration(..., timing_constraints=...)`",
64
- )
65
- @deprecate_arg(
66
- name="backend_properties",
67
- since="1.3",
68
- package_name="Qiskit",
69
- removal_timeline="in Qiskit 2.0",
70
- additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
71
- "with defined properties with Target.from_configuration(..., backend_properties=...)",
72
- )
73
- @deprecate_pulse_arg("inst_map", predicate=lambda inst_map: inst_map is not None)
37
+ OVER_3Q_GATES = ["ccx", "ccz", "cswap", "rccx", "c3x", "c3sx", "rc3x"]
38
+
39
+
74
40
  def generate_preset_pass_manager(
75
41
  optimization_level=2,
76
42
  backend=None,
77
43
  target=None,
78
44
  basis_gates=None,
79
- inst_map=None,
80
45
  coupling_map=None,
81
- instruction_durations=None,
82
- backend_properties=None,
83
- timing_constraints=None,
84
46
  initial_layout=None,
85
47
  layout_method=None,
86
48
  routing_method=None,
@@ -107,30 +69,24 @@ def generate_preset_pass_manager(
107
69
  function internally builds and uses.
108
70
 
109
71
  The target constraints for the pass manager construction can be specified through a :class:`.Target`
110
- instance, a :class:`.BackendV1` or :class:`.BackendV2` instance, or via loose constraints
111
- (``basis_gates``, ``inst_map``, ``coupling_map``, ``backend_properties``, ``instruction_durations``,
112
- ``dt`` or ``timing_constraints``).
72
+ instance, a :class:`.BackendV2` instance, or via loose constraints
73
+ (``basis_gates``, ``coupling_map``, or ``dt``).
113
74
  The order of priorities for target constraints works as follows: if a ``target``
114
75
  input is provided, it will take priority over any ``backend`` input or loose constraints.
115
76
  If a ``backend`` is provided together with any loose constraint
116
77
  from the list above, the loose constraint will take priority over the corresponding backend
117
- constraint. This behavior is independent of whether the ``backend`` instance is of type
118
- :class:`.BackendV1` or :class:`.BackendV2`, as summarized in the table below. The first column
78
+ constraint. This behavior is summarized in the table below. The first column
119
79
  in the table summarizes the potential user-provided constraints, and each cell shows whether
120
80
  the priority is assigned to that specific constraint input or another input
121
81
  (`target`/`backend(V1)`/`backend(V2)`).
122
82
 
123
- ============================ ========= ======================== =======================
124
- User Provided target backend(V1) backend(V2)
125
- ============================ ========= ======================== =======================
126
- **basis_gates** target basis_gates basis_gates
127
- **coupling_map** target coupling_map coupling_map
128
- **instruction_durations** target instruction_durations instruction_durations
129
- **inst_map** target inst_map inst_map
130
- **dt** target dt dt
131
- **timing_constraints** target timing_constraints timing_constraints
132
- **backend_properties** target backend_properties backend_properties
133
- ============================ ========= ======================== =======================
83
+ ============================ ========= ========================
84
+ User Provided target backend(V2)
85
+ ============================ ========= ========================
86
+ **basis_gates** target basis_gates
87
+ **coupling_map** target coupling_map
88
+ **dt** target dt
89
+ ============================ ========= ========================
134
90
 
135
91
  Args:
136
92
  optimization_level (int): The optimization level to generate a
@@ -145,23 +101,15 @@ def generate_preset_pass_manager(
145
101
  * 3: even heavier optimization
146
102
 
147
103
  backend (Backend): An optional backend object which can be used as the
148
- source of the default values for the ``basis_gates``, ``inst_map``,
149
- ``coupling_map``, ``backend_properties``, ``instruction_durations``,
150
- ``timing_constraints``, and ``target``. If any of those other arguments
104
+ source of the default values for the ``basis_gates``,
105
+ ``coupling_map``, and ``target``. If any of those other arguments
151
106
  are specified in addition to ``backend`` they will take precedence
152
107
  over the value contained in the backend.
153
108
  target (Target): The :class:`~.Target` representing a backend compilation
154
109
  target. The following attributes will be inferred from this
155
- argument if they are not set: ``coupling_map``, ``basis_gates``,
156
- ``instruction_durations``, ``inst_map``, ``timing_constraints``
157
- and ``backend_properties``.
110
+ argument if they are not set: ``coupling_map`` and ``basis_gates``.
158
111
  basis_gates (list): List of basis gate names to unroll to
159
112
  (e.g: ``['u1', 'u2', 'u3', 'cx']``).
160
- inst_map (InstructionScheduleMap): DEPRECATED. Mapping object that maps gates to schedules.
161
- If any user defined calibration is found in the map and this is used in a
162
- circuit, transpiler attaches the custom gate definition to the circuit.
163
- This enables one to flexibly override the low-level instruction
164
- implementation.
165
113
  coupling_map (CouplingMap or list): Directed graph represented a coupling
166
114
  map. Multiple formats are supported:
167
115
 
@@ -169,45 +117,8 @@ def generate_preset_pass_manager(
169
117
  #. List, must be given as an adjacency matrix, where each entry
170
118
  specifies all directed two-qubit interactions supported by backend,
171
119
  e.g: ``[[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]``
172
-
173
- instruction_durations (InstructionDurations or list): Dictionary of duration
174
- (in dt) for each instruction. If specified, these durations overwrite the
175
- gate lengths in ``backend.properties``. Applicable only if ``scheduling_method``
176
- is specified.
177
- The format of ``instruction_durations`` must be as follows:
178
- They must be given as an :class:`.InstructionDurations` instance or a list of tuples
179
-
180
- ```
181
- [(instruction_name, qubits, duration, unit), ...].
182
- | [('cx', [0, 1], 12.3, 'ns'), ('u3', [0], 4.56, 'ns')]
183
- | [('cx', [0, 1], 1000), ('u3', [0], 300)]
184
- ```
185
-
186
- If ``unit`` is omitted, the default is ``'dt'``, which is a sample time depending on backend.
187
- If the time unit is ``'dt'``, the duration must be an integer.
188
120
  dt (float): Backend sample time (resolution) in seconds.
189
- If provided, this value will overwrite the ``dt`` value in ``instruction_durations``.
190
121
  If ``None`` (default) and a backend is provided, ``backend.dt`` is used.
191
- timing_constraints (TimingConstraints): Hardware time alignment restrictions.
192
- A quantum computer backend may report a set of restrictions, namely:
193
-
194
- - granularity: An integer value representing minimum pulse gate
195
- resolution in units of ``dt``. A user-defined pulse gate should have
196
- duration of a multiple of this granularity value.
197
- - min_length: An integer value representing minimum pulse gate
198
- length in units of ``dt``. A user-defined pulse gate should be longer
199
- than this length.
200
- - pulse_alignment: An integer value representing a time resolution of gate
201
- instruction starting time. Gate instruction should start at time which
202
- is a multiple of the alignment value.
203
- - acquire_alignment: An integer value representing a time resolution of measure
204
- instruction starting time. Measure instruction should start at time which
205
- is a multiple of the alignment value.
206
-
207
- This information will be provided by the backend configuration.
208
- If the backend doesn't have any restriction on the instruction time allocation,
209
- then ``timing_constraints`` is None and no adjustment will be performed.
210
-
211
122
  initial_layout (Layout | List[int]): Initial position of virtual qubits on
212
123
  physical qubits.
213
124
  layout_method (str): The :class:`~.Pass` to use for choosing initial qubit
@@ -236,9 +147,6 @@ def generate_preset_pass_manager(
236
147
  for the ``scheduling`` stage of the output :class:`~.StagedPassManager`. You can
237
148
  see a list of installed plugins by using :func:`~.list_stage_plugins` with
238
149
  ``"scheduling"`` for the ``stage_name`` argument.
239
- backend_properties (BackendProperties): Properties returned by a
240
- backend, including information on gate errors, readout errors,
241
- qubit coherence times, etc.
242
150
  approximation_degree (float): Heuristic dial used for circuit approximation
243
151
  (1.0=no approximation, 0.0=maximal approximation).
244
152
  seed_transpiler (int): Sets random seed for the stochastic parts of
@@ -289,98 +197,49 @@ def generate_preset_pass_manager(
289
197
  backend = optimization_level
290
198
  optimization_level = 2
291
199
 
292
- if backend is not None and getattr(backend, "version", 0) <= 1:
293
- # This is a temporary conversion step to allow for a smoother transition
294
- # to a fully target-based transpiler pipeline while maintaining the behavior
295
- # of `transpile` with BackendV1 inputs.
200
+ # If there are no loose constraints => use backend target if available
201
+ _no_loose_constraints = basis_gates is None and coupling_map is None and dt is None
202
+
203
+ # Warn about inconsistencies in backend + loose constraints path (dt shouldn't be a problem)
204
+ if backend is not None and (coupling_map is not None or basis_gates is not None):
296
205
  warnings.warn(
297
- "The `generate_preset_pass_manager` function will stop supporting inputs of "
298
- f"type `BackendV1` ( {backend} ) in the `backend` parameter in a future "
299
- "release no earlier than 2.0. `BackendV1` is deprecated and implementations "
300
- "should move to `BackendV2`.",
301
- category=DeprecationWarning,
206
+ "Providing `coupling_map` and/or `basis_gates` along with `backend` is not "
207
+ "recommended. This may introduce inconsistencies in the transpilation target, "
208
+ "leading to potential errors.",
209
+ category=UserWarning,
302
210
  stacklevel=2,
303
211
  )
304
- backend = BackendV2Converter(backend)
305
-
306
- # Check if a custom inst_map was specified before overwriting inst_map
307
- _given_inst_map = bool(inst_map)
308
- # If there are no loose constraints => use backend target if available
309
- _no_loose_constraints = (
310
- basis_gates is None
311
- and coupling_map is None
312
- and dt is None
313
- and instruction_durations is None
314
- and backend_properties is None
315
- and timing_constraints is None
316
- )
317
- # If it's an edge case => do not build target
318
- _skip_target = (
319
- target is None
320
- and backend is None
321
- # Note: instruction_durations is deprecated and will be removed in 2.0 (no need for alternative)
322
- and (basis_gates is None or coupling_map is None or instruction_durations is not None)
323
- )
324
212
 
325
213
  # Resolve loose constraints case-by-case against backend constraints.
326
214
  # The order of priority is loose constraints > backend.
327
215
  dt = _parse_dt(dt, backend)
328
- instruction_durations = _parse_instruction_durations(backend, instruction_durations, dt)
329
- timing_constraints = _parse_timing_constraints(backend, timing_constraints)
330
- inst_map = _parse_inst_map(inst_map, backend)
331
- # The basis gates parser will set _skip_target to True if a custom basis gate is found
332
- # (known edge case).
333
- basis_gates, name_mapping, _skip_target = _parse_basis_gates(
334
- basis_gates, backend, inst_map, _skip_target
335
- )
216
+ instruction_durations = _parse_instruction_durations(backend, dt)
217
+ timing_constraints = _parse_timing_constraints(backend)
336
218
  coupling_map = _parse_coupling_map(coupling_map, backend)
219
+ basis_gates, name_mapping = _parse_basis_gates(basis_gates, backend)
220
+
221
+ # Check if coupling map has been provided (either standalone or through backend)
222
+ # with user-defined basis_gates, and whether these have 3q or more.
223
+ if coupling_map is not None and basis_gates is not None:
224
+ for gate in OVER_3Q_GATES:
225
+ if gate in basis_gates:
226
+ raise ValueError(
227
+ f"Gates with 3 or more qubits ({gate}) in `basis_gates` or `backend` are "
228
+ "incompatible with a custom `coupling_map`. To include 3-qubit or larger "
229
+ " gates in the transpilation basis, use a custom `target` instance instead."
230
+ )
337
231
 
338
232
  if target is None:
339
233
  if backend is not None and _no_loose_constraints:
340
234
  # If a backend is specified without loose constraints, use its target directly.
341
235
  target = backend.target
342
- elif not _skip_target:
343
- # Only parse backend properties when the target isn't skipped to
344
- # preserve the former behavior of transpile.
345
- backend_properties = _parse_backend_properties(backend_properties, backend)
346
- with warnings.catch_warnings():
347
- # TODO: inst_map and backend_properties will be removed in 2.0
348
- warnings.filterwarnings(
349
- "ignore",
350
- category=DeprecationWarning,
351
- message=".*``inst_map`` is deprecated as of Qiskit 1.3.*",
352
- module="qiskit",
353
- )
354
- warnings.filterwarnings(
355
- "ignore",
356
- category=DeprecationWarning,
357
- message=".* ``backend_properties`` is deprecated as of Qiskit 1.4",
358
- module="qiskit",
359
- )
360
- warnings.filterwarnings(
361
- "ignore",
362
- category=DeprecationWarning,
363
- message=".*``qiskit.providers.exceptions.BackendPropertyError``",
364
- )
365
- # TODO: This is a temporary usage of deprecated backend_properties in
366
- # Target.from_configuration. Probably the logic needs to be restructured
367
- # in a more target-centric transpiler
368
- # https://github.com/Qiskit/qiskit/issues/9256
369
- warnings.filterwarnings(
370
- "ignore",
371
- category=DeprecationWarning,
372
- message=r".+qiskit\.transpiler\.target\.Target\.from_configuration.+",
373
- module="qiskit",
374
- )
236
+ else:
237
+ if basis_gates is not None:
375
238
  # Build target from constraints.
376
239
  target = Target.from_configuration(
377
240
  basis_gates=basis_gates,
378
241
  num_qubits=backend.num_qubits if backend is not None else None,
379
242
  coupling_map=coupling_map,
380
- # If the instruction map has custom gates, do not give as config, the information
381
- # will be added to the target with update_from_instruction_schedule_map
382
- inst_map=inst_map if inst_map and not inst_map.has_custom_gate() else None,
383
- backend_properties=backend_properties,
384
243
  instruction_durations=instruction_durations,
385
244
  concurrent_measurements=(
386
245
  backend.target.concurrent_measurements if backend is not None else None
@@ -389,48 +248,33 @@ def generate_preset_pass_manager(
389
248
  timing_constraints=timing_constraints,
390
249
  custom_name_mapping=name_mapping,
391
250
  )
392
-
393
- # Update target with custom gate information. Note that this is an exception to the priority
394
- # order (target > loose constraints), added to handle custom gates for scheduling passes.
395
- if target is not None and _given_inst_map and inst_map.has_custom_gate():
396
- target = copy.deepcopy(target)
397
- target.update_from_instruction_schedule_map(inst_map)
398
-
399
- if target is not None:
400
- if coupling_map is None:
401
- coupling_map = target.build_coupling_map()
402
- if basis_gates is None:
403
- basis_gates = target.operation_names
404
- if instruction_durations is None:
405
- instruction_durations = target.durations()
406
- if inst_map is None:
407
- inst_map = target._get_instruction_schedule_map()
408
- if timing_constraints is None:
409
- timing_constraints = target.timing_constraints()
410
- if backend_properties is None:
411
- with warnings.catch_warnings():
412
- # TODO this approach (target-to-properties) is going to be removed soon (1.3) in favor
413
- # of backend-to-target approach
414
- # https://github.com/Qiskit/qiskit/pull/12850
415
- warnings.filterwarnings(
416
- "ignore",
417
- category=DeprecationWarning,
418
- message=r".+qiskit\.transpiler\.target\.target_to_backend_properties.+",
419
- module="qiskit",
251
+ else:
252
+ target = _FakeTarget.from_configuration(
253
+ num_qubits=backend.num_qubits if backend is not None else None,
254
+ coupling_map=coupling_map,
255
+ dt=dt,
420
256
  )
421
- backend_properties = target_to_backend_properties(target)
257
+
258
+ # update loose constraints to populate pm options
259
+ if coupling_map is None:
260
+ coupling_map = target.build_coupling_map()
261
+ if basis_gates is None and len(target.operation_names) > 0:
262
+ basis_gates = target.operation_names
263
+ if instruction_durations is None:
264
+ instruction_durations = target.durations()
265
+ if timing_constraints is None:
266
+ timing_constraints = target.timing_constraints()
422
267
 
423
268
  # Parse non-target dependent pm options
424
269
  initial_layout = _parse_initial_layout(initial_layout)
425
270
  approximation_degree = _parse_approximation_degree(approximation_degree)
426
271
  seed_transpiler = _parse_seed_transpiler(seed_transpiler)
272
+
427
273
  pm_options = {
428
274
  "target": target,
429
275
  "basis_gates": basis_gates,
430
- "inst_map": inst_map,
431
276
  "coupling_map": coupling_map,
432
277
  "instruction_durations": instruction_durations,
433
- "backend_properties": backend_properties,
434
278
  "timing_constraints": timing_constraints,
435
279
  "layout_method": layout_method,
436
280
  "routing_method": routing_method,
@@ -447,47 +291,29 @@ def generate_preset_pass_manager(
447
291
  "qubits_initially_zero": qubits_initially_zero,
448
292
  }
449
293
 
450
- with warnings.catch_warnings():
451
- # inst_map and backend_properties are deprecated in the PassManagerConfig initializer
452
- warnings.filterwarnings(
453
- "ignore",
454
- category=DeprecationWarning,
455
- message=".*argument ``inst_map`` is deprecated as of Qiskit 1.3",
456
- )
457
- warnings.filterwarnings(
458
- "ignore",
459
- category=DeprecationWarning,
460
- message=".*argument ``backend_properties`` is deprecated as of Qiskit 1.4",
461
- module="qiskit",
462
- )
463
- if backend is not None:
464
- pm_options["_skip_target"] = _skip_target
465
- pm_config = PassManagerConfig.from_backend(backend, **pm_options)
466
- else:
467
- pm_config = PassManagerConfig(**pm_options)
468
- if optimization_level == 0:
469
- pm = level_0_pass_manager(pm_config)
470
- elif optimization_level == 1:
471
- pm = level_1_pass_manager(pm_config)
472
- elif optimization_level == 2:
473
- pm = level_2_pass_manager(pm_config)
474
- elif optimization_level == 3:
475
- pm = level_3_pass_manager(pm_config)
476
- else:
477
- raise ValueError(f"Invalid optimization level {optimization_level}")
294
+ if backend is not None:
295
+ pm_options["_skip_target"] = _skip_target
296
+ pm_config = PassManagerConfig.from_backend(backend, **pm_options)
297
+ else:
298
+ pm_config = PassManagerConfig(**pm_options)
299
+ if optimization_level == 0:
300
+ pm = level_0_pass_manager(pm_config)
301
+ elif optimization_level == 1:
302
+ pm = level_1_pass_manager(pm_config)
303
+ elif optimization_level == 2:
304
+ pm = level_2_pass_manager(pm_config)
305
+ elif optimization_level == 3:
306
+ pm = level_3_pass_manager(pm_config)
307
+ else:
308
+ raise ValueError(f"Invalid optimization level {optimization_level}")
478
309
  return pm
479
310
 
480
311
 
481
- def _parse_basis_gates(basis_gates, backend, inst_map, skip_target):
312
+ def _parse_basis_gates(basis_gates, backend):
482
313
  standard_gates = get_standard_gate_name_mapping()
483
314
  # Add control flow gates by default to basis set and name mapping
484
315
  default_gates = {"measure", "delay", "reset"}.union(CONTROL_FLOW_OP_NAMES)
485
- name_mapping = {
486
- "if_else": IfElseOp,
487
- "while_loop": WhileLoopOp,
488
- "for_loop": ForLoopOp,
489
- "switch_case": SwitchCaseOp,
490
- }
316
+ name_mapping = get_control_flow_name_mapping()
491
317
  try:
492
318
  instructions = set(basis_gates)
493
319
  for name in default_gates:
@@ -499,77 +325,38 @@ def _parse_basis_gates(basis_gates, backend, inst_map, skip_target):
499
325
  if backend is None:
500
326
  # Check for custom instructions
501
327
  if instructions is None:
502
- return None, name_mapping, skip_target
328
+ return None, name_mapping
503
329
 
504
330
  for inst in instructions:
505
331
  if inst not in standard_gates and inst not in default_gates:
506
- warnings.warn(
507
- category=DeprecationWarning,
508
- message=f"Providing non-standard gates ({inst}) through the ``basis_gates`` "
509
- "argument is deprecated for both ``transpile`` and ``generate_preset_pass_manager`` "
510
- "as of Qiskit 1.3.0. "
511
- "It will be removed in Qiskit 2.0. The ``target`` parameter should be used instead. "
332
+ raise ValueError(
333
+ f"Providing non-standard gates ({inst}) through the ``basis_gates`` "
334
+ "argument is not allowed. Use the ``target`` parameter instead. "
512
335
  "You can build a target instance using ``Target.from_configuration()`` and provide "
513
- "custom gate definitions with the ``custom_name_mapping`` argument.",
336
+ "custom gate definitions with the ``custom_name_mapping`` argument."
514
337
  )
515
- skip_target = True
516
- break
517
338
 
518
- return list(instructions), name_mapping, skip_target
339
+ return list(instructions), name_mapping
519
340
 
520
341
  instructions = instructions or backend.operation_names
521
342
  name_mapping.update(
522
343
  {name: backend.target.operation_from_name(name) for name in backend.operation_names}
523
344
  )
524
345
 
525
- # Check for custom instructions before removing calibrations
346
+ # Check for custom instructions
526
347
  for inst in instructions:
527
348
  if inst not in standard_gates and inst not in default_gates:
528
349
  if inst not in backend.operation_names:
529
- # do not raise warning when the custom instruction comes from the backend
350
+ # do not raise error when the custom instruction comes from the backend
530
351
  # (common case with BasicSimulator)
531
- warnings.warn(
532
- category=DeprecationWarning,
533
- message="Providing custom gates through the ``basis_gates`` argument is deprecated "
534
- "for both ``transpile`` and ``generate_preset_pass_manager`` as of Qiskit 1.3.0. "
535
- "It will be removed in Qiskit 2.0. The ``target`` parameter should be used instead. "
536
- "You can build a target instance using ``Target.from_configuration()`` and provide"
537
- "custom gate definitions with the ``custom_name_mapping`` argument.",
352
+ raise ValueError(
353
+ f"Providing non-standard gates ({inst}) through the ``basis_gates`` "
354
+ "argument is not allowed. Use the ``target`` parameter instead. "
355
+ "You can build a target instance using ``Target.from_configuration()`` and provide "
356
+ "custom gate definitions with the ``custom_name_mapping`` argument."
538
357
  )
539
- skip_target = True
540
- break
541
-
542
- # Remove calibrated instructions, as they will be added later from the instruction schedule map
543
- if inst_map is not None and not skip_target:
544
- for inst in inst_map.instructions:
545
- for qubit in inst_map.qubits_with_instruction(inst):
546
- entry = inst_map._get_calibration_entry(inst, qubit)
547
- if entry.user_provided and inst in instructions:
548
- instructions.remove(inst)
549
-
550
- return list(instructions) if instructions else None, name_mapping, skip_target
551
-
552
-
553
- def _parse_inst_map(inst_map, backend):
554
- # try getting inst_map from user, else backend
555
- if inst_map is None and backend is not None:
556
- inst_map = backend.target._get_instruction_schedule_map()
557
- return inst_map
558
-
559
-
560
- def _parse_backend_properties(backend_properties, backend):
561
- # try getting backend_props from user, else backend
562
- if backend_properties is None and backend is not None:
563
- with warnings.catch_warnings():
564
- # filter target_to_backend_properties warning
565
- warnings.filterwarnings(
566
- "ignore",
567
- category=DeprecationWarning,
568
- message=".*``qiskit.transpiler.target.target_to_backend_properties\\(\\)``.*",
569
- module="qiskit",
570
- )
571
- backend_properties = target_to_backend_properties(backend.target)
572
- return backend_properties
358
+
359
+ return list(instructions) if instructions else None, name_mapping
573
360
 
574
361
 
575
362
  def _parse_dt(dt, backend):
@@ -597,28 +384,20 @@ def _parse_coupling_map(coupling_map, backend):
597
384
  )
598
385
 
599
386
 
600
- def _parse_instruction_durations(backend, inst_durations, dt):
601
- """Create a list of ``InstructionDuration``s. If ``inst_durations`` is provided,
602
- the backend will be ignored, otherwise, the durations will be populated from the
603
- backend.
604
- """
387
+ def _parse_instruction_durations(backend, dt):
388
+ """Create a list of ``InstructionDuration``s populated from the backend."""
605
389
  final_durations = InstructionDurations()
606
- if not inst_durations:
607
- backend_durations = InstructionDurations()
608
- if backend is not None:
609
- backend_durations = backend.instruction_durations
610
- final_durations.update(backend_durations, dt or backend_durations.dt)
611
- else:
612
- final_durations.update(inst_durations, dt or getattr(inst_durations, "dt", None))
390
+ backend_durations = InstructionDurations()
391
+ if backend is not None:
392
+ backend_durations = backend.instruction_durations
393
+ final_durations.update(backend_durations, dt or backend_durations.dt)
613
394
  return final_durations
614
395
 
615
396
 
616
- def _parse_timing_constraints(backend, timing_constraints):
617
- if isinstance(timing_constraints, TimingConstraints):
618
- return timing_constraints
619
- if backend is None and timing_constraints is None:
397
+ def _parse_timing_constraints(backend):
398
+ if backend is None:
620
399
  timing_constraints = TimingConstraints()
621
- elif backend is not None:
400
+ else:
622
401
  timing_constraints = backend.target.timing_constraints()
623
402
  return timing_constraints
624
403
 
@@ -48,8 +48,8 @@ def level_0_pass_manager(pass_manager_config: PassManagerConfig) -> StagedPassMa
48
48
  initial_layout = pass_manager_config.initial_layout
49
49
  init_method = pass_manager_config.init_method or "default"
50
50
  layout_method = pass_manager_config.layout_method or "default"
51
- routing_method = pass_manager_config.routing_method or "sabre"
52
- translation_method = pass_manager_config.translation_method or "translator"
51
+ routing_method = pass_manager_config.routing_method or "default"
52
+ translation_method = pass_manager_config.translation_method or "default"
53
53
  optimization_method = pass_manager_config.optimization_method or "default"
54
54
  scheduling_method = pass_manager_config.scheduling_method or "default"
55
55
  target = pass_manager_config.target
@@ -73,14 +73,6 @@ def level_0_pass_manager(pass_manager_config: PassManagerConfig) -> StagedPassMa
73
73
  "translation", translation_method, pass_manager_config, optimization_level=0
74
74
  )
75
75
 
76
- if (coupling_map and not coupling_map.is_symmetric) or (
77
- target is not None and target.get_non_global_operation_names(strict_direction=True)
78
- ):
79
- pre_opt = common.generate_pre_op_passmanager(target, coupling_map)
80
- pre_opt += translation
81
- else:
82
- pre_opt = None
83
-
84
76
  sched = plugin_manager.get_passmanager_stage(
85
77
  "scheduling", scheduling_method, pass_manager_config, optimization_level=0
86
78
  )
@@ -107,7 +99,6 @@ def level_0_pass_manager(pass_manager_config: PassManagerConfig) -> StagedPassMa
107
99
  layout=layout,
108
100
  routing=routing,
109
101
  translation=translation,
110
- pre_optimization=pre_opt,
111
102
  optimization=optimization,
112
103
  scheduling=sched,
113
104
  )
@@ -49,11 +49,9 @@ def level_1_pass_manager(pass_manager_config: PassManagerConfig) -> StagedPassMa
49
49
  coupling_map = pass_manager_config.coupling_map
50
50
  initial_layout = pass_manager_config.initial_layout
51
51
  init_method = pass_manager_config.init_method or "default"
52
- # Unlike other presets, the layout and routing defaults aren't set here because they change
53
- # based on whether the input circuit has control flow.
54
52
  layout_method = pass_manager_config.layout_method or "default"
55
- routing_method = pass_manager_config.routing_method or "sabre"
56
- translation_method = pass_manager_config.translation_method or "translator"
53
+ routing_method = pass_manager_config.routing_method or "default"
54
+ translation_method = pass_manager_config.translation_method or "default"
57
55
  optimization_method = pass_manager_config.optimization_method or "default"
58
56
  scheduling_method = pass_manager_config.scheduling_method or "default"
59
57
  target = pass_manager_config.target
@@ -78,15 +76,6 @@ def level_1_pass_manager(pass_manager_config: PassManagerConfig) -> StagedPassMa
78
76
  "translation", translation_method, pass_manager_config, optimization_level=1
79
77
  )
80
78
 
81
- if (coupling_map and not coupling_map.is_symmetric) or (
82
- target is not None and target.get_non_global_operation_names(strict_direction=True)
83
- ):
84
- pre_optimization = common.generate_pre_op_passmanager(
85
- target, coupling_map, remove_reset_in_zero=False
86
- )
87
- else:
88
- pre_optimization = common.generate_pre_op_passmanager(remove_reset_in_zero=False)
89
-
90
79
  optimization = plugin_manager.get_passmanager_stage(
91
80
  "optimization", optimization_method, pass_manager_config, optimization_level=1
92
81
  )
@@ -114,7 +103,6 @@ def level_1_pass_manager(pass_manager_config: PassManagerConfig) -> StagedPassMa
114
103
  layout=layout,
115
104
  routing=routing,
116
105
  translation=translation,
117
- pre_optimization=pre_optimization,
118
106
  optimization=optimization,
119
107
  scheduling=sched,
120
108
  )