qiskit 1.4.0__cp39-abi3-macosx_11_0_arm64.whl → 2.0.0rc1__cp39-abi3-macosx_11_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +2 -5
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/circuit/__init__.py +24 -5
  5. qiskit/circuit/{add_control.py → _add_control.py} +32 -12
  6. qiskit/circuit/_classical_resource_map.py +5 -3
  7. qiskit/circuit/barrier.py +3 -7
  8. qiskit/circuit/classical/expr/__init__.py +31 -3
  9. qiskit/circuit/classical/expr/constructors.py +248 -28
  10. qiskit/circuit/classical/expr/expr.py +104 -3
  11. qiskit/circuit/classical/expr/visitors.py +75 -0
  12. qiskit/circuit/classical/types/__init__.py +12 -8
  13. qiskit/circuit/classical/types/ordering.py +14 -7
  14. qiskit/circuit/classical/types/types.py +36 -0
  15. qiskit/circuit/commutation_checker.py +34 -7
  16. qiskit/circuit/controlflow/__init__.py +32 -1
  17. qiskit/circuit/controlflow/_builder_utils.py +9 -5
  18. qiskit/circuit/controlflow/box.py +163 -0
  19. qiskit/circuit/controlflow/break_loop.py +1 -1
  20. qiskit/circuit/controlflow/builder.py +139 -39
  21. qiskit/circuit/controlflow/continue_loop.py +1 -3
  22. qiskit/circuit/controlflow/control_flow.py +10 -0
  23. qiskit/circuit/controlflow/for_loop.py +2 -1
  24. qiskit/circuit/controlflow/if_else.py +3 -16
  25. qiskit/circuit/controlflow/switch_case.py +2 -8
  26. qiskit/circuit/controlflow/while_loop.py +2 -7
  27. qiskit/circuit/controlledgate.py +2 -4
  28. qiskit/circuit/delay.py +40 -11
  29. qiskit/circuit/duration.py +0 -15
  30. qiskit/circuit/gate.py +2 -4
  31. qiskit/circuit/instruction.py +7 -140
  32. qiskit/circuit/instructionset.py +7 -54
  33. qiskit/circuit/library/__init__.py +34 -5
  34. qiskit/circuit/library/arithmetic/__init__.py +16 -10
  35. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  36. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +2 -2
  37. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
  38. qiskit/circuit/library/arithmetic/exact_reciprocal.py +64 -21
  39. qiskit/circuit/library/arithmetic/integer_comparator.py +37 -80
  40. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +169 -2
  41. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +59 -5
  42. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +154 -6
  43. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +114 -4
  44. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +191 -15
  45. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +93 -39
  46. qiskit/circuit/library/arithmetic/quadratic_form.py +168 -2
  47. qiskit/circuit/library/arithmetic/weighted_adder.py +73 -1
  48. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  49. qiskit/circuit/library/blueprintcircuit.py +52 -16
  50. qiskit/circuit/library/data_preparation/initializer.py +1 -1
  51. qiskit/circuit/library/data_preparation/pauli_feature_map.py +4 -4
  52. qiskit/circuit/library/data_preparation/state_preparation.py +1 -1
  53. qiskit/circuit/library/generalized_gates/gms.py +1 -1
  54. qiskit/circuit/library/generalized_gates/isometry.py +1 -1
  55. qiskit/circuit/library/generalized_gates/pauli.py +1 -2
  56. qiskit/circuit/library/generalized_gates/uc.py +97 -7
  57. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +1 -1
  58. qiskit/circuit/library/generalized_gates/unitary.py +4 -2
  59. qiskit/circuit/library/hamiltonian_gate.py +1 -1
  60. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  61. qiskit/circuit/library/n_local/n_local.py +1 -1
  62. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  63. qiskit/circuit/library/overlap.py +2 -2
  64. qiskit/circuit/library/pauli_evolution.py +39 -24
  65. qiskit/circuit/library/phase_oracle.py +130 -51
  66. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  67. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  68. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  69. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  70. qiskit/circuit/library/standard_gates/h.py +4 -9
  71. qiskit/circuit/library/standard_gates/i.py +2 -2
  72. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  73. qiskit/circuit/library/standard_gates/p.py +15 -34
  74. qiskit/circuit/library/standard_gates/r.py +2 -6
  75. qiskit/circuit/library/standard_gates/rx.py +5 -15
  76. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  77. qiskit/circuit/library/standard_gates/ry.py +5 -17
  78. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  79. qiskit/circuit/library/standard_gates/rz.py +5 -17
  80. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  81. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  82. qiskit/circuit/library/standard_gates/s.py +6 -15
  83. qiskit/circuit/library/standard_gates/swap.py +4 -11
  84. qiskit/circuit/library/standard_gates/sx.py +7 -12
  85. qiskit/circuit/library/standard_gates/t.py +6 -7
  86. qiskit/circuit/library/standard_gates/u.py +2 -10
  87. qiskit/circuit/library/standard_gates/u1.py +5 -16
  88. qiskit/circuit/library/standard_gates/u2.py +2 -6
  89. qiskit/circuit/library/standard_gates/u3.py +3 -11
  90. qiskit/circuit/library/standard_gates/x.py +13 -60
  91. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  92. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/y.py +4 -9
  94. qiskit/circuit/library/standard_gates/z.py +5 -15
  95. qiskit/circuit/measure.py +11 -2
  96. qiskit/circuit/parameterexpression.py +4 -0
  97. qiskit/circuit/quantumcircuit.py +881 -555
  98. qiskit/circuit/random/utils.py +12 -6
  99. qiskit/circuit/reset.py +5 -2
  100. qiskit/circuit/singleton.py +5 -11
  101. qiskit/circuit/store.py +0 -8
  102. qiskit/compiler/__init__.py +1 -7
  103. qiskit/compiler/transpiler.py +38 -196
  104. qiskit/converters/circuit_to_dag.py +4 -2
  105. qiskit/converters/circuit_to_dagdependency.py +0 -2
  106. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  107. qiskit/converters/circuit_to_gate.py +1 -1
  108. qiskit/converters/circuit_to_instruction.py +16 -29
  109. qiskit/converters/dag_to_circuit.py +5 -5
  110. qiskit/converters/dag_to_dagdependency.py +0 -1
  111. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  112. qiskit/converters/dagdependency_to_circuit.py +0 -6
  113. qiskit/converters/dagdependency_to_dag.py +0 -6
  114. qiskit/dagcircuit/collect_blocks.py +32 -20
  115. qiskit/dagcircuit/dagdependency.py +3 -37
  116. qiskit/dagcircuit/dagdependency_v2.py +2 -80
  117. qiskit/dagcircuit/dagnode.py +14 -2
  118. qiskit/passmanager/__init__.py +24 -6
  119. qiskit/passmanager/passmanager.py +26 -24
  120. qiskit/primitives/__init__.py +44 -35
  121. qiskit/primitives/backend_estimator_v2.py +102 -23
  122. qiskit/primitives/backend_sampler_v2.py +5 -20
  123. qiskit/primitives/base/__init__.py +4 -4
  124. qiskit/primitives/base/base_estimator.py +77 -82
  125. qiskit/primitives/base/base_primitive_job.py +2 -2
  126. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  127. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  128. qiskit/primitives/base/base_sampler.py +52 -60
  129. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  130. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  131. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  132. qiskit/primitives/containers/bindings_array.py +3 -1
  133. qiskit/primitives/containers/bit_array.py +23 -0
  134. qiskit/primitives/containers/data_bin.py +3 -1
  135. qiskit/primitives/containers/observables_array.py +19 -2
  136. qiskit/primitives/statevector_sampler.py +6 -8
  137. qiskit/primitives/utils.py +14 -189
  138. qiskit/providers/__init__.py +4 -130
  139. qiskit/providers/backend.py +11 -314
  140. qiskit/providers/basic_provider/__init__.py +3 -1
  141. qiskit/providers/basic_provider/basic_provider.py +29 -9
  142. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  143. qiskit/providers/exceptions.py +0 -33
  144. qiskit/providers/fake_provider/__init__.py +0 -37
  145. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  146. qiskit/qasm2/__init__.py +21 -6
  147. qiskit/qasm2/export.py +2 -10
  148. qiskit/qasm2/parse.py +11 -25
  149. qiskit/qasm3/__init__.py +5 -1
  150. qiskit/qasm3/ast.py +44 -0
  151. qiskit/qasm3/exporter.py +65 -27
  152. qiskit/qasm3/printer.py +35 -4
  153. qiskit/qpy/__init__.py +141 -19
  154. qiskit/qpy/binary_io/__init__.py +0 -1
  155. qiskit/qpy/binary_io/circuits.py +91 -116
  156. qiskit/qpy/binary_io/schedules.py +61 -388
  157. qiskit/qpy/binary_io/value.py +168 -28
  158. qiskit/qpy/common.py +10 -7
  159. qiskit/qpy/formats.py +41 -0
  160. qiskit/qpy/interface.py +29 -62
  161. qiskit/qpy/type_keys.py +58 -221
  162. qiskit/quantum_info/analysis/distance.py +3 -1
  163. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  164. qiskit/quantum_info/operators/operator.py +6 -2
  165. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  166. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  167. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  168. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  169. qiskit/quantum_info/states/densitymatrix.py +16 -6
  170. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  171. qiskit/quantum_info/states/statevector.py +16 -6
  172. qiskit/result/__init__.py +5 -17
  173. qiskit/result/models.py +18 -10
  174. qiskit/result/result.py +28 -126
  175. qiskit/result/sampled_expval.py +1 -2
  176. qiskit/result/utils.py +3 -4
  177. qiskit/synthesis/__init__.py +21 -1
  178. qiskit/synthesis/arithmetic/__init__.py +3 -1
  179. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  180. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  181. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  182. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  183. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  184. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  185. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  186. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  187. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  188. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  189. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  190. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  191. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  192. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -0
  193. qiskit/synthesis/evolution/lie_trotter.py +10 -7
  194. qiskit/synthesis/evolution/product_formula.py +44 -35
  195. qiskit/synthesis/evolution/qdrift.py +17 -24
  196. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  197. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  198. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  199. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  200. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  201. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  202. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  203. qiskit/synthesis/two_qubit/__init__.py +1 -0
  204. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  205. qiskit/transpiler/__init__.py +32 -232
  206. qiskit/transpiler/basepasses.py +20 -51
  207. qiskit/transpiler/layout.py +1 -1
  208. qiskit/transpiler/passes/__init__.py +2 -40
  209. qiskit/transpiler/passes/basis/basis_translator.py +4 -3
  210. qiskit/transpiler/passes/basis/decompose.py +1 -15
  211. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  212. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  213. qiskit/transpiler/passes/layout/apply_layout.py +5 -0
  214. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  215. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +4 -4
  216. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  217. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  218. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  219. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  220. qiskit/transpiler/passes/optimization/__init__.py +1 -3
  221. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  222. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  223. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  224. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  225. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  226. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  227. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  228. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  229. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  230. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  231. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  232. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  233. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  234. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  235. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -0
  236. qiskit/transpiler/passes/routing/__init__.py +0 -1
  237. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  238. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  239. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  240. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  241. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  242. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  243. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  244. qiskit/transpiler/passes/scheduling/padding/base_padding.py +30 -2
  245. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -58
  246. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +11 -3
  247. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  248. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  249. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  250. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +127 -59
  251. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  252. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  253. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  254. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  255. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  256. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  257. qiskit/transpiler/passes/utils/__init__.py +0 -1
  258. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  259. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  260. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  261. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  262. qiskit/transpiler/passmanager.py +13 -0
  263. qiskit/transpiler/passmanager_config.py +5 -81
  264. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  265. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  266. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +101 -322
  267. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  268. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  269. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  270. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  271. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  272. qiskit/transpiler/target.py +67 -524
  273. qiskit/user_config.py +8 -4
  274. qiskit/utils/__init__.py +13 -12
  275. qiskit/utils/deprecation.py +4 -112
  276. qiskit/utils/optionals.py +11 -4
  277. qiskit/utils/parallel.py +214 -87
  278. qiskit/utils/units.py +4 -1
  279. qiskit/visualization/__init__.py +3 -7
  280. qiskit/visualization/array.py +4 -1
  281. qiskit/visualization/bloch.py +1 -1
  282. qiskit/visualization/circuit/_utils.py +19 -19
  283. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  284. qiskit/visualization/circuit/matplotlib.py +13 -23
  285. qiskit/visualization/circuit/text.py +7 -3
  286. qiskit/visualization/dag_visualization.py +2 -1
  287. qiskit/visualization/gate_map.py +39 -154
  288. qiskit/visualization/pass_manager_visualization.py +6 -2
  289. qiskit/visualization/state_visualization.py +6 -0
  290. qiskit/visualization/timeline/core.py +27 -12
  291. qiskit/visualization/timeline/interface.py +23 -18
  292. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/METADATA +2 -2
  293. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/RECORD +297 -444
  294. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/WHEEL +2 -1
  295. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/entry_points.txt +8 -2
  296. qiskit/assembler/__init__.py +0 -42
  297. qiskit/assembler/assemble_circuits.py +0 -451
  298. qiskit/assembler/assemble_schedules.py +0 -367
  299. qiskit/assembler/disassemble.py +0 -310
  300. qiskit/assembler/run_config.py +0 -77
  301. qiskit/circuit/bit.py +0 -106
  302. qiskit/circuit/classicalfunction/__init__.py +0 -152
  303. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  304. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  305. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  306. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  307. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  308. qiskit/circuit/classicalfunction/types.py +0 -18
  309. qiskit/circuit/classicalfunction/utils.py +0 -91
  310. qiskit/circuit/classicalregister.py +0 -57
  311. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  312. qiskit/circuit/quantumregister.py +0 -75
  313. qiskit/circuit/register.py +0 -246
  314. qiskit/compiler/assembler.py +0 -689
  315. qiskit/compiler/scheduler.py +0 -109
  316. qiskit/compiler/sequencer.py +0 -71
  317. qiskit/primitives/backend_estimator.py +0 -486
  318. qiskit/primitives/backend_sampler.py +0 -222
  319. qiskit/primitives/estimator.py +0 -172
  320. qiskit/primitives/sampler.py +0 -162
  321. qiskit/providers/backend_compat.py +0 -507
  322. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  323. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  324. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  325. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  326. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  327. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  328. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  329. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  330. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  332. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  333. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  335. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  336. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  337. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  338. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  339. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  341. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  342. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  343. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  344. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  345. qiskit/providers/fake_provider/fake_1q.py +0 -91
  346. qiskit/providers/fake_provider/fake_backend.py +0 -165
  347. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  348. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  349. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  350. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  351. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  352. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  353. qiskit/providers/models/__init__.py +0 -89
  354. qiskit/providers/models/backendconfiguration.py +0 -1040
  355. qiskit/providers/models/backendproperties.py +0 -535
  356. qiskit/providers/models/backendstatus.py +0 -104
  357. qiskit/providers/models/jobstatus.py +0 -77
  358. qiskit/providers/models/pulsedefaults.py +0 -305
  359. qiskit/providers/provider.py +0 -95
  360. qiskit/pulse/__init__.py +0 -158
  361. qiskit/pulse/builder.py +0 -2262
  362. qiskit/pulse/calibration_entries.py +0 -381
  363. qiskit/pulse/channels.py +0 -227
  364. qiskit/pulse/configuration.py +0 -245
  365. qiskit/pulse/exceptions.py +0 -45
  366. qiskit/pulse/filters.py +0 -309
  367. qiskit/pulse/instruction_schedule_map.py +0 -424
  368. qiskit/pulse/instructions/__init__.py +0 -67
  369. qiskit/pulse/instructions/acquire.py +0 -150
  370. qiskit/pulse/instructions/delay.py +0 -71
  371. qiskit/pulse/instructions/directives.py +0 -154
  372. qiskit/pulse/instructions/frequency.py +0 -135
  373. qiskit/pulse/instructions/instruction.py +0 -270
  374. qiskit/pulse/instructions/phase.py +0 -152
  375. qiskit/pulse/instructions/play.py +0 -99
  376. qiskit/pulse/instructions/reference.py +0 -100
  377. qiskit/pulse/instructions/snapshot.py +0 -82
  378. qiskit/pulse/library/__init__.py +0 -97
  379. qiskit/pulse/library/continuous.py +0 -430
  380. qiskit/pulse/library/pulse.py +0 -148
  381. qiskit/pulse/library/samplers/__init__.py +0 -15
  382. qiskit/pulse/library/samplers/decorators.py +0 -295
  383. qiskit/pulse/library/samplers/strategies.py +0 -71
  384. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  385. qiskit/pulse/library/waveform.py +0 -136
  386. qiskit/pulse/macros.py +0 -262
  387. qiskit/pulse/parameter_manager.py +0 -445
  388. qiskit/pulse/parser.py +0 -314
  389. qiskit/pulse/reference_manager.py +0 -58
  390. qiskit/pulse/schedule.py +0 -1854
  391. qiskit/pulse/transforms/__init__.py +0 -106
  392. qiskit/pulse/transforms/alignments.py +0 -406
  393. qiskit/pulse/transforms/base_transforms.py +0 -71
  394. qiskit/pulse/transforms/canonicalization.py +0 -498
  395. qiskit/pulse/transforms/dag.py +0 -122
  396. qiskit/pulse/utils.py +0 -149
  397. qiskit/qobj/__init__.py +0 -75
  398. qiskit/qobj/common.py +0 -81
  399. qiskit/qobj/converters/__init__.py +0 -18
  400. qiskit/qobj/converters/lo_config.py +0 -177
  401. qiskit/qobj/converters/pulse_instruction.py +0 -897
  402. qiskit/qobj/pulse_qobj.py +0 -709
  403. qiskit/qobj/qasm_qobj.py +0 -708
  404. qiskit/qobj/utils.py +0 -46
  405. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  406. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  407. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  408. qiskit/result/mitigation/utils.py +0 -217
  409. qiskit/scheduler/__init__.py +0 -40
  410. qiskit/scheduler/config.py +0 -37
  411. qiskit/scheduler/lowering.py +0 -187
  412. qiskit/scheduler/methods/__init__.py +0 -15
  413. qiskit/scheduler/methods/basic.py +0 -140
  414. qiskit/scheduler/schedule_circuit.py +0 -69
  415. qiskit/scheduler/sequence.py +0 -104
  416. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  417. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  418. qiskit/transpiler/passes/calibration/builders.py +0 -20
  419. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  420. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  421. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  422. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  423. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  424. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  425. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  426. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  427. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  428. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  429. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  430. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  431. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  432. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  433. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  434. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  435. qiskit/utils/deprecate_pulse.py +0 -119
  436. qiskit/utils/multiprocessing.py +0 -56
  437. qiskit/visualization/pulse_v2/__init__.py +0 -21
  438. qiskit/visualization/pulse_v2/core.py +0 -901
  439. qiskit/visualization/pulse_v2/device_info.py +0 -173
  440. qiskit/visualization/pulse_v2/drawings.py +0 -253
  441. qiskit/visualization/pulse_v2/events.py +0 -254
  442. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  443. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  444. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  445. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  446. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  447. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  448. qiskit/visualization/pulse_v2/interface.py +0 -459
  449. qiskit/visualization/pulse_v2/layouts.py +0 -387
  450. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  451. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  452. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  453. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  454. qiskit/visualization/pulse_v2/types.py +0 -242
  455. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/LICENSE.txt +0 -0
  456. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -1,507 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2020, 2024.
4
- #
5
- # This code is licensed under the Apache License, Version 2.0. You may
6
- # obtain a copy of this license in the LICENSE.txt file in the root directory
7
- # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
- #
9
- # Any modifications or derivative works of this code must retain this
10
- # copyright notice, and modified files need to carry a notice indicating
11
- # that they have been altered from the originals.
12
-
13
- """Backend abstract interface for providers."""
14
-
15
- from __future__ import annotations
16
- import logging
17
- import warnings
18
- from typing import List, Iterable, Any, Dict, Optional
19
-
20
- from qiskit.providers.backend import BackendV1, BackendV2
21
- from qiskit.providers.backend import QubitProperties
22
- from qiskit.providers.models.backendconfiguration import BackendConfiguration
23
- from qiskit.providers.models.backendproperties import BackendProperties
24
- from qiskit.circuit.controlflow import CONTROL_FLOW_OP_NAMES
25
- from qiskit.providers.models.pulsedefaults import PulseDefaults
26
- from qiskit.providers.options import Options
27
- from qiskit.providers.exceptions import BackendPropertyError
28
- from qiskit.utils import deprecate_func
29
- from qiskit.utils.deprecate_pulse import deprecate_pulse_arg, deprecate_pulse_dependency
30
-
31
-
32
- logger = logging.getLogger(__name__)
33
-
34
-
35
- @deprecate_pulse_arg("defaults")
36
- def convert_to_target(
37
- configuration: BackendConfiguration,
38
- properties: BackendProperties = None,
39
- defaults: PulseDefaults = None,
40
- custom_name_mapping: Optional[Dict[str, Any]] = None,
41
- add_delay: bool = True,
42
- filter_faulty: bool = True,
43
- ):
44
- """Decode transpiler target from backend data set.
45
-
46
- This function generates :class:`.Target`` instance from intermediate
47
- legacy objects such as :class:`.BackendProperties` and :class:`.PulseDefaults`.
48
- These objects are usually components of the legacy :class:`.BackendV1` model.
49
-
50
- Args:
51
- configuration: Backend configuration as ``BackendConfiguration``
52
- properties: Backend property dictionary or ``BackendProperties``
53
- defaults: DEPRECATED. Backend pulse defaults dictionary or ``PulseDefaults``
54
- custom_name_mapping: A name mapping must be supplied for the operation
55
- not included in Qiskit Standard Gate name mapping, otherwise the operation
56
- will be dropped in the resulting ``Target`` object.
57
- add_delay: If True, adds delay to the instruction set.
58
- filter_faulty: If True, this filters the non-operational qubits.
59
-
60
- Returns:
61
- A ``Target`` instance.
62
- """
63
- # If a deprecated error is raised during the conversion, we should not return the
64
- # deprecation warning to the user,as it is not actionable for them.
65
- with warnings.catch_warnings():
66
- warnings.filterwarnings(
67
- "ignore",
68
- category=DeprecationWarning,
69
- message=".*``qiskit.providers.exceptions.BackendPropertyError``",
70
- module="qiskit",
71
- )
72
- target = _convert_to_target(
73
- configuration, properties, defaults, custom_name_mapping, add_delay, filter_faulty
74
- )
75
- return target
76
-
77
-
78
- def _convert_to_target(
79
- configuration: BackendConfiguration,
80
- properties: BackendProperties = None,
81
- defaults: PulseDefaults = None,
82
- custom_name_mapping: Optional[Dict[str, Any]] = None,
83
- add_delay: bool = True,
84
- filter_faulty: bool = True,
85
- ):
86
- """An alternative private path to avoid pulse deprecations"""
87
- # importing packages where they are needed, to avoid cyclic-import.
88
- # pylint: disable=cyclic-import
89
- from qiskit.transpiler.target import (
90
- Target,
91
- InstructionProperties,
92
- )
93
- from qiskit.circuit.controlflow import ForLoopOp, IfElseOp, SwitchCaseOp, WhileLoopOp
94
- from qiskit.circuit.library.standard_gates import get_standard_gate_name_mapping
95
- from qiskit.circuit.parameter import Parameter
96
- from qiskit.circuit.gate import Gate
97
-
98
- required = ["measure", "delay"]
99
-
100
- # Load Qiskit object representation
101
- qiskit_inst_mapping = get_standard_gate_name_mapping()
102
- if custom_name_mapping:
103
- qiskit_inst_mapping.update(custom_name_mapping)
104
-
105
- qiskit_control_flow_mapping = {
106
- "if_else": IfElseOp,
107
- "while_loop": WhileLoopOp,
108
- "for_loop": ForLoopOp,
109
- "switch_case": SwitchCaseOp,
110
- }
111
-
112
- in_data = {"num_qubits": configuration.num_qubits}
113
-
114
- # Parse global configuration properties
115
- if hasattr(configuration, "dt"):
116
- in_data["dt"] = configuration.dt
117
- if hasattr(configuration, "timing_constraints"):
118
- in_data.update(configuration.timing_constraints)
119
-
120
- # Create instruction property placeholder from backend configuration
121
- basis_gates = set(getattr(configuration, "basis_gates", []))
122
- supported_instructions = set(getattr(configuration, "supported_instructions", []))
123
- gate_configs = {gate.name: gate for gate in configuration.gates}
124
- all_instructions = set.union(
125
- basis_gates, set(required), supported_instructions.intersection(CONTROL_FLOW_OP_NAMES)
126
- )
127
- inst_name_map = {} # type: Dict[str, Instruction]
128
-
129
- faulty_ops = set()
130
- faulty_qubits = set()
131
- unsupported_instructions = []
132
-
133
- # Create name to Qiskit instruction object repr mapping
134
- for name in all_instructions:
135
- if name in qiskit_control_flow_mapping:
136
- continue
137
- if name in qiskit_inst_mapping:
138
- inst_name_map[name] = qiskit_inst_mapping[name]
139
- elif name in gate_configs:
140
- # GateConfig model is a translator of QASM opcode.
141
- # This doesn't have quantum definition, so Qiskit transpiler doesn't perform
142
- # any optimization in quantum domain.
143
- # Usually GateConfig counterpart should exist in Qiskit namespace so this is rarely called.
144
- this_config = gate_configs[name]
145
- params = list(map(Parameter, getattr(this_config, "parameters", [])))
146
- coupling_map = getattr(this_config, "coupling_map", [])
147
- inst_name_map[name] = Gate(
148
- name=name,
149
- num_qubits=len(coupling_map[0]) if coupling_map else 0,
150
- params=params,
151
- )
152
- else:
153
- warnings.warn(
154
- f"No gate definition for {name} can be found and is being excluded "
155
- "from the generated target. You can use `custom_name_mapping` to provide "
156
- "a definition for this operation.",
157
- RuntimeWarning,
158
- )
159
- unsupported_instructions.append(name)
160
-
161
- for name in unsupported_instructions:
162
- all_instructions.remove(name)
163
-
164
- # Create inst properties placeholder
165
- # Without any assignment, properties value is None,
166
- # which defines a global instruction that can be applied to any qubit(s).
167
- # The None value behaves differently from an empty dictionary.
168
- # See API doc of Target.add_instruction for details.
169
- prop_name_map = dict.fromkeys(all_instructions)
170
- for name in all_instructions:
171
- if name in gate_configs:
172
- if coupling_map := getattr(gate_configs[name], "coupling_map", None):
173
- # Respect operational qubits that gate configuration defines
174
- # This ties instruction to particular qubits even without properties information.
175
- # Note that each instruction is considered to be ideal unless
176
- # its spec (e.g. error, duration) is bound by the properties object.
177
- prop_name_map[name] = dict.fromkeys(map(tuple, coupling_map))
178
-
179
- # Populate instruction properties
180
- if properties:
181
-
182
- def _get_value(prop_dict, prop_name):
183
- if ndval := prop_dict.get(prop_name, None):
184
- return ndval[0]
185
- return None
186
-
187
- # is_qubit_operational is a bit of expensive operation so precache the value
188
- faulty_qubits = {
189
- q for q in range(configuration.num_qubits) if not properties.is_qubit_operational(q)
190
- }
191
-
192
- qubit_properties = []
193
- for qi in range(0, configuration.num_qubits):
194
- # TODO faulty qubit handling might be needed since
195
- # faulty qubit reporting qubit properties doesn't make sense.
196
- try:
197
- prop_dict = properties.qubit_property(qubit=qi)
198
- except KeyError:
199
- continue
200
- qubit_properties.append(
201
- QubitProperties(
202
- t1=prop_dict.get("T1", (None, None))[0],
203
- t2=prop_dict.get("T2", (None, None))[0],
204
- frequency=prop_dict.get("frequency", (None, None))[0],
205
- )
206
- )
207
- in_data["qubit_properties"] = qubit_properties
208
-
209
- for name in all_instructions:
210
- try:
211
- for qubits, params in properties.gate_property(name).items():
212
- if filter_faulty and (
213
- set.intersection(faulty_qubits, qubits)
214
- or not properties.is_gate_operational(name, qubits)
215
- ):
216
- try:
217
- # Qubits might be pre-defined by the gate config
218
- # However properties objects says the qubits is non-operational
219
- del prop_name_map[name][qubits]
220
- except KeyError:
221
- pass
222
- faulty_ops.add((name, qubits))
223
- continue
224
- if prop_name_map[name] is None:
225
- # This instruction is tied to particular qubits
226
- # i.e. gate config is not provided, and instruction has been globally defined.
227
- prop_name_map[name] = {}
228
- prop_name_map[name][qubits] = InstructionProperties(
229
- error=_get_value(params, "gate_error"),
230
- duration=_get_value(params, "gate_length"),
231
- )
232
- if isinstance(prop_name_map[name], dict) and any(
233
- v is None for v in prop_name_map[name].values()
234
- ):
235
- # Properties provides gate properties only for subset of qubits
236
- # Associated qubit set might be defined by the gate config here
237
- logger.info(
238
- "Gate properties of instruction %s are not provided for every qubits. "
239
- "This gate is ideal for some qubits and the rest is with finite error. "
240
- "Created backend target may confuse error-aware circuit optimization.",
241
- name,
242
- )
243
- except BackendPropertyError:
244
- # This gate doesn't report any property
245
- continue
246
-
247
- # Measure instruction property is stored in qubit property
248
- prop_name_map["measure"] = {}
249
-
250
- for qubit_idx in range(configuration.num_qubits):
251
- if filter_faulty and (qubit_idx in faulty_qubits):
252
- continue
253
- qubit_prop = properties.qubit_property(qubit_idx)
254
- prop_name_map["measure"][(qubit_idx,)] = InstructionProperties(
255
- error=_get_value(qubit_prop, "readout_error"),
256
- duration=_get_value(qubit_prop, "readout_length"),
257
- )
258
-
259
- for op in required:
260
- # Map required ops to each operational qubit
261
- if prop_name_map[op] is None:
262
- prop_name_map[op] = {
263
- (q,): None
264
- for q in range(configuration.num_qubits)
265
- if not filter_faulty or (q not in faulty_qubits)
266
- }
267
-
268
- if defaults:
269
- inst_sched_map = defaults.instruction_schedule_map
270
-
271
- for name in inst_sched_map.instructions:
272
- for qubits in inst_sched_map.qubits_with_instruction(name):
273
- if not isinstance(qubits, tuple):
274
- qubits = (qubits,)
275
- if (
276
- name not in all_instructions
277
- or name not in prop_name_map
278
- or prop_name_map[name] is None
279
- or qubits not in prop_name_map[name]
280
- ):
281
- logger.info(
282
- "Gate calibration for instruction %s on qubits %s is found "
283
- "in the PulseDefaults payload. However, this entry is not defined in "
284
- "the gate mapping of Target. This calibration is ignored.",
285
- name,
286
- qubits,
287
- )
288
- continue
289
-
290
- if (name, qubits) in faulty_ops:
291
- continue
292
-
293
- entry = inst_sched_map._get_calibration_entry(name, qubits)
294
- try:
295
- prop_name_map[name][qubits]._calibration_prop = entry
296
- except AttributeError:
297
- # if instruction properties are "None", add entry
298
- prop_name_map[name].update({qubits: InstructionProperties(None, None, entry)})
299
- logger.info(
300
- "The PulseDefaults payload received contains an instruction %s on "
301
- "qubits %s which is not present in the configuration or properties payload."
302
- "A new properties entry will be added to include the new calibration data.",
303
- name,
304
- qubits,
305
- )
306
- # Add parsed properties to target
307
- target = Target(**in_data)
308
- for inst_name in all_instructions:
309
- if inst_name == "delay" and not add_delay:
310
- continue
311
- if inst_name in qiskit_control_flow_mapping:
312
- # Control flow operator doesn't have gate property.
313
- target.add_instruction(
314
- instruction=qiskit_control_flow_mapping[inst_name],
315
- name=inst_name,
316
- )
317
- else:
318
- target.add_instruction(
319
- instruction=inst_name_map[inst_name],
320
- properties=prop_name_map.get(inst_name, None),
321
- name=inst_name,
322
- )
323
-
324
- return target
325
-
326
-
327
- def qubit_props_list_from_props(
328
- properties: BackendProperties,
329
- ) -> List[QubitProperties]:
330
- """Uses BackendProperties to construct
331
- and return a list of QubitProperties.
332
- """
333
- qubit_props: List[QubitProperties] = []
334
- for qubit, _ in enumerate(properties.qubits):
335
- try:
336
- t_1 = properties.t1(qubit)
337
- except BackendPropertyError:
338
- t_1 = None
339
- try:
340
- t_2 = properties.t2(qubit)
341
- except BackendPropertyError:
342
- t_2 = None
343
- try:
344
- frequency = properties.frequency(qubit)
345
- except BackendPropertyError:
346
- frequency = None
347
- qubit_props.append(
348
- QubitProperties( # type: ignore[no-untyped-call]
349
- t1=t_1,
350
- t2=t_2,
351
- frequency=frequency,
352
- )
353
- )
354
- return qubit_props
355
-
356
-
357
- class BackendV2Converter(BackendV2):
358
- """A converter class that takes a :class:`~.BackendV1` instance and wraps it in a
359
- :class:`~.BackendV2` interface.
360
-
361
- This class implements the :class:`~.BackendV2` interface and is used to enable
362
- common access patterns between :class:`~.BackendV1` and :class:`~.BackendV2`. This
363
- class should only be used if you need a :class:`~.BackendV2` and still need
364
- compatibility with :class:`~.BackendV1`.
365
-
366
- When using custom calibrations (or other custom workflows) it is **not** recommended
367
- to mutate the ``BackendV1`` object before applying this converter. For example, in order to
368
- convert a ``BackendV1`` object with a customized ``defaults().instruction_schedule_map``,
369
- which has a custom calibration for an operation, the operation name must be in
370
- ``configuration().basis_gates`` and ``name_mapping`` must be supplied for the operation.
371
- Otherwise, the operation will be dropped in the resulting ``BackendV2`` object.
372
-
373
- Instead it is typically better to add custom calibrations **after** applying this converter
374
- instead of updating ``BackendV1.defaults()`` in advance. For example::
375
-
376
- backend_v2 = BackendV2Converter(backend_v1)
377
- backend_v2.target.add_instruction(
378
- custom_gate, {(0, 1): InstructionProperties(calibration=custom_sched)}
379
- )
380
- """
381
-
382
- @deprecate_func(
383
- since="1.4",
384
- removal_timeline="in the 2.0 release",
385
- additional_msg="Since ``BackendV1`` is deprecated, this conversion tool from BackendV1 to "
386
- "BackendV2 is going to be removed with BackendV1.",
387
- )
388
- def __init__(
389
- self,
390
- backend: BackendV1,
391
- name_mapping: Optional[Dict[str, Any]] = None,
392
- add_delay: bool = True,
393
- filter_faulty: bool = True,
394
- ):
395
- """Initialize a BackendV2 converter instance based on a BackendV1 instance.
396
-
397
- Args:
398
- backend: The input :class:`~.BackendV1` based backend to wrap in a
399
- :class:`~.BackendV2` interface
400
- name_mapping: An optional dictionary that maps custom gate/operation names in
401
- ``backend`` to an :class:`~.Operation` object representing that
402
- gate/operation. By default most standard gates names are mapped to the
403
- standard gate object from :mod:`qiskit.circuit.library` this only needs
404
- to be specified if the input ``backend`` defines gates in names outside
405
- that set.
406
- add_delay: If set to true a :class:`~qiskit.circuit.Delay` operation
407
- will be added to the target as a supported operation for all
408
- qubits
409
- filter_faulty: If the :class:`~.BackendProperties` object (if present) for
410
- ``backend`` has any qubits or gates flagged as non-operational filter
411
- those from the output target.
412
- """
413
- self._backend = backend
414
- self._config = self._backend.configuration()
415
- super().__init__(
416
- provider=backend.provider,
417
- name=backend.name(),
418
- description=getattr(self._config, "description", None),
419
- online_date=getattr(self._config, "online_date", None),
420
- backend_version=self._config.backend_version,
421
- )
422
- self._options = self._backend._options
423
- self._properties = None
424
- self._defaults = None
425
-
426
- with warnings.catch_warnings():
427
- # The class QobjExperimentHeader is deprecated
428
- warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
429
- if hasattr(self._backend, "properties"):
430
- self._properties = self._backend.properties()
431
- if hasattr(self._backend, "defaults"):
432
- self._defaults = self._backend.defaults()
433
-
434
- self._target = None
435
- self._name_mapping = name_mapping
436
- self._add_delay = add_delay
437
- self._filter_faulty = filter_faulty
438
-
439
- @property
440
- def target(self):
441
- """A :class:`qiskit.transpiler.Target` object for the backend.
442
-
443
- :rtype: Target
444
- """
445
- if self._target is None:
446
- # If a deprecated error is raised during the conversion,
447
- # we should not return the deprecation warning to the user,
448
- # as it is not actionable for them.
449
- with warnings.catch_warnings():
450
- warnings.filterwarnings(
451
- "ignore",
452
- category=DeprecationWarning,
453
- message=".*``qiskit.providers.exceptions.BackendPropertyError``",
454
- module="qiskit",
455
- )
456
- # convert_to_target is deprecated along BackendV2Converter
457
- # They both need to be removed at the same time
458
- warnings.filterwarnings(
459
- "ignore",
460
- category=DeprecationWarning,
461
- message=r".+qiskit\.providers\.backend_compat\.convert_to_target.+",
462
- module="qiskit",
463
- )
464
- self._target = _convert_to_target(
465
- configuration=self._config,
466
- properties=self._properties,
467
- defaults=self._defaults,
468
- custom_name_mapping=self._name_mapping,
469
- add_delay=self._add_delay,
470
- filter_faulty=self._filter_faulty,
471
- )
472
- return self._target
473
-
474
- @property
475
- def max_circuits(self):
476
- return self._config.max_experiments
477
-
478
- @classmethod
479
- def _default_options(cls):
480
- return Options()
481
-
482
- @property
483
- def dtm(self) -> float:
484
- return self._config.dtm
485
-
486
- @property
487
- def meas_map(self) -> List[List[int]]:
488
- return self._config.meas_map
489
-
490
- @deprecate_pulse_dependency
491
- def drive_channel(self, qubit: int):
492
- return self._config.drive(qubit)
493
-
494
- @deprecate_pulse_dependency
495
- def measure_channel(self, qubit: int):
496
- return self._config.measure(qubit)
497
-
498
- @deprecate_pulse_dependency
499
- def acquire_channel(self, qubit: int):
500
- return self._config.acquire(qubit)
501
-
502
- @deprecate_pulse_dependency
503
- def control_channel(self, qubits: Iterable[int]):
504
- return self._config.control(qubits)
505
-
506
- def run(self, run_input, **options):
507
- return self._backend.run(run_input, **options)
@@ -1,22 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2023.
4
- #
5
- # This code is licensed under the Apache License, Version 2.0. You may
6
- # obtain a copy of this license in the LICENSE.txt file in the root directory
7
- # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
- #
9
- # Any modifications or derivative works of this code must retain this
10
- # copyright notice, and modified files need to carry a notice indicating
11
- # that they have been altered from the originals.
12
-
13
-
14
- """
15
- Fake :class:`.BackendV1` backends for testing purposes
16
- """
17
-
18
- from .fake_5q import Fake5QV1
19
- from .fake_20q import Fake20QV1
20
- from .fake_7q_pulse import Fake7QPulseV1
21
- from .fake_27q_pulse import Fake27QPulseV1
22
- from .fake_127q_pulse import Fake127QPulseV1
@@ -1,18 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2023.
4
- #
5
- # This code is licensed under the Apache License, Version 2.0. You may
6
- # obtain a copy of this license in the LICENSE.txt file in the root directory
7
- # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
- #
9
- # Any modifications or derivative works of this code must retain this
10
- # copyright notice, and modified files need to carry a notice indicating
11
- # that they have been altered from the originals.
12
-
13
-
14
- """
15
- A 127 qubit fake :class:`.BackendV1` with pulse capabilities.
16
- """
17
-
18
- from .fake_127q_pulse_v1 import Fake127QPulseV1