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