qiskit 1.4.1__cp39-abi3-win_amd64.whl → 2.0.0__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 (462) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +3 -9
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/circuit/__init__.py +35 -10
  5. qiskit/circuit/{add_control.py → _add_control.py} +32 -12
  6. qiskit/circuit/_classical_resource_map.py +5 -3
  7. qiskit/circuit/barrier.py +3 -7
  8. qiskit/circuit/classical/expr/__init__.py +31 -3
  9. qiskit/circuit/classical/expr/constructors.py +236 -28
  10. qiskit/circuit/classical/expr/expr.py +104 -3
  11. qiskit/circuit/classical/expr/visitors.py +75 -0
  12. qiskit/circuit/classical/types/__init__.py +12 -8
  13. qiskit/circuit/classical/types/ordering.py +14 -7
  14. qiskit/circuit/classical/types/types.py +36 -0
  15. qiskit/circuit/commutation_checker.py +34 -7
  16. qiskit/circuit/controlflow/__init__.py +32 -1
  17. qiskit/circuit/controlflow/_builder_utils.py +9 -5
  18. qiskit/circuit/controlflow/box.py +163 -0
  19. qiskit/circuit/controlflow/break_loop.py +1 -1
  20. qiskit/circuit/controlflow/builder.py +139 -39
  21. qiskit/circuit/controlflow/continue_loop.py +1 -3
  22. qiskit/circuit/controlflow/control_flow.py +10 -0
  23. qiskit/circuit/controlflow/for_loop.py +2 -1
  24. qiskit/circuit/controlflow/if_else.py +3 -16
  25. qiskit/circuit/controlflow/switch_case.py +2 -8
  26. qiskit/circuit/controlflow/while_loop.py +2 -7
  27. qiskit/circuit/controlledgate.py +2 -4
  28. qiskit/circuit/delay.py +40 -11
  29. qiskit/circuit/duration.py +0 -15
  30. qiskit/circuit/gate.py +2 -4
  31. qiskit/circuit/instruction.py +2 -141
  32. qiskit/circuit/instructionset.py +7 -54
  33. qiskit/circuit/library/__init__.py +469 -154
  34. qiskit/circuit/library/arithmetic/__init__.py +16 -10
  35. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  36. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +2 -2
  37. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
  38. qiskit/circuit/library/arithmetic/exact_reciprocal.py +64 -21
  39. qiskit/circuit/library/arithmetic/integer_comparator.py +37 -80
  40. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +169 -2
  41. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +59 -5
  42. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +154 -6
  43. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +114 -4
  44. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +191 -15
  45. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +93 -39
  46. qiskit/circuit/library/arithmetic/quadratic_form.py +168 -2
  47. qiskit/circuit/library/arithmetic/weighted_adder.py +73 -1
  48. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  49. qiskit/circuit/library/blueprintcircuit.py +52 -16
  50. qiskit/circuit/library/data_preparation/initializer.py +1 -1
  51. qiskit/circuit/library/data_preparation/pauli_feature_map.py +4 -4
  52. qiskit/circuit/library/data_preparation/state_preparation.py +1 -1
  53. qiskit/circuit/library/generalized_gates/gms.py +1 -1
  54. qiskit/circuit/library/generalized_gates/isometry.py +1 -1
  55. qiskit/circuit/library/generalized_gates/pauli.py +1 -2
  56. qiskit/circuit/library/generalized_gates/uc.py +97 -7
  57. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +1 -1
  58. qiskit/circuit/library/generalized_gates/unitary.py +4 -2
  59. qiskit/circuit/library/graph_state.py +1 -0
  60. qiskit/circuit/library/hamiltonian_gate.py +1 -1
  61. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  62. qiskit/circuit/library/n_local/n_local.py +1 -1
  63. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  64. qiskit/circuit/library/overlap.py +2 -2
  65. qiskit/circuit/library/pauli_evolution.py +39 -24
  66. qiskit/circuit/library/phase_oracle.py +130 -51
  67. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  68. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  69. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  70. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  71. qiskit/circuit/library/standard_gates/h.py +4 -9
  72. qiskit/circuit/library/standard_gates/i.py +2 -2
  73. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  74. qiskit/circuit/library/standard_gates/p.py +15 -34
  75. qiskit/circuit/library/standard_gates/r.py +7 -10
  76. qiskit/circuit/library/standard_gates/rx.py +5 -15
  77. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  78. qiskit/circuit/library/standard_gates/ry.py +5 -17
  79. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  80. qiskit/circuit/library/standard_gates/rz.py +5 -17
  81. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  82. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  83. qiskit/circuit/library/standard_gates/s.py +6 -15
  84. qiskit/circuit/library/standard_gates/swap.py +4 -11
  85. qiskit/circuit/library/standard_gates/sx.py +7 -12
  86. qiskit/circuit/library/standard_gates/t.py +6 -7
  87. qiskit/circuit/library/standard_gates/u.py +2 -10
  88. qiskit/circuit/library/standard_gates/u1.py +5 -16
  89. qiskit/circuit/library/standard_gates/u2.py +2 -6
  90. qiskit/circuit/library/standard_gates/u3.py +3 -11
  91. qiskit/circuit/library/standard_gates/x.py +14 -62
  92. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  94. qiskit/circuit/library/standard_gates/y.py +4 -9
  95. qiskit/circuit/library/standard_gates/z.py +5 -15
  96. qiskit/circuit/measure.py +11 -2
  97. qiskit/circuit/parameterexpression.py +11 -0
  98. qiskit/circuit/quantumcircuit.py +890 -564
  99. qiskit/circuit/random/utils.py +12 -6
  100. qiskit/circuit/reset.py +5 -2
  101. qiskit/circuit/singleton.py +5 -11
  102. qiskit/circuit/store.py +0 -8
  103. qiskit/circuit/tools/pi_check.py +3 -0
  104. qiskit/compiler/__init__.py +1 -7
  105. qiskit/compiler/transpiler.py +38 -196
  106. qiskit/converters/circuit_to_dag.py +6 -4
  107. qiskit/converters/circuit_to_dagdependency.py +0 -2
  108. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  109. qiskit/converters/circuit_to_gate.py +1 -1
  110. qiskit/converters/circuit_to_instruction.py +16 -29
  111. qiskit/converters/dag_to_circuit.py +7 -8
  112. qiskit/converters/dag_to_dagdependency.py +0 -1
  113. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  114. qiskit/converters/dagdependency_to_circuit.py +0 -6
  115. qiskit/converters/dagdependency_to_dag.py +0 -6
  116. qiskit/dagcircuit/collect_blocks.py +32 -20
  117. qiskit/dagcircuit/dagdependency.py +3 -37
  118. qiskit/dagcircuit/dagdependency_v2.py +5 -82
  119. qiskit/dagcircuit/dagnode.py +14 -2
  120. qiskit/passmanager/__init__.py +24 -6
  121. qiskit/passmanager/passmanager.py +26 -24
  122. qiskit/primitives/__init__.py +44 -35
  123. qiskit/primitives/backend_estimator_v2.py +102 -23
  124. qiskit/primitives/backend_sampler_v2.py +5 -20
  125. qiskit/primitives/base/__init__.py +4 -4
  126. qiskit/primitives/base/base_estimator.py +77 -82
  127. qiskit/primitives/base/base_primitive_job.py +2 -2
  128. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  129. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  130. qiskit/primitives/base/base_sampler.py +52 -60
  131. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  132. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  133. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  134. qiskit/primitives/containers/bindings_array.py +3 -1
  135. qiskit/primitives/containers/bit_array.py +23 -0
  136. qiskit/primitives/containers/data_bin.py +3 -1
  137. qiskit/primitives/containers/observables_array.py +19 -2
  138. qiskit/primitives/statevector_sampler.py +6 -8
  139. qiskit/primitives/utils.py +14 -189
  140. qiskit/providers/__init__.py +4 -130
  141. qiskit/providers/backend.py +11 -314
  142. qiskit/providers/basic_provider/__init__.py +3 -1
  143. qiskit/providers/basic_provider/basic_provider.py +29 -9
  144. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  145. qiskit/providers/exceptions.py +0 -33
  146. qiskit/providers/fake_provider/__init__.py +0 -37
  147. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  148. qiskit/qasm2/__init__.py +21 -6
  149. qiskit/qasm2/export.py +2 -10
  150. qiskit/qasm2/parse.py +11 -25
  151. qiskit/qasm3/__init__.py +5 -1
  152. qiskit/qasm3/ast.py +44 -0
  153. qiskit/qasm3/exporter.py +65 -27
  154. qiskit/qasm3/printer.py +35 -4
  155. qiskit/qpy/__init__.py +162 -19
  156. qiskit/qpy/binary_io/__init__.py +0 -1
  157. qiskit/qpy/binary_io/circuits.py +96 -116
  158. qiskit/qpy/binary_io/parse_sympy_repr.py +121 -0
  159. qiskit/qpy/binary_io/schedules.py +61 -388
  160. qiskit/qpy/binary_io/value.py +159 -33
  161. qiskit/qpy/common.py +10 -7
  162. qiskit/qpy/formats.py +41 -0
  163. qiskit/qpy/interface.py +29 -62
  164. qiskit/qpy/type_keys.py +58 -221
  165. qiskit/quantum_info/analysis/distance.py +3 -1
  166. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  167. qiskit/quantum_info/operators/operator.py +6 -2
  168. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  169. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  170. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  171. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  172. qiskit/quantum_info/states/densitymatrix.py +16 -6
  173. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  174. qiskit/quantum_info/states/statevector.py +16 -6
  175. qiskit/result/__init__.py +5 -17
  176. qiskit/result/models.py +18 -11
  177. qiskit/result/result.py +38 -134
  178. qiskit/result/sampled_expval.py +1 -2
  179. qiskit/result/utils.py +3 -4
  180. qiskit/synthesis/__init__.py +21 -1
  181. qiskit/synthesis/arithmetic/__init__.py +3 -1
  182. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  183. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  184. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  185. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  186. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  187. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  188. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  189. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  190. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  191. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  192. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  193. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  194. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  195. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -0
  196. qiskit/synthesis/evolution/lie_trotter.py +10 -7
  197. qiskit/synthesis/evolution/product_formula.py +44 -35
  198. qiskit/synthesis/evolution/qdrift.py +17 -24
  199. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  200. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  201. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  202. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  203. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  204. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  205. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  206. qiskit/synthesis/two_qubit/__init__.py +1 -0
  207. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  208. qiskit/transpiler/__init__.py +32 -232
  209. qiskit/transpiler/basepasses.py +20 -51
  210. qiskit/transpiler/layout.py +1 -1
  211. qiskit/transpiler/passes/__init__.py +4 -40
  212. qiskit/transpiler/passes/basis/basis_translator.py +5 -4
  213. qiskit/transpiler/passes/basis/decompose.py +1 -15
  214. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  215. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  216. qiskit/transpiler/passes/layout/apply_layout.py +4 -0
  217. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  218. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +3 -4
  219. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  220. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  221. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  222. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  223. qiskit/transpiler/passes/optimization/__init__.py +2 -3
  224. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  225. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  226. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  227. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  228. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  229. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  230. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  231. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  232. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  233. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  234. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  235. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  236. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  237. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  238. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +3 -2
  239. qiskit/transpiler/passes/routing/__init__.py +0 -1
  240. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  241. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  242. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  243. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  244. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  245. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  246. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  247. qiskit/transpiler/passes/scheduling/padding/base_padding.py +32 -4
  248. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +25 -63
  249. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +12 -4
  250. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  251. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  252. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  253. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +134 -62
  254. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  255. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  256. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  257. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  258. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  259. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  260. qiskit/transpiler/passes/utils/__init__.py +0 -1
  261. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  262. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  263. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  264. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  265. qiskit/transpiler/passmanager.py +13 -0
  266. qiskit/transpiler/passmanager_config.py +5 -81
  267. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  268. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  269. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +107 -322
  270. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  271. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  272. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  273. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  274. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  275. qiskit/transpiler/target.py +78 -524
  276. qiskit/user_config.py +8 -4
  277. qiskit/utils/__init__.py +13 -12
  278. qiskit/utils/deprecation.py +4 -112
  279. qiskit/utils/optionals.py +11 -4
  280. qiskit/utils/parallel.py +214 -87
  281. qiskit/utils/units.py +4 -1
  282. qiskit/visualization/__init__.py +3 -7
  283. qiskit/visualization/array.py +4 -1
  284. qiskit/visualization/bloch.py +1 -1
  285. qiskit/visualization/circuit/_utils.py +19 -19
  286. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  287. qiskit/visualization/circuit/matplotlib.py +13 -23
  288. qiskit/visualization/circuit/text.py +7 -3
  289. qiskit/visualization/counts_visualization.py +4 -0
  290. qiskit/visualization/dag_visualization.py +2 -1
  291. qiskit/visualization/gate_map.py +39 -154
  292. qiskit/visualization/library.py +4 -1
  293. qiskit/visualization/pass_manager_visualization.py +6 -2
  294. qiskit/visualization/state_visualization.py +19 -2
  295. qiskit/visualization/timeline/core.py +19 -13
  296. qiskit/visualization/timeline/interface.py +19 -18
  297. qiskit/visualization/timeline/plotters/matplotlib.py +4 -1
  298. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/METADATA +4 -3
  299. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/RECORD +303 -449
  300. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/WHEEL +1 -1
  301. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/entry_points.txt +8 -2
  302. qiskit/assembler/__init__.py +0 -42
  303. qiskit/assembler/assemble_circuits.py +0 -451
  304. qiskit/assembler/assemble_schedules.py +0 -367
  305. qiskit/assembler/disassemble.py +0 -310
  306. qiskit/assembler/run_config.py +0 -77
  307. qiskit/circuit/bit.py +0 -106
  308. qiskit/circuit/classicalfunction/__init__.py +0 -152
  309. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  310. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  311. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  312. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  313. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  314. qiskit/circuit/classicalfunction/types.py +0 -18
  315. qiskit/circuit/classicalfunction/utils.py +0 -91
  316. qiskit/circuit/classicalregister.py +0 -57
  317. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  318. qiskit/circuit/quantumregister.py +0 -75
  319. qiskit/circuit/register.py +0 -246
  320. qiskit/compiler/assembler.py +0 -689
  321. qiskit/compiler/scheduler.py +0 -109
  322. qiskit/compiler/sequencer.py +0 -71
  323. qiskit/primitives/backend_estimator.py +0 -486
  324. qiskit/primitives/backend_sampler.py +0 -222
  325. qiskit/primitives/estimator.py +0 -172
  326. qiskit/primitives/sampler.py +0 -162
  327. qiskit/providers/backend_compat.py +0 -507
  328. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  329. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  330. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  332. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  333. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  335. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  336. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  337. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  338. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  339. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  341. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  342. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  343. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  344. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  345. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  346. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  347. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  348. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  349. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  350. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  351. qiskit/providers/fake_provider/fake_1q.py +0 -91
  352. qiskit/providers/fake_provider/fake_backend.py +0 -165
  353. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  354. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  355. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  356. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  357. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  358. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  359. qiskit/providers/models/__init__.py +0 -89
  360. qiskit/providers/models/backendconfiguration.py +0 -1040
  361. qiskit/providers/models/backendproperties.py +0 -535
  362. qiskit/providers/models/backendstatus.py +0 -104
  363. qiskit/providers/models/jobstatus.py +0 -77
  364. qiskit/providers/models/pulsedefaults.py +0 -305
  365. qiskit/providers/provider.py +0 -95
  366. qiskit/pulse/__init__.py +0 -158
  367. qiskit/pulse/builder.py +0 -2262
  368. qiskit/pulse/calibration_entries.py +0 -381
  369. qiskit/pulse/channels.py +0 -227
  370. qiskit/pulse/configuration.py +0 -245
  371. qiskit/pulse/exceptions.py +0 -45
  372. qiskit/pulse/filters.py +0 -309
  373. qiskit/pulse/instruction_schedule_map.py +0 -424
  374. qiskit/pulse/instructions/__init__.py +0 -67
  375. qiskit/pulse/instructions/acquire.py +0 -150
  376. qiskit/pulse/instructions/delay.py +0 -71
  377. qiskit/pulse/instructions/directives.py +0 -154
  378. qiskit/pulse/instructions/frequency.py +0 -135
  379. qiskit/pulse/instructions/instruction.py +0 -270
  380. qiskit/pulse/instructions/phase.py +0 -152
  381. qiskit/pulse/instructions/play.py +0 -99
  382. qiskit/pulse/instructions/reference.py +0 -100
  383. qiskit/pulse/instructions/snapshot.py +0 -82
  384. qiskit/pulse/library/__init__.py +0 -97
  385. qiskit/pulse/library/continuous.py +0 -430
  386. qiskit/pulse/library/pulse.py +0 -148
  387. qiskit/pulse/library/samplers/__init__.py +0 -15
  388. qiskit/pulse/library/samplers/decorators.py +0 -295
  389. qiskit/pulse/library/samplers/strategies.py +0 -71
  390. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  391. qiskit/pulse/library/waveform.py +0 -136
  392. qiskit/pulse/macros.py +0 -262
  393. qiskit/pulse/parameter_manager.py +0 -445
  394. qiskit/pulse/parser.py +0 -314
  395. qiskit/pulse/reference_manager.py +0 -58
  396. qiskit/pulse/schedule.py +0 -1854
  397. qiskit/pulse/transforms/__init__.py +0 -106
  398. qiskit/pulse/transforms/alignments.py +0 -406
  399. qiskit/pulse/transforms/base_transforms.py +0 -71
  400. qiskit/pulse/transforms/canonicalization.py +0 -498
  401. qiskit/pulse/transforms/dag.py +0 -122
  402. qiskit/pulse/utils.py +0 -149
  403. qiskit/qobj/__init__.py +0 -75
  404. qiskit/qobj/common.py +0 -81
  405. qiskit/qobj/converters/__init__.py +0 -18
  406. qiskit/qobj/converters/lo_config.py +0 -177
  407. qiskit/qobj/converters/pulse_instruction.py +0 -897
  408. qiskit/qobj/pulse_qobj.py +0 -709
  409. qiskit/qobj/qasm_qobj.py +0 -708
  410. qiskit/qobj/utils.py +0 -46
  411. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  412. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  413. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  414. qiskit/result/mitigation/utils.py +0 -217
  415. qiskit/scheduler/__init__.py +0 -40
  416. qiskit/scheduler/config.py +0 -37
  417. qiskit/scheduler/lowering.py +0 -187
  418. qiskit/scheduler/methods/__init__.py +0 -15
  419. qiskit/scheduler/methods/basic.py +0 -140
  420. qiskit/scheduler/schedule_circuit.py +0 -69
  421. qiskit/scheduler/sequence.py +0 -104
  422. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  423. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  424. qiskit/transpiler/passes/calibration/builders.py +0 -20
  425. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  426. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  427. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  428. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  429. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  430. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  431. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  432. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  433. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  434. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  435. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  436. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  437. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  438. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  439. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  440. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  441. qiskit/utils/deprecate_pulse.py +0 -119
  442. qiskit/utils/multiprocessing.py +0 -56
  443. qiskit/visualization/pulse_v2/__init__.py +0 -21
  444. qiskit/visualization/pulse_v2/core.py +0 -901
  445. qiskit/visualization/pulse_v2/device_info.py +0 -173
  446. qiskit/visualization/pulse_v2/drawings.py +0 -253
  447. qiskit/visualization/pulse_v2/events.py +0 -254
  448. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  449. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  450. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  451. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  452. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  453. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  454. qiskit/visualization/pulse_v2/interface.py +0 -459
  455. qiskit/visualization/pulse_v2/layouts.py +0 -387
  456. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  457. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  458. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  459. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  460. qiskit/visualization/pulse_v2/types.py +0 -242
  461. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
  462. {qiskit-1.4.1.dist-info → qiskit-2.0.0.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