qiskit 1.4.2__cp39-abi3-macosx_11_0_arm64.whl → 2.0.0__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 (459) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +3 -9
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/circuit/__init__.py +35 -10
  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 +236 -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 +2 -141
  32. qiskit/circuit/instructionset.py +7 -54
  33. qiskit/circuit/library/__init__.py +469 -154
  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/graph_state.py +1 -0
  60. qiskit/circuit/library/hamiltonian_gate.py +1 -1
  61. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  62. qiskit/circuit/library/n_local/n_local.py +1 -1
  63. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  64. qiskit/circuit/library/overlap.py +2 -2
  65. qiskit/circuit/library/pauli_evolution.py +39 -24
  66. qiskit/circuit/library/phase_oracle.py +130 -51
  67. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  68. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  69. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  70. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  71. qiskit/circuit/library/standard_gates/h.py +4 -9
  72. qiskit/circuit/library/standard_gates/i.py +2 -2
  73. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  74. qiskit/circuit/library/standard_gates/p.py +15 -34
  75. qiskit/circuit/library/standard_gates/r.py +7 -10
  76. qiskit/circuit/library/standard_gates/rx.py +5 -15
  77. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  78. qiskit/circuit/library/standard_gates/ry.py +5 -17
  79. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  80. qiskit/circuit/library/standard_gates/rz.py +5 -17
  81. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  82. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  83. qiskit/circuit/library/standard_gates/s.py +6 -15
  84. qiskit/circuit/library/standard_gates/swap.py +4 -11
  85. qiskit/circuit/library/standard_gates/sx.py +7 -12
  86. qiskit/circuit/library/standard_gates/t.py +6 -7
  87. qiskit/circuit/library/standard_gates/u.py +2 -10
  88. qiskit/circuit/library/standard_gates/u1.py +5 -16
  89. qiskit/circuit/library/standard_gates/u2.py +2 -6
  90. qiskit/circuit/library/standard_gates/u3.py +3 -11
  91. qiskit/circuit/library/standard_gates/x.py +14 -62
  92. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  94. qiskit/circuit/library/standard_gates/y.py +4 -9
  95. qiskit/circuit/library/standard_gates/z.py +5 -15
  96. qiskit/circuit/measure.py +11 -2
  97. qiskit/circuit/parameterexpression.py +7 -1
  98. qiskit/circuit/quantumcircuit.py +890 -564
  99. qiskit/circuit/random/utils.py +12 -6
  100. qiskit/circuit/reset.py +5 -2
  101. qiskit/circuit/singleton.py +5 -11
  102. qiskit/circuit/store.py +0 -8
  103. qiskit/compiler/__init__.py +1 -7
  104. qiskit/compiler/transpiler.py +38 -196
  105. qiskit/converters/circuit_to_dag.py +6 -4
  106. qiskit/converters/circuit_to_dagdependency.py +0 -2
  107. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  108. qiskit/converters/circuit_to_gate.py +1 -1
  109. qiskit/converters/circuit_to_instruction.py +16 -29
  110. qiskit/converters/dag_to_circuit.py +7 -8
  111. qiskit/converters/dag_to_dagdependency.py +0 -1
  112. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  113. qiskit/converters/dagdependency_to_circuit.py +0 -6
  114. qiskit/converters/dagdependency_to_dag.py +0 -6
  115. qiskit/dagcircuit/collect_blocks.py +32 -20
  116. qiskit/dagcircuit/dagdependency.py +3 -37
  117. qiskit/dagcircuit/dagdependency_v2.py +5 -82
  118. qiskit/dagcircuit/dagnode.py +14 -2
  119. qiskit/passmanager/__init__.py +24 -6
  120. qiskit/passmanager/passmanager.py +26 -24
  121. qiskit/primitives/__init__.py +44 -35
  122. qiskit/primitives/backend_estimator_v2.py +102 -23
  123. qiskit/primitives/backend_sampler_v2.py +5 -20
  124. qiskit/primitives/base/__init__.py +4 -4
  125. qiskit/primitives/base/base_estimator.py +77 -82
  126. qiskit/primitives/base/base_primitive_job.py +2 -2
  127. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  128. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  129. qiskit/primitives/base/base_sampler.py +52 -60
  130. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  131. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  132. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  133. qiskit/primitives/containers/bindings_array.py +3 -1
  134. qiskit/primitives/containers/bit_array.py +23 -0
  135. qiskit/primitives/containers/data_bin.py +3 -1
  136. qiskit/primitives/containers/observables_array.py +19 -2
  137. qiskit/primitives/statevector_sampler.py +6 -8
  138. qiskit/primitives/utils.py +14 -189
  139. qiskit/providers/__init__.py +4 -130
  140. qiskit/providers/backend.py +11 -314
  141. qiskit/providers/basic_provider/__init__.py +3 -1
  142. qiskit/providers/basic_provider/basic_provider.py +29 -9
  143. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  144. qiskit/providers/exceptions.py +0 -33
  145. qiskit/providers/fake_provider/__init__.py +0 -37
  146. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  147. qiskit/qasm2/__init__.py +21 -6
  148. qiskit/qasm2/export.py +2 -10
  149. qiskit/qasm2/parse.py +11 -25
  150. qiskit/qasm3/__init__.py +5 -1
  151. qiskit/qasm3/ast.py +44 -0
  152. qiskit/qasm3/exporter.py +65 -27
  153. qiskit/qasm3/printer.py +35 -4
  154. qiskit/qpy/__init__.py +162 -19
  155. qiskit/qpy/binary_io/__init__.py +0 -1
  156. qiskit/qpy/binary_io/circuits.py +98 -130
  157. qiskit/qpy/binary_io/schedules.py +69 -439
  158. qiskit/qpy/binary_io/value.py +154 -31
  159. qiskit/qpy/common.py +10 -7
  160. qiskit/qpy/formats.py +41 -0
  161. qiskit/qpy/interface.py +34 -81
  162. qiskit/qpy/type_keys.py +58 -221
  163. qiskit/quantum_info/analysis/distance.py +3 -1
  164. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  165. qiskit/quantum_info/operators/operator.py +6 -2
  166. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  167. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  168. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  169. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  170. qiskit/quantum_info/states/densitymatrix.py +16 -6
  171. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  172. qiskit/quantum_info/states/statevector.py +16 -6
  173. qiskit/result/__init__.py +5 -17
  174. qiskit/result/models.py +18 -11
  175. qiskit/result/result.py +38 -134
  176. qiskit/result/sampled_expval.py +1 -2
  177. qiskit/result/utils.py +3 -4
  178. qiskit/synthesis/__init__.py +21 -1
  179. qiskit/synthesis/arithmetic/__init__.py +3 -1
  180. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  181. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  182. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  183. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  184. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  185. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  186. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  187. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  188. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  189. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  190. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  191. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  192. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -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 +4 -40
  209. qiskit/transpiler/passes/basis/basis_translator.py +5 -4
  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 +4 -0
  214. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  215. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +3 -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 +2 -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 +32 -4
  245. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +25 -63
  246. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +12 -4
  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 +134 -62
  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 +107 -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 +78 -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/counts_visualization.py +4 -0
  287. qiskit/visualization/dag_visualization.py +2 -1
  288. qiskit/visualization/gate_map.py +39 -154
  289. qiskit/visualization/library.py +4 -1
  290. qiskit/visualization/pass_manager_visualization.py +6 -2
  291. qiskit/visualization/state_visualization.py +19 -2
  292. qiskit/visualization/timeline/core.py +19 -13
  293. qiskit/visualization/timeline/interface.py +19 -18
  294. qiskit/visualization/timeline/plotters/matplotlib.py +4 -1
  295. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/METADATA +4 -3
  296. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/RECORD +300 -447
  297. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/WHEEL +2 -1
  298. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/entry_points.txt +8 -2
  299. qiskit/assembler/__init__.py +0 -42
  300. qiskit/assembler/assemble_circuits.py +0 -451
  301. qiskit/assembler/assemble_schedules.py +0 -367
  302. qiskit/assembler/disassemble.py +0 -310
  303. qiskit/assembler/run_config.py +0 -77
  304. qiskit/circuit/bit.py +0 -106
  305. qiskit/circuit/classicalfunction/__init__.py +0 -152
  306. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  307. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  308. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  309. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  310. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  311. qiskit/circuit/classicalfunction/types.py +0 -18
  312. qiskit/circuit/classicalfunction/utils.py +0 -91
  313. qiskit/circuit/classicalregister.py +0 -57
  314. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  315. qiskit/circuit/quantumregister.py +0 -75
  316. qiskit/circuit/register.py +0 -246
  317. qiskit/compiler/assembler.py +0 -689
  318. qiskit/compiler/scheduler.py +0 -109
  319. qiskit/compiler/sequencer.py +0 -71
  320. qiskit/primitives/backend_estimator.py +0 -486
  321. qiskit/primitives/backend_sampler.py +0 -222
  322. qiskit/primitives/estimator.py +0 -172
  323. qiskit/primitives/sampler.py +0 -162
  324. qiskit/providers/backend_compat.py +0 -507
  325. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  326. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  327. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  328. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  329. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  330. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  332. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  333. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  335. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  336. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  337. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  338. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  339. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  340. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  341. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  342. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  343. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  344. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  345. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  346. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  347. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  348. qiskit/providers/fake_provider/fake_1q.py +0 -91
  349. qiskit/providers/fake_provider/fake_backend.py +0 -165
  350. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  351. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  352. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  353. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  354. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  355. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  356. qiskit/providers/models/__init__.py +0 -89
  357. qiskit/providers/models/backendconfiguration.py +0 -1040
  358. qiskit/providers/models/backendproperties.py +0 -535
  359. qiskit/providers/models/backendstatus.py +0 -104
  360. qiskit/providers/models/jobstatus.py +0 -77
  361. qiskit/providers/models/pulsedefaults.py +0 -305
  362. qiskit/providers/provider.py +0 -95
  363. qiskit/pulse/__init__.py +0 -158
  364. qiskit/pulse/builder.py +0 -2262
  365. qiskit/pulse/calibration_entries.py +0 -381
  366. qiskit/pulse/channels.py +0 -227
  367. qiskit/pulse/configuration.py +0 -245
  368. qiskit/pulse/exceptions.py +0 -45
  369. qiskit/pulse/filters.py +0 -309
  370. qiskit/pulse/instruction_schedule_map.py +0 -424
  371. qiskit/pulse/instructions/__init__.py +0 -67
  372. qiskit/pulse/instructions/acquire.py +0 -150
  373. qiskit/pulse/instructions/delay.py +0 -71
  374. qiskit/pulse/instructions/directives.py +0 -154
  375. qiskit/pulse/instructions/frequency.py +0 -135
  376. qiskit/pulse/instructions/instruction.py +0 -270
  377. qiskit/pulse/instructions/phase.py +0 -152
  378. qiskit/pulse/instructions/play.py +0 -99
  379. qiskit/pulse/instructions/reference.py +0 -100
  380. qiskit/pulse/instructions/snapshot.py +0 -82
  381. qiskit/pulse/library/__init__.py +0 -97
  382. qiskit/pulse/library/continuous.py +0 -430
  383. qiskit/pulse/library/pulse.py +0 -148
  384. qiskit/pulse/library/samplers/__init__.py +0 -15
  385. qiskit/pulse/library/samplers/decorators.py +0 -295
  386. qiskit/pulse/library/samplers/strategies.py +0 -71
  387. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  388. qiskit/pulse/library/waveform.py +0 -136
  389. qiskit/pulse/macros.py +0 -262
  390. qiskit/pulse/parameter_manager.py +0 -445
  391. qiskit/pulse/parser.py +0 -314
  392. qiskit/pulse/reference_manager.py +0 -58
  393. qiskit/pulse/schedule.py +0 -1854
  394. qiskit/pulse/transforms/__init__.py +0 -106
  395. qiskit/pulse/transforms/alignments.py +0 -406
  396. qiskit/pulse/transforms/base_transforms.py +0 -71
  397. qiskit/pulse/transforms/canonicalization.py +0 -498
  398. qiskit/pulse/transforms/dag.py +0 -122
  399. qiskit/pulse/utils.py +0 -149
  400. qiskit/qobj/__init__.py +0 -75
  401. qiskit/qobj/common.py +0 -81
  402. qiskit/qobj/converters/__init__.py +0 -18
  403. qiskit/qobj/converters/lo_config.py +0 -177
  404. qiskit/qobj/converters/pulse_instruction.py +0 -897
  405. qiskit/qobj/pulse_qobj.py +0 -709
  406. qiskit/qobj/qasm_qobj.py +0 -708
  407. qiskit/qobj/utils.py +0 -46
  408. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  409. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  410. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  411. qiskit/result/mitigation/utils.py +0 -217
  412. qiskit/scheduler/__init__.py +0 -40
  413. qiskit/scheduler/config.py +0 -37
  414. qiskit/scheduler/lowering.py +0 -187
  415. qiskit/scheduler/methods/__init__.py +0 -15
  416. qiskit/scheduler/methods/basic.py +0 -140
  417. qiskit/scheduler/schedule_circuit.py +0 -69
  418. qiskit/scheduler/sequence.py +0 -104
  419. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  420. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  421. qiskit/transpiler/passes/calibration/builders.py +0 -20
  422. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  423. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  424. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  425. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  426. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  427. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  428. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  429. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  430. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  431. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  432. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  433. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  434. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  435. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  436. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  437. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  438. qiskit/utils/deprecate_pulse.py +0 -119
  439. qiskit/utils/multiprocessing.py +0 -56
  440. qiskit/visualization/pulse_v2/__init__.py +0 -21
  441. qiskit/visualization/pulse_v2/core.py +0 -901
  442. qiskit/visualization/pulse_v2/device_info.py +0 -173
  443. qiskit/visualization/pulse_v2/drawings.py +0 -253
  444. qiskit/visualization/pulse_v2/events.py +0 -254
  445. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  446. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  447. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  448. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  449. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  450. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  451. qiskit/visualization/pulse_v2/interface.py +0 -459
  452. qiskit/visualization/pulse_v2/layouts.py +0 -387
  453. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  454. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  455. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  456. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  457. qiskit/visualization/pulse_v2/types.py +0 -242
  458. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
  459. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/top_level.txt +0 -0
@@ -13,30 +13,20 @@
13
13
  """
14
14
  Preset pass manager generation function
15
15
  """
16
-
17
16
  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,55 @@ 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
+ # If the only loose constraint is dt => use backend target and modify dt
204
+ _adjust_dt = backend is not None and dt is not None
205
+
206
+ # Warn about inconsistencies in backend + loose constraints path (dt shouldn't be a problem)
207
+ if backend is not None and (coupling_map is not None or basis_gates is not None):
296
208
  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,
209
+ "Providing `coupling_map` and/or `basis_gates` along with `backend` is not "
210
+ "recommended, as this will invalidate the backend's gate durations and error rates.",
211
+ category=UserWarning,
302
212
  stacklevel=2,
303
213
  )
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
214
 
325
215
  # Resolve loose constraints case-by-case against backend constraints.
326
216
  # The order of priority is loose constraints > backend.
327
217
  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
- )
218
+ instruction_durations = _parse_instruction_durations(backend, dt)
219
+ timing_constraints = _parse_timing_constraints(backend)
336
220
  coupling_map = _parse_coupling_map(coupling_map, backend)
221
+ basis_gates, name_mapping = _parse_basis_gates(basis_gates, backend)
222
+
223
+ # Check if coupling map has been provided (either standalone or through backend)
224
+ # with user-defined basis_gates, and whether these have 3q or more.
225
+ if coupling_map is not None and basis_gates is not None:
226
+ for gate in OVER_3Q_GATES:
227
+ if gate in basis_gates:
228
+ raise ValueError(
229
+ f"Gates with 3 or more qubits ({gate}) in `basis_gates` or `backend` are "
230
+ "incompatible with a custom `coupling_map`. To include 3-qubit or larger "
231
+ " gates in the transpilation basis, provide a custom `target` instead."
232
+ )
337
233
 
338
234
  if target is None:
339
235
  if backend is not None and _no_loose_constraints:
340
236
  # If a backend is specified without loose constraints, use its target directly.
341
237
  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
- )
238
+ elif _adjust_dt:
239
+ # If a backend is specified with loose dt, use its target and adjust the dt value.
240
+ target = copy.deepcopy(backend.target)
241
+ target.dt = dt
242
+ else:
243
+ if basis_gates is not None:
375
244
  # Build target from constraints.
376
245
  target = Target.from_configuration(
377
246
  basis_gates=basis_gates,
378
247
  num_qubits=backend.num_qubits if backend is not None else None,
379
248
  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
249
  instruction_durations=instruction_durations,
385
250
  concurrent_measurements=(
386
251
  backend.target.concurrent_measurements if backend is not None else None
@@ -389,48 +254,33 @@ def generate_preset_pass_manager(
389
254
  timing_constraints=timing_constraints,
390
255
  custom_name_mapping=name_mapping,
391
256
  )
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",
257
+ else:
258
+ target = _FakeTarget.from_configuration(
259
+ num_qubits=backend.num_qubits if backend is not None else None,
260
+ coupling_map=coupling_map,
261
+ dt=dt,
420
262
  )
421
- backend_properties = target_to_backend_properties(target)
263
+
264
+ # Update loose constraints to populate pm options
265
+ if coupling_map is None:
266
+ coupling_map = target.build_coupling_map()
267
+ if basis_gates is None and len(target.operation_names) > 0:
268
+ basis_gates = target.operation_names
269
+ if instruction_durations is None:
270
+ instruction_durations = target.durations()
271
+ if timing_constraints is None:
272
+ timing_constraints = target.timing_constraints()
422
273
 
423
274
  # Parse non-target dependent pm options
424
275
  initial_layout = _parse_initial_layout(initial_layout)
425
276
  approximation_degree = _parse_approximation_degree(approximation_degree)
426
277
  seed_transpiler = _parse_seed_transpiler(seed_transpiler)
278
+
427
279
  pm_options = {
428
280
  "target": target,
429
281
  "basis_gates": basis_gates,
430
- "inst_map": inst_map,
431
282
  "coupling_map": coupling_map,
432
283
  "instruction_durations": instruction_durations,
433
- "backend_properties": backend_properties,
434
284
  "timing_constraints": timing_constraints,
435
285
  "layout_method": layout_method,
436
286
  "routing_method": routing_method,
@@ -447,47 +297,29 @@ def generate_preset_pass_manager(
447
297
  "qubits_initially_zero": qubits_initially_zero,
448
298
  }
449
299
 
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}")
300
+ if backend is not None:
301
+ pm_options["_skip_target"] = _skip_target
302
+ pm_config = PassManagerConfig.from_backend(backend, **pm_options)
303
+ else:
304
+ pm_config = PassManagerConfig(**pm_options)
305
+ if optimization_level == 0:
306
+ pm = level_0_pass_manager(pm_config)
307
+ elif optimization_level == 1:
308
+ pm = level_1_pass_manager(pm_config)
309
+ elif optimization_level == 2:
310
+ pm = level_2_pass_manager(pm_config)
311
+ elif optimization_level == 3:
312
+ pm = level_3_pass_manager(pm_config)
313
+ else:
314
+ raise ValueError(f"Invalid optimization level {optimization_level}")
478
315
  return pm
479
316
 
480
317
 
481
- def _parse_basis_gates(basis_gates, backend, inst_map, skip_target):
318
+ def _parse_basis_gates(basis_gates, backend):
482
319
  standard_gates = get_standard_gate_name_mapping()
483
320
  # Add control flow gates by default to basis set and name mapping
484
321
  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
- }
322
+ name_mapping = get_control_flow_name_mapping()
491
323
  try:
492
324
  instructions = set(basis_gates)
493
325
  for name in default_gates:
@@ -499,77 +331,38 @@ def _parse_basis_gates(basis_gates, backend, inst_map, skip_target):
499
331
  if backend is None:
500
332
  # Check for custom instructions
501
333
  if instructions is None:
502
- return None, name_mapping, skip_target
334
+ return None, name_mapping
503
335
 
504
336
  for inst in instructions:
505
337
  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. "
338
+ raise ValueError(
339
+ f"Providing non-standard gates ({inst}) through the ``basis_gates`` "
340
+ "argument is not allowed. Use the ``target`` parameter instead. "
512
341
  "You can build a target instance using ``Target.from_configuration()`` and provide "
513
- "custom gate definitions with the ``custom_name_mapping`` argument.",
342
+ "custom gate definitions with the ``custom_name_mapping`` argument."
514
343
  )
515
- skip_target = True
516
- break
517
344
 
518
- return list(instructions), name_mapping, skip_target
345
+ return list(instructions), name_mapping
519
346
 
520
347
  instructions = instructions or backend.operation_names
521
348
  name_mapping.update(
522
349
  {name: backend.target.operation_from_name(name) for name in backend.operation_names}
523
350
  )
524
351
 
525
- # Check for custom instructions before removing calibrations
352
+ # Check for custom instructions
526
353
  for inst in instructions:
527
354
  if inst not in standard_gates and inst not in default_gates:
528
355
  if inst not in backend.operation_names:
529
- # do not raise warning when the custom instruction comes from the backend
356
+ # do not raise error when the custom instruction comes from the backend
530
357
  # (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.",
358
+ raise ValueError(
359
+ f"Providing non-standard gates ({inst}) through the ``basis_gates`` "
360
+ "argument is not allowed. Use the ``target`` parameter instead. "
361
+ "You can build a target instance using ``Target.from_configuration()`` and provide "
362
+ "custom gate definitions with the ``custom_name_mapping`` argument."
538
363
  )
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
364
+
365
+ return list(instructions) if instructions else None, name_mapping
573
366
 
574
367
 
575
368
  def _parse_dt(dt, backend):
@@ -597,28 +390,20 @@ def _parse_coupling_map(coupling_map, backend):
597
390
  )
598
391
 
599
392
 
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
- """
393
+ def _parse_instruction_durations(backend, dt):
394
+ """Create a list of ``InstructionDuration``s populated from the backend."""
605
395
  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))
396
+ backend_durations = InstructionDurations()
397
+ if backend is not None:
398
+ backend_durations = backend.instruction_durations
399
+ final_durations.update(backend_durations, dt or backend_durations.dt)
613
400
  return final_durations
614
401
 
615
402
 
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:
403
+ def _parse_timing_constraints(backend):
404
+ if backend is None:
620
405
  timing_constraints = TimingConstraints()
621
- elif backend is not None:
406
+ else:
622
407
  timing_constraints = backend.target.timing_constraints()
623
408
  return timing_constraints
624
409
 
@@ -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
  )