qiskit 1.4.1__cp39-abi3-win_amd64.whl → 2.0.0rc1__cp39-abi3-win_amd64.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.pyd +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 +2 -141
  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 +154 -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 +4 -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 +18 -12
  291. qiskit/visualization/timeline/interface.py +19 -18
  292. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/METADATA +2 -2
  293. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/RECORD +297 -444
  294. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/WHEEL +1 -1
  295. {qiskit-1.4.1.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.1.dist-info → qiskit-2.0.0rc1.dist-info}/LICENSE.txt +0 -0
  456. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -20,12 +20,11 @@ from a backend
20
20
  from __future__ import annotations
21
21
 
22
22
  import itertools
23
- import warnings
24
23
 
25
24
  from typing import Optional, List, Any
26
25
  from collections.abc import Mapping
27
- import datetime
28
26
  import io
27
+ import copy
29
28
  import logging
30
29
  import inspect
31
30
 
@@ -37,28 +36,16 @@ from qiskit._accelerate.target import (
37
36
  BaseInstructionProperties,
38
37
  )
39
38
 
40
- from qiskit.circuit.parameter import Parameter
41
- from qiskit.circuit.parameterexpression import ParameterValueType
42
- from qiskit.circuit.gate import Gate
43
39
  from qiskit.circuit.library.standard_gates import get_standard_gate_name_mapping
44
- from qiskit.pulse.instruction_schedule_map import InstructionScheduleMap
45
- from qiskit.pulse.calibration_entries import CalibrationEntry, ScheduleDef
46
- from qiskit.pulse.schedule import Schedule, ScheduleBlock
40
+ from qiskit.circuit.duration import duration_in_dt
47
41
  from qiskit.transpiler.coupling import CouplingMap
48
42
  from qiskit.transpiler.exceptions import TranspilerError
49
43
  from qiskit.transpiler.instruction_durations import InstructionDurations
50
44
  from qiskit.transpiler.timing_constraints import TimingConstraints
51
- from qiskit.providers.exceptions import BackendPropertyError
52
- from qiskit.pulse.exceptions import PulseError, UnassignedDurationError
53
- from qiskit.exceptions import QiskitError
54
45
 
55
46
  # import QubitProperties here to provide convenience alias for building a
56
47
  # full target
57
48
  from qiskit.providers.backend import QubitProperties # pylint: disable=unused-import
58
- from qiskit.providers.models.backendproperties import BackendProperties
59
- from qiskit.utils import deprecate_func, deprecate_arg
60
- from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency, deprecate_pulse_arg
61
-
62
49
 
63
50
  logger = logging.getLogger(__name__)
64
51
 
@@ -73,10 +60,6 @@ class InstructionProperties(BaseInstructionProperties):
73
60
  custom attributes for those custom/additional properties by the backend.
74
61
  """
75
62
 
76
- __slots__ = [
77
- "_calibration",
78
- ]
79
-
80
63
  def __new__( # pylint: disable=keyword-arg-before-vararg
81
64
  cls,
82
65
  duration=None, # pylint: disable=keyword-arg-before-vararg
@@ -88,12 +71,10 @@ class InstructionProperties(BaseInstructionProperties):
88
71
  cls, duration, error
89
72
  )
90
73
 
91
- @deprecate_pulse_arg("calibration", predicate=lambda cals: cals is not None)
92
74
  def __init__(
93
75
  self,
94
76
  duration: float | None = None, # pylint: disable=unused-argument
95
77
  error: float | None = None, # pylint: disable=unused-argument
96
- calibration: Schedule | ScheduleBlock | CalibrationEntry | None = None,
97
78
  ):
98
79
  """Create a new ``InstructionProperties`` object
99
80
 
@@ -102,79 +83,11 @@ class InstructionProperties(BaseInstructionProperties):
102
83
  specified set of qubits
103
84
  error: The average error rate for the instruction on the specified
104
85
  set of qubits.
105
- calibration: DEPRECATED. The pulse representation of the instruction.
106
86
  """
107
87
  super().__init__()
108
- self._calibration: CalibrationEntry | None = None
109
- self._calibration_prop = calibration
110
-
111
- @property
112
- @deprecate_pulse_dependency(is_property=True)
113
- def calibration(self):
114
- """The pulse representation of the instruction.
115
-
116
- .. note::
117
-
118
- This attribute always returns a Qiskit pulse program, but it is internally
119
- wrapped by the :class:`.CalibrationEntry` to manage unbound parameters
120
- and to uniformly handle different data representation,
121
- for example, un-parsed Pulse Qobj JSON that a backend provider may provide.
122
-
123
- This value can be overridden through the property setter in following manner.
124
- When you set either :class:`.Schedule` or :class:`.ScheduleBlock` this is
125
- always treated as a user-defined (custom) calibration and
126
- the transpiler may automatically attach the calibration data to the output circuit.
127
- This calibration data may appear in the wire format as an inline calibration,
128
- which may further update the backend standard instruction set architecture.
129
-
130
- If you are a backend provider who provides a default calibration data
131
- that is not needed to be attached to the transpiled quantum circuit,
132
- you can directly set :class:`.CalibrationEntry` instance to this attribute,
133
- in which you should set :code:`user_provided=False` when you define
134
- calibration data for the entry. End users can still intentionally utilize
135
- the calibration data, for example, to run pulse-level simulation of the circuit.
136
- However, such entry doesn't appear in the wire format, and backend must
137
- use own definition to compile the circuit down to the execution format.
138
-
139
- """
140
- return self._calibration_prop
141
-
142
- @calibration.setter
143
- @deprecate_pulse_dependency(is_property=True)
144
- def calibration(self, calibration: Schedule | ScheduleBlock | CalibrationEntry):
145
- self._calibration_prop = calibration
146
-
147
- @property
148
- def _calibration_prop(self):
149
- if self._calibration is None:
150
- return None
151
- with warnings.catch_warnings():
152
- warnings.simplefilter(action="ignore", category=DeprecationWarning)
153
- # Clean this alternative path from deprecation warning emitted by `get_schedule`
154
- return self._calibration.get_schedule()
155
-
156
- @_calibration_prop.setter
157
- def _calibration_prop(self, calibration: Schedule | ScheduleBlock | CalibrationEntry):
158
- if isinstance(calibration, (Schedule, ScheduleBlock)):
159
- new_entry = ScheduleDef()
160
- new_entry.define(calibration, user_provided=True)
161
- else:
162
- new_entry = calibration
163
- self._calibration = new_entry
164
88
 
165
89
  def __repr__(self):
166
- return (
167
- f"InstructionProperties(duration={self.duration}, error={self.error}"
168
- f", calibration={self._calibration})"
169
- )
170
-
171
- def __getstate__(self) -> tuple:
172
- return (super().__getstate__(), self._calibration_prop, self._calibration)
173
-
174
- def __setstate__(self, state: tuple):
175
- super().__setstate__(state[0])
176
- self._calibration_prop = state[1]
177
- self._calibration = state[2]
90
+ return f"InstructionProperties(duration={self.duration}, error={self.error})"
178
91
 
179
92
 
180
93
  class Target(BaseTarget):
@@ -463,125 +376,6 @@ class Target(BaseTarget):
463
376
  self._instruction_durations = None
464
377
  self._instruction_schedule_map = None
465
378
 
466
- @deprecate_pulse_dependency
467
- def update_from_instruction_schedule_map(self, inst_map, inst_name_map=None, error_dict=None):
468
- """Update the target from an instruction schedule map.
469
-
470
- If the input instruction schedule map contains new instructions not in
471
- the target they will be added. However, if it contains additional qargs
472
- for an existing instruction in the target it will error.
473
-
474
- Args:
475
- inst_map (InstructionScheduleMap): The instruction
476
- inst_name_map (dict): An optional dictionary that maps any
477
- instruction name in ``inst_map`` to an instruction object.
478
- If not provided, instruction is pulled from the standard Qiskit gates,
479
- and finally custom gate instance is created with schedule name.
480
- error_dict (dict): A dictionary of errors of the form::
481
-
482
- {gate_name: {qarg: error}}
483
-
484
- for example::
485
-
486
- {'rx': {(0, ): 1.4e-4, (1, ): 1.2e-4}}
487
-
488
- For each entry in the ``inst_map`` if ``error_dict`` is defined
489
- a when updating the ``Target`` the error value will be pulled from
490
- this dictionary. If one is not found in ``error_dict`` then
491
- ``None`` will be used.
492
- """
493
- get_calibration = getattr(inst_map, "_get_calibration_entry")
494
-
495
- # Expand name mapping with custom gate name provided by user.
496
- qiskit_inst_name_map = get_standard_gate_name_mapping()
497
- if inst_name_map is not None:
498
- qiskit_inst_name_map.update(inst_name_map)
499
-
500
- for inst_name in inst_map.instructions:
501
- # Prepare dictionary of instruction properties
502
- out_props = {}
503
- for qargs in inst_map.qubits_with_instruction(inst_name):
504
- try:
505
- qargs = tuple(qargs)
506
- except TypeError:
507
- qargs = (qargs,)
508
- try:
509
- props = self._gate_map[inst_name][qargs]
510
- except (KeyError, TypeError):
511
- props = None
512
-
513
- entry = get_calibration(inst_name, qargs)
514
- if entry.user_provided and getattr(props, "_calibration", None) != entry:
515
- # It only copies user-provided calibration from the inst map.
516
- # Backend defined entry must already exist in Target.
517
- if self.dt is not None:
518
- try:
519
- duration = entry.get_schedule().duration * self.dt
520
- except UnassignedDurationError:
521
- # duration of schedule is parameterized
522
- duration = None
523
- else:
524
- duration = None
525
- props = InstructionProperties(
526
- duration=duration,
527
- calibration=entry,
528
- )
529
- else:
530
- if props is None:
531
- # Edge case. Calibration is backend defined, but this is not
532
- # registered in the backend target. Ignore this entry.
533
- continue
534
- try:
535
- # Update gate error if provided.
536
- props.error = error_dict[inst_name][qargs]
537
- except (KeyError, TypeError):
538
- pass
539
- out_props[qargs] = props
540
- if not out_props:
541
- continue
542
- # Prepare Qiskit Gate object assigned to the entries
543
- if inst_name not in self._gate_map:
544
- # Entry not found: Add new instruction
545
- if inst_name in qiskit_inst_name_map:
546
- # Remove qargs with length that doesn't match with instruction qubit number
547
- inst_obj = qiskit_inst_name_map[inst_name]
548
- normalized_props = {}
549
- for qargs, prop in out_props.items():
550
- if len(qargs) != inst_obj.num_qubits:
551
- continue
552
- normalized_props[qargs] = prop
553
- self.add_instruction(inst_obj, normalized_props, name=inst_name)
554
- else:
555
- # Check qubit length parameter name uniformity.
556
- qlen = set()
557
- param_names = set()
558
- for qargs in inst_map.qubits_with_instruction(inst_name):
559
- if isinstance(qargs, int):
560
- qargs = (qargs,)
561
- qlen.add(len(qargs))
562
- cal = getattr(out_props[tuple(qargs)], "_calibration")
563
- param_names.add(tuple(cal.get_signature().parameters.keys()))
564
- if len(qlen) > 1 or len(param_names) > 1:
565
- raise QiskitError(
566
- f"Schedules for {inst_name} are defined non-uniformly for "
567
- f"multiple qubit lengths {qlen}, "
568
- f"or different parameter names {param_names}. "
569
- "Provide these schedules with inst_name_map or define them with "
570
- "different names for different gate parameters."
571
- )
572
- inst_obj = Gate(
573
- name=inst_name,
574
- num_qubits=next(iter(qlen)),
575
- params=list(map(Parameter, next(iter(param_names)))),
576
- )
577
- self.add_instruction(inst_obj, out_props, name=inst_name)
578
- else:
579
- # Entry found: Update "existing" instructions.
580
- for qargs, prop in out_props.items():
581
- if qargs not in self._gate_map[inst_name]:
582
- continue
583
- self.update_instruction_properties(inst_name, qargs, prop)
584
-
585
379
  def qargs_for_operation_name(self, operation):
586
380
  """Get the qargs for a given operation name
587
381
 
@@ -621,127 +415,6 @@ class Target(BaseTarget):
621
415
  self.granularity, self.min_length, self.pulse_alignment, self.acquire_alignment
622
416
  )
623
417
 
624
- @deprecate_pulse_dependency
625
- def instruction_schedule_map(self):
626
- """Return an :class:`~qiskit.pulse.InstructionScheduleMap` for the
627
- instructions in the target with a pulse schedule defined.
628
-
629
- Returns:
630
- InstructionScheduleMap: The instruction schedule map for the
631
- instructions in this target with a pulse schedule defined.
632
- """
633
- return self._get_instruction_schedule_map()
634
-
635
- def _get_instruction_schedule_map(self):
636
- if self._instruction_schedule_map is not None:
637
- return self._instruction_schedule_map
638
- with warnings.catch_warnings():
639
- warnings.simplefilter(action="ignore", category=DeprecationWarning)
640
- # `InstructionScheduleMap` is deprecated in Qiskit 1.3 but we want this alternative
641
- # path to be clean of deprecation warnings
642
- out_inst_schedule_map = InstructionScheduleMap()
643
-
644
- for instruction, qargs in self._gate_map.items():
645
- for qarg, properties in qargs.items():
646
- # Directly getting CalibrationEntry not to invoke .get_schedule().
647
- # This keeps PulseQobjDef un-parsed.
648
- cal_entry = getattr(properties, "_calibration", None)
649
- if cal_entry is not None:
650
- # Use fast-path to add entries to the inst map.
651
- out_inst_schedule_map._add(instruction, qarg, cal_entry)
652
- self._instruction_schedule_map = out_inst_schedule_map
653
- return out_inst_schedule_map
654
-
655
- @deprecate_pulse_dependency
656
- def has_calibration(
657
- self,
658
- operation_name: str,
659
- qargs: tuple[int, ...],
660
- operation_params: list[float] | float | None = None,
661
- ) -> bool:
662
- """Return whether the instruction (operation + operation_params + qubits) defines
663
- a calibration.
664
-
665
- Args:
666
- operation_name: The name of the operation for the instruction.
667
- qargs: The qubit indices for the instruction.
668
- operation_params: The parameters for the Instruction. In case
669
- of multi-parameter gates, the order of parameters in the tuple
670
- must match the order of the gate parameters.
671
-
672
- Returns:
673
- Returns ``True`` if the calibration is supported and ``False`` if it isn't.
674
- """
675
- return self._has_calibration(operation_name, qargs, operation_params)
676
-
677
- def _has_calibration(
678
- self,
679
- operation_name: str,
680
- qargs: tuple[int, ...],
681
- operation_params: list[float] | float | None = None,
682
- ) -> bool:
683
- if operation_params is not None and not isinstance(operation_params, list):
684
- operation_params = [operation_params]
685
-
686
- if operation_name not in self._gate_map:
687
- return False
688
-
689
- if qargs not in self._gate_map[operation_name]:
690
- return False
691
-
692
- if operation_params is not None and not (
693
- operation_params == self._gate_name_map[operation_name].params
694
- ):
695
- return False
696
-
697
- return getattr(self._gate_map[operation_name][qargs], "_calibration", None) is not None
698
-
699
- @deprecate_pulse_dependency
700
- def get_calibration(
701
- self,
702
- operation_name: str,
703
- qargs: tuple[int, ...],
704
- *args: ParameterValueType,
705
- operation_params: list[float] | float | None = None,
706
- **kwargs: ParameterValueType,
707
- ) -> Schedule | ScheduleBlock:
708
- """Get calibrated pulse schedule for the instruction.
709
-
710
- If calibration is templated with parameters, one can also provide those values
711
- to build a schedule with assigned parameters.
712
-
713
- Args:
714
- operation_name: The name of the operation for the instruction.
715
- qargs: The qubit indices for the instruction.
716
- args: Parameter values to build schedule if any.
717
- operation_params: The parameters for the Instruction. In case
718
- of multi-parameter gate, the order of parameters in the tuple
719
- must match the order of the gate parameters.
720
- kwargs: Parameter values with name to build schedule if any.
721
-
722
- Returns:
723
- Calibrated pulse schedule of corresponding instruction.
724
- """
725
- return self._get_calibration(
726
- operation_name, qargs, *args, operation_params=operation_params, **kwargs
727
- )
728
-
729
- def _get_calibration(
730
- self,
731
- operation_name: str,
732
- qargs: tuple[int, ...],
733
- *args: ParameterValueType,
734
- operation_params: list[float] | float | None = None,
735
- **kwargs: ParameterValueType,
736
- ) -> Schedule | ScheduleBlock:
737
- if not self._has_calibration(operation_name, qargs, operation_params):
738
- raise KeyError(
739
- f"Calibration of instruction: `{operation_name}`, with params: "
740
- f"`{operation_params}` for qubit: {qargs} is not defined."
741
- )
742
- cal_entry = getattr(self._gate_map[operation_name][qargs], "_calibration")
743
- return cal_entry.get_schedule(*args, **kwargs)
744
-
745
418
  @property
746
419
  def operation_names(self):
747
420
  """Get the operation names in the target."""
@@ -964,9 +637,6 @@ class Target(BaseTarget):
964
637
  error = getattr(props, "error", None)
965
638
  if error is not None:
966
639
  prop_str_pieces.append(f"\t\t\tError Rate: {error:g}\n")
967
- schedule = getattr(props, "_calibration", None)
968
- if schedule is not None:
969
- prop_str_pieces.append("\t\t\tWith pulse schedule calibration\n")
970
640
  extra_props = getattr(props, "properties", None)
971
641
  if extra_props is not None:
972
642
  extra_props_pieces = [
@@ -993,23 +663,24 @@ class Target(BaseTarget):
993
663
  self._instruction_schedule_map = state["instruction_schedule_map"]
994
664
  super().__setstate__(state["base"])
995
665
 
666
+ def seconds_to_dt(self, duration: float) -> int:
667
+ """Convert a given duration in seconds to units of dt
668
+
669
+ Args:
670
+ duration: The duration in seconds, such as in an :class:`.InstructionProperties`
671
+ field for an instruction in the target.
672
+
673
+ Returns
674
+ duration: The duration in units of dt
675
+ """
676
+ return duration_in_dt(duration, self.dt)
677
+
996
678
  @classmethod
997
- @deprecate_pulse_arg("inst_map")
998
- @deprecate_arg(
999
- name="backend_properties",
1000
- since="1.4",
1001
- package_name="Qiskit",
1002
- removal_timeline="in Qiskit 2.0",
1003
- additional_msg="To add instructions with specific properties "
1004
- "use Target.add_instruction(instruction, properties, name).",
1005
- )
1006
679
  def from_configuration(
1007
680
  cls,
1008
681
  basis_gates: list[str],
1009
682
  num_qubits: int | None = None,
1010
683
  coupling_map: CouplingMap | None = None,
1011
- inst_map: InstructionScheduleMap | None = None,
1012
- backend_properties: BackendProperties | None = None,
1013
684
  instruction_durations: InstructionDurations | None = None,
1014
685
  concurrent_measurements: Optional[List[List[int]]] = None,
1015
686
  dt: float | None = None,
@@ -1041,22 +712,6 @@ class Target(BaseTarget):
1041
712
  coupling_map: The coupling map representing connectivity constraints
1042
713
  on the backend. If specified all gates from ``basis_gates`` will
1043
714
  be supported on all qubits (or pairs of qubits).
1044
- inst_map: DEPRECATED. The instruction schedule map representing the pulse
1045
- :class:`~.Schedule` definitions for each instruction. If this
1046
- is specified ``coupling_map`` must be specified. The
1047
- ``coupling_map`` is used as the source of truth for connectivity
1048
- and if ``inst_map`` is used the schedule is looked up based
1049
- on the instructions from the pair of ``basis_gates`` and
1050
- ``coupling_map``. If you want to define a custom gate for
1051
- a particular qubit or qubit pair, you can manually build :class:`.Target`.
1052
- backend_properties: The :class:`~.BackendProperties` object which is
1053
- used for instruction properties and qubit properties.
1054
- If specified and instruction properties are intended to be used
1055
- then the ``coupling_map`` argument must be specified. This is
1056
- only used to lookup error rates and durations (unless
1057
- ``instruction_durations`` is specified which would take
1058
- precedence) for instructions specified via ``coupling_map`` and
1059
- ``basis_gates``.
1060
715
  instruction_durations: Optional instruction durations for instructions. If specified
1061
716
  it will take priority for setting the ``duration`` field in the
1062
717
  :class:`~InstructionProperties` objects for the instructions in the target.
@@ -1092,11 +747,6 @@ class Target(BaseTarget):
1092
747
  acquire_alignment = timing_constraints.acquire_alignment
1093
748
 
1094
749
  qubit_properties = None
1095
- if backend_properties is not None:
1096
- # pylint: disable=cyclic-import
1097
- from qiskit.providers.backend_compat import qubit_props_list_from_props
1098
-
1099
- qubit_properties = qubit_props_list_from_props(properties=backend_properties)
1100
750
 
1101
751
  target = cls(
1102
752
  num_qubits=num_qubits,
@@ -1114,7 +764,7 @@ class Target(BaseTarget):
1114
764
 
1115
765
  # While BackendProperties can also contain coupling information we
1116
766
  # rely solely on CouplingMap to determine connectivity. This is because
1117
- # in legacy transpiler usage (and implicitly in the BackendV1 data model)
767
+ # in legacy transpiler usage
1118
768
  # the coupling map is used to define connectivity constraints and
1119
769
  # the properties is only used for error rate and duration population.
1120
770
  # If coupling map is not specified we ignore the backend_properties
@@ -1156,28 +806,6 @@ class Target(BaseTarget):
1156
806
  for qubit in range(num_qubits):
1157
807
  error = None
1158
808
  duration = None
1159
- calibration = None
1160
- if backend_properties is not None:
1161
- if duration is None:
1162
- try:
1163
- duration = backend_properties.gate_length(gate, qubit)
1164
- except BackendPropertyError:
1165
- duration = None
1166
- try:
1167
- error = backend_properties.gate_error(gate, qubit)
1168
- except BackendPropertyError:
1169
- error = None
1170
- if inst_map is not None:
1171
- try:
1172
- calibration = inst_map._get_calibration_entry(gate, qubit)
1173
- # If we have dt defined and there is a custom calibration which is user
1174
- # generate use that custom pulse schedule for the duration. If it is
1175
- # not user generated than we assume it's the same duration as what is
1176
- # defined in the backend properties
1177
- if dt and calibration.user_provided:
1178
- duration = calibration.get_schedule().duration * dt
1179
- except PulseError:
1180
- calibration = None
1181
809
  # Durations if specified manually should override model objects
1182
810
  if instruction_durations is not None:
1183
811
  try:
@@ -1185,19 +813,12 @@ class Target(BaseTarget):
1185
813
  except TranspilerError:
1186
814
  duration = None
1187
815
 
1188
- if error is None and duration is None and calibration is None:
816
+ if error is None and duration is None:
1189
817
  gate_properties[(qubit,)] = None
1190
818
  else:
1191
- with warnings.catch_warnings():
1192
- warnings.filterwarnings(
1193
- "ignore",
1194
- category=DeprecationWarning,
1195
- message=".*``calibration`` is deprecated as of Qiskit 1.3.*",
1196
- module="qiskit",
1197
- )
1198
- gate_properties[(qubit,)] = InstructionProperties(
1199
- duration=duration, error=error, calibration=calibration
1200
- )
819
+ gate_properties[(qubit,)] = InstructionProperties(
820
+ duration=duration, error=error
821
+ )
1201
822
  target.add_instruction(name_mapping[gate], properties=gate_properties, name=gate)
1202
823
  edges = list(coupling_map.get_edges())
1203
824
  for gate in two_qubit_gates:
@@ -1205,28 +826,6 @@ class Target(BaseTarget):
1205
826
  for edge in edges:
1206
827
  error = None
1207
828
  duration = None
1208
- calibration = None
1209
- if backend_properties is not None:
1210
- if duration is None:
1211
- try:
1212
- duration = backend_properties.gate_length(gate, edge)
1213
- except BackendPropertyError:
1214
- duration = None
1215
- try:
1216
- error = backend_properties.gate_error(gate, edge)
1217
- except BackendPropertyError:
1218
- error = None
1219
- if inst_map is not None:
1220
- try:
1221
- calibration = inst_map._get_calibration_entry(gate, edge)
1222
- # If we have dt defined and there is a custom calibration which is user
1223
- # generate use that custom pulse schedule for the duration. If it is
1224
- # not user generated than we assume it's the same duration as what is
1225
- # defined in the backend properties
1226
- if dt and calibration.user_provided:
1227
- duration = calibration.get_schedule().duration * dt
1228
- except PulseError:
1229
- calibration = None
1230
829
  # Durations if specified manually should override model objects
1231
830
  if instruction_durations is not None:
1232
831
  try:
@@ -1234,19 +833,12 @@ class Target(BaseTarget):
1234
833
  except TranspilerError:
1235
834
  duration = None
1236
835
 
1237
- if error is None and duration is None and calibration is None:
836
+ if error is None and duration is None:
1238
837
  gate_properties[edge] = None
1239
838
  else:
1240
- with warnings.catch_warnings():
1241
- warnings.filterwarnings(
1242
- "ignore",
1243
- category=DeprecationWarning,
1244
- message=".*``calibration`` is deprecated as of Qiskit 1.3.*",
1245
- module="qiskit",
1246
- )
1247
- gate_properties[edge] = InstructionProperties(
1248
- duration=duration, error=error, calibration=calibration
1249
- )
839
+ gate_properties[edge] = InstructionProperties(
840
+ duration=duration, error=error
841
+ )
1250
842
  target.add_instruction(name_mapping[gate], properties=gate_properties, name=gate)
1251
843
  for gate in global_ideal_variable_width_gates:
1252
844
  target.add_instruction(name_mapping[gate], name=gate)
@@ -1256,96 +848,47 @@ class Target(BaseTarget):
1256
848
  Mapping.register(Target)
1257
849
 
1258
850
 
1259
- @deprecate_func(
1260
- since="1.2",
1261
- removal_timeline="in the 2.0 release",
1262
- additional_msg="This method is used to build an element from the deprecated "
1263
- "``qiskit.providers.models`` module. These models are part of the deprecated `BackendV1` "
1264
- "workflow and no longer necessary for `BackendV2`. If a user workflow requires these "
1265
- "representations it likely relies on deprecated functionality and "
1266
- "should be updated to use `BackendV2`.",
1267
- )
1268
- def target_to_backend_properties(target: Target):
1269
- """Convert a :class:`~.Target` object into a legacy :class:`~.BackendProperties`"""
1270
-
1271
- properties_dict: dict[str, Any] = {
1272
- "backend_name": "",
1273
- "backend_version": "",
1274
- "last_update_date": None,
1275
- "general": [],
1276
- }
1277
- gates = []
1278
- qubits = []
1279
- for gate, qargs_list in target.items():
1280
- if gate != "measure":
1281
- for qargs, props in qargs_list.items():
1282
- property_list = []
1283
- if getattr(props, "duration", None) is not None:
1284
- property_list.append(
1285
- {
1286
- "date": datetime.datetime.now(datetime.timezone.utc),
1287
- "name": "gate_length",
1288
- "unit": "s",
1289
- "value": props.duration,
1290
- }
1291
- )
1292
- if getattr(props, "error", None) is not None:
1293
- property_list.append(
1294
- {
1295
- "date": datetime.datetime.now(datetime.timezone.utc),
1296
- "name": "gate_error",
1297
- "unit": "",
1298
- "value": props.error,
1299
- }
1300
- )
1301
- if property_list:
1302
- gates.append(
1303
- {
1304
- "gate": gate,
1305
- "qubits": list(qargs),
1306
- "parameters": property_list,
1307
- "name": gate + "_".join([str(x) for x in qargs]),
1308
- }
1309
- )
851
+ class _FakeTarget(Target):
852
+ """
853
+ Pseudo-target class for INTERNAL use in the transpilation pipeline.
854
+ It's essentially an empty :class:`.Target` instance with a `coupling_map`
855
+ argument that allows to store connectivity constraints without basis gates.
856
+ This is intended to replace the use of loose constraints in the pipeline.
857
+ """
858
+
859
+ def __init__(self, coupling_map=None, **kwargs):
860
+ super().__init__(**kwargs)
861
+ if coupling_map is None or isinstance(coupling_map, CouplingMap):
862
+ self._coupling_map = coupling_map
1310
863
  else:
1311
- qubit_props: dict[int, Any] = {}
1312
- if target.num_qubits is not None:
1313
- qubit_props = {x: None for x in range(target.num_qubits)}
1314
- for qargs, props in qargs_list.items():
1315
- if qargs is None:
1316
- continue
1317
- qubit = qargs[0]
1318
- props_list = []
1319
- if getattr(props, "error", None) is not None:
1320
- props_list.append(
1321
- {
1322
- "date": datetime.datetime.now(datetime.timezone.utc),
1323
- "name": "readout_error",
1324
- "unit": "",
1325
- "value": props.error,
1326
- }
1327
- )
1328
- if getattr(props, "duration", None) is not None:
1329
- props_list.append(
1330
- {
1331
- "date": datetime.datetime.now(datetime.timezone.utc),
1332
- "name": "readout_length",
1333
- "unit": "s",
1334
- "value": props.duration,
1335
- }
1336
- )
1337
- if not props_list:
1338
- qubit_props = {}
1339
- break
1340
- qubit_props[qubit] = props_list
1341
- if qubit_props and all(x is not None for x in qubit_props.values()):
1342
- qubits = [qubit_props[i] for i in range(target.num_qubits)]
1343
- if gates or qubits:
1344
- properties_dict["gates"] = gates
1345
- properties_dict["qubits"] = qubits
1346
- with warnings.catch_warnings():
1347
- # This raises BackendProperties internally
1348
- warnings.filterwarnings("ignore", category=DeprecationWarning)
1349
- return BackendProperties.from_dict(properties_dict)
1350
- else:
1351
- return None
864
+ self._coupling_map = CouplingMap(coupling_map)
865
+
866
+ def __len__(self):
867
+ return len(self._gate_map)
868
+
869
+ def build_coupling_map(self, *args, **kwargs): # pylint: disable=unused-argument
870
+ return copy.deepcopy(self._coupling_map)
871
+
872
+ def instruction_supported(self, *args, **kwargs):
873
+ """Checks whether an instruction is supported by the
874
+ Target based on instruction name and qargs. Note that if there are no
875
+ basis gates in the Target, this method will always return ``True``.
876
+ """
877
+ if len(self.operation_names) == 0:
878
+ return True
879
+ else:
880
+ return super().instruction_supported(*args, **kwargs)
881
+
882
+ @classmethod
883
+ def from_configuration(
884
+ cls,
885
+ *args,
886
+ num_qubits: int | None = None,
887
+ coupling_map: CouplingMap | list | None = None,
888
+ **kwargs,
889
+ ) -> _FakeTarget:
890
+
891
+ if num_qubits is None and coupling_map is not None:
892
+ num_qubits = len(coupling_map.graph)
893
+
894
+ return cls(num_qubits=num_qubits, coupling_map=coupling_map, *args, **kwargs)