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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +2 -5
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/circuit/__init__.py +24 -5
  5. qiskit/circuit/{add_control.py → _add_control.py} +32 -12
  6. qiskit/circuit/_classical_resource_map.py +5 -3
  7. qiskit/circuit/barrier.py +3 -7
  8. qiskit/circuit/classical/expr/__init__.py +31 -3
  9. qiskit/circuit/classical/expr/constructors.py +248 -28
  10. qiskit/circuit/classical/expr/expr.py +104 -3
  11. qiskit/circuit/classical/expr/visitors.py +75 -0
  12. qiskit/circuit/classical/types/__init__.py +12 -8
  13. qiskit/circuit/classical/types/ordering.py +14 -7
  14. qiskit/circuit/classical/types/types.py +36 -0
  15. qiskit/circuit/commutation_checker.py +34 -7
  16. qiskit/circuit/controlflow/__init__.py +32 -1
  17. qiskit/circuit/controlflow/_builder_utils.py +9 -5
  18. qiskit/circuit/controlflow/box.py +163 -0
  19. qiskit/circuit/controlflow/break_loop.py +1 -1
  20. qiskit/circuit/controlflow/builder.py +139 -39
  21. qiskit/circuit/controlflow/continue_loop.py +1 -3
  22. qiskit/circuit/controlflow/control_flow.py +10 -0
  23. qiskit/circuit/controlflow/for_loop.py +2 -1
  24. qiskit/circuit/controlflow/if_else.py +3 -16
  25. qiskit/circuit/controlflow/switch_case.py +2 -8
  26. qiskit/circuit/controlflow/while_loop.py +2 -7
  27. qiskit/circuit/controlledgate.py +2 -4
  28. qiskit/circuit/delay.py +40 -11
  29. qiskit/circuit/duration.py +0 -15
  30. qiskit/circuit/gate.py +2 -4
  31. qiskit/circuit/instruction.py +2 -141
  32. qiskit/circuit/instructionset.py +7 -54
  33. qiskit/circuit/library/__init__.py +34 -5
  34. qiskit/circuit/library/arithmetic/__init__.py +16 -10
  35. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  36. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +2 -2
  37. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
  38. qiskit/circuit/library/arithmetic/exact_reciprocal.py +64 -21
  39. qiskit/circuit/library/arithmetic/integer_comparator.py +37 -80
  40. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +169 -2
  41. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +59 -5
  42. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +154 -6
  43. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +114 -4
  44. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +191 -15
  45. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +93 -39
  46. qiskit/circuit/library/arithmetic/quadratic_form.py +168 -2
  47. qiskit/circuit/library/arithmetic/weighted_adder.py +73 -1
  48. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  49. qiskit/circuit/library/blueprintcircuit.py +52 -16
  50. qiskit/circuit/library/data_preparation/initializer.py +1 -1
  51. qiskit/circuit/library/data_preparation/pauli_feature_map.py +4 -4
  52. qiskit/circuit/library/data_preparation/state_preparation.py +1 -1
  53. qiskit/circuit/library/generalized_gates/gms.py +1 -1
  54. qiskit/circuit/library/generalized_gates/isometry.py +1 -1
  55. qiskit/circuit/library/generalized_gates/pauli.py +1 -2
  56. qiskit/circuit/library/generalized_gates/uc.py +97 -7
  57. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +1 -1
  58. qiskit/circuit/library/generalized_gates/unitary.py +4 -2
  59. qiskit/circuit/library/hamiltonian_gate.py +1 -1
  60. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  61. qiskit/circuit/library/n_local/n_local.py +1 -1
  62. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  63. qiskit/circuit/library/overlap.py +2 -2
  64. qiskit/circuit/library/pauli_evolution.py +39 -24
  65. qiskit/circuit/library/phase_oracle.py +130 -51
  66. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  67. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  68. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  69. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  70. qiskit/circuit/library/standard_gates/h.py +4 -9
  71. qiskit/circuit/library/standard_gates/i.py +2 -2
  72. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  73. qiskit/circuit/library/standard_gates/p.py +15 -34
  74. qiskit/circuit/library/standard_gates/r.py +2 -6
  75. qiskit/circuit/library/standard_gates/rx.py +5 -15
  76. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  77. qiskit/circuit/library/standard_gates/ry.py +5 -17
  78. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  79. qiskit/circuit/library/standard_gates/rz.py +5 -17
  80. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  81. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  82. qiskit/circuit/library/standard_gates/s.py +6 -15
  83. qiskit/circuit/library/standard_gates/swap.py +4 -11
  84. qiskit/circuit/library/standard_gates/sx.py +7 -12
  85. qiskit/circuit/library/standard_gates/t.py +6 -7
  86. qiskit/circuit/library/standard_gates/u.py +2 -10
  87. qiskit/circuit/library/standard_gates/u1.py +5 -16
  88. qiskit/circuit/library/standard_gates/u2.py +2 -6
  89. qiskit/circuit/library/standard_gates/u3.py +3 -11
  90. qiskit/circuit/library/standard_gates/x.py +13 -60
  91. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  92. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/y.py +4 -9
  94. qiskit/circuit/library/standard_gates/z.py +5 -15
  95. qiskit/circuit/measure.py +11 -2
  96. qiskit/circuit/parameterexpression.py +4 -0
  97. qiskit/circuit/quantumcircuit.py +881 -555
  98. qiskit/circuit/random/utils.py +12 -6
  99. qiskit/circuit/reset.py +5 -2
  100. qiskit/circuit/singleton.py +5 -11
  101. qiskit/circuit/store.py +0 -8
  102. qiskit/compiler/__init__.py +1 -7
  103. qiskit/compiler/transpiler.py +38 -196
  104. qiskit/converters/circuit_to_dag.py +4 -2
  105. qiskit/converters/circuit_to_dagdependency.py +0 -2
  106. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  107. qiskit/converters/circuit_to_gate.py +1 -1
  108. qiskit/converters/circuit_to_instruction.py +16 -29
  109. qiskit/converters/dag_to_circuit.py +5 -5
  110. qiskit/converters/dag_to_dagdependency.py +0 -1
  111. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  112. qiskit/converters/dagdependency_to_circuit.py +0 -6
  113. qiskit/converters/dagdependency_to_dag.py +0 -6
  114. qiskit/dagcircuit/collect_blocks.py +32 -20
  115. qiskit/dagcircuit/dagdependency.py +3 -37
  116. qiskit/dagcircuit/dagdependency_v2.py +2 -80
  117. qiskit/dagcircuit/dagnode.py +14 -2
  118. qiskit/passmanager/__init__.py +24 -6
  119. qiskit/passmanager/passmanager.py +26 -24
  120. qiskit/primitives/__init__.py +44 -35
  121. qiskit/primitives/backend_estimator_v2.py +102 -23
  122. qiskit/primitives/backend_sampler_v2.py +5 -20
  123. qiskit/primitives/base/__init__.py +4 -4
  124. qiskit/primitives/base/base_estimator.py +77 -82
  125. qiskit/primitives/base/base_primitive_job.py +2 -2
  126. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  127. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  128. qiskit/primitives/base/base_sampler.py +52 -60
  129. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  130. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  131. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  132. qiskit/primitives/containers/bindings_array.py +3 -1
  133. qiskit/primitives/containers/bit_array.py +23 -0
  134. qiskit/primitives/containers/data_bin.py +3 -1
  135. qiskit/primitives/containers/observables_array.py +19 -2
  136. qiskit/primitives/statevector_sampler.py +6 -8
  137. qiskit/primitives/utils.py +14 -189
  138. qiskit/providers/__init__.py +4 -130
  139. qiskit/providers/backend.py +11 -314
  140. qiskit/providers/basic_provider/__init__.py +3 -1
  141. qiskit/providers/basic_provider/basic_provider.py +29 -9
  142. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  143. qiskit/providers/exceptions.py +0 -33
  144. qiskit/providers/fake_provider/__init__.py +0 -37
  145. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  146. qiskit/qasm2/__init__.py +21 -6
  147. qiskit/qasm2/export.py +2 -10
  148. qiskit/qasm2/parse.py +11 -25
  149. qiskit/qasm3/__init__.py +5 -1
  150. qiskit/qasm3/ast.py +44 -0
  151. qiskit/qasm3/exporter.py +65 -27
  152. qiskit/qasm3/printer.py +35 -4
  153. qiskit/qpy/__init__.py +141 -19
  154. qiskit/qpy/binary_io/__init__.py +0 -1
  155. qiskit/qpy/binary_io/circuits.py +91 -116
  156. qiskit/qpy/binary_io/schedules.py +61 -388
  157. qiskit/qpy/binary_io/value.py +154 -28
  158. qiskit/qpy/common.py +10 -7
  159. qiskit/qpy/formats.py +41 -0
  160. qiskit/qpy/interface.py +29 -62
  161. qiskit/qpy/type_keys.py +58 -221
  162. qiskit/quantum_info/analysis/distance.py +3 -1
  163. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  164. qiskit/quantum_info/operators/operator.py +6 -2
  165. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  166. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  167. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  168. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  169. qiskit/quantum_info/states/densitymatrix.py +16 -6
  170. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  171. qiskit/quantum_info/states/statevector.py +16 -6
  172. qiskit/result/__init__.py +5 -17
  173. qiskit/result/models.py +18 -10
  174. qiskit/result/result.py +28 -126
  175. qiskit/result/sampled_expval.py +1 -2
  176. qiskit/result/utils.py +3 -4
  177. qiskit/synthesis/__init__.py +21 -1
  178. qiskit/synthesis/arithmetic/__init__.py +3 -1
  179. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  180. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  181. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  182. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  183. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  184. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  185. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  186. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  187. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  188. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  189. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  190. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  191. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  192. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -0
  193. qiskit/synthesis/evolution/lie_trotter.py +10 -7
  194. qiskit/synthesis/evolution/product_formula.py +44 -35
  195. qiskit/synthesis/evolution/qdrift.py +17 -24
  196. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  197. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  198. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  199. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  200. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  201. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  202. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  203. qiskit/synthesis/two_qubit/__init__.py +1 -0
  204. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  205. qiskit/transpiler/__init__.py +32 -232
  206. qiskit/transpiler/basepasses.py +20 -51
  207. qiskit/transpiler/layout.py +1 -1
  208. qiskit/transpiler/passes/__init__.py +2 -40
  209. qiskit/transpiler/passes/basis/basis_translator.py +4 -3
  210. qiskit/transpiler/passes/basis/decompose.py +1 -15
  211. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  212. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  213. qiskit/transpiler/passes/layout/apply_layout.py +4 -0
  214. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  215. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +4 -4
  216. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  217. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  218. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  219. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  220. qiskit/transpiler/passes/optimization/__init__.py +1 -3
  221. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  222. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  223. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  224. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  225. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  226. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  227. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  228. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  229. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  230. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  231. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  232. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  233. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  234. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  235. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -0
  236. qiskit/transpiler/passes/routing/__init__.py +0 -1
  237. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  238. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  239. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  240. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  241. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  242. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  243. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  244. qiskit/transpiler/passes/scheduling/padding/base_padding.py +30 -2
  245. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -58
  246. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +11 -3
  247. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  248. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  249. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  250. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +127 -59
  251. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  252. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  253. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  254. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  255. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  256. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  257. qiskit/transpiler/passes/utils/__init__.py +0 -1
  258. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  259. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  260. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  261. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  262. qiskit/transpiler/passmanager.py +13 -0
  263. qiskit/transpiler/passmanager_config.py +5 -81
  264. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  265. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  266. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +101 -322
  267. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  268. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  269. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  270. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  271. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  272. qiskit/transpiler/target.py +67 -524
  273. qiskit/user_config.py +8 -4
  274. qiskit/utils/__init__.py +13 -12
  275. qiskit/utils/deprecation.py +4 -112
  276. qiskit/utils/optionals.py +11 -4
  277. qiskit/utils/parallel.py +214 -87
  278. qiskit/utils/units.py +4 -1
  279. qiskit/visualization/__init__.py +3 -7
  280. qiskit/visualization/array.py +4 -1
  281. qiskit/visualization/bloch.py +1 -1
  282. qiskit/visualization/circuit/_utils.py +19 -19
  283. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  284. qiskit/visualization/circuit/matplotlib.py +13 -23
  285. qiskit/visualization/circuit/text.py +7 -3
  286. qiskit/visualization/dag_visualization.py +2 -1
  287. qiskit/visualization/gate_map.py +39 -154
  288. qiskit/visualization/pass_manager_visualization.py +6 -2
  289. qiskit/visualization/state_visualization.py +6 -0
  290. qiskit/visualization/timeline/core.py +18 -12
  291. qiskit/visualization/timeline/interface.py +19 -18
  292. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/METADATA +2 -2
  293. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/RECORD +297 -444
  294. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/WHEEL +2 -1
  295. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/entry_points.txt +8 -2
  296. qiskit/assembler/__init__.py +0 -42
  297. qiskit/assembler/assemble_circuits.py +0 -451
  298. qiskit/assembler/assemble_schedules.py +0 -367
  299. qiskit/assembler/disassemble.py +0 -310
  300. qiskit/assembler/run_config.py +0 -77
  301. qiskit/circuit/bit.py +0 -106
  302. qiskit/circuit/classicalfunction/__init__.py +0 -152
  303. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  304. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  305. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  306. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  307. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  308. qiskit/circuit/classicalfunction/types.py +0 -18
  309. qiskit/circuit/classicalfunction/utils.py +0 -91
  310. qiskit/circuit/classicalregister.py +0 -57
  311. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  312. qiskit/circuit/quantumregister.py +0 -75
  313. qiskit/circuit/register.py +0 -246
  314. qiskit/compiler/assembler.py +0 -689
  315. qiskit/compiler/scheduler.py +0 -109
  316. qiskit/compiler/sequencer.py +0 -71
  317. qiskit/primitives/backend_estimator.py +0 -486
  318. qiskit/primitives/backend_sampler.py +0 -222
  319. qiskit/primitives/estimator.py +0 -172
  320. qiskit/primitives/sampler.py +0 -162
  321. qiskit/providers/backend_compat.py +0 -507
  322. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  323. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  324. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  325. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  326. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  327. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  328. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  329. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  330. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  332. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  333. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  335. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  336. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  337. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  338. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  339. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  341. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  342. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  343. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  344. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  345. qiskit/providers/fake_provider/fake_1q.py +0 -91
  346. qiskit/providers/fake_provider/fake_backend.py +0 -165
  347. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  348. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  349. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  350. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  351. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  352. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  353. qiskit/providers/models/__init__.py +0 -89
  354. qiskit/providers/models/backendconfiguration.py +0 -1040
  355. qiskit/providers/models/backendproperties.py +0 -535
  356. qiskit/providers/models/backendstatus.py +0 -104
  357. qiskit/providers/models/jobstatus.py +0 -77
  358. qiskit/providers/models/pulsedefaults.py +0 -305
  359. qiskit/providers/provider.py +0 -95
  360. qiskit/pulse/__init__.py +0 -158
  361. qiskit/pulse/builder.py +0 -2262
  362. qiskit/pulse/calibration_entries.py +0 -381
  363. qiskit/pulse/channels.py +0 -227
  364. qiskit/pulse/configuration.py +0 -245
  365. qiskit/pulse/exceptions.py +0 -45
  366. qiskit/pulse/filters.py +0 -309
  367. qiskit/pulse/instruction_schedule_map.py +0 -424
  368. qiskit/pulse/instructions/__init__.py +0 -67
  369. qiskit/pulse/instructions/acquire.py +0 -150
  370. qiskit/pulse/instructions/delay.py +0 -71
  371. qiskit/pulse/instructions/directives.py +0 -154
  372. qiskit/pulse/instructions/frequency.py +0 -135
  373. qiskit/pulse/instructions/instruction.py +0 -270
  374. qiskit/pulse/instructions/phase.py +0 -152
  375. qiskit/pulse/instructions/play.py +0 -99
  376. qiskit/pulse/instructions/reference.py +0 -100
  377. qiskit/pulse/instructions/snapshot.py +0 -82
  378. qiskit/pulse/library/__init__.py +0 -97
  379. qiskit/pulse/library/continuous.py +0 -430
  380. qiskit/pulse/library/pulse.py +0 -148
  381. qiskit/pulse/library/samplers/__init__.py +0 -15
  382. qiskit/pulse/library/samplers/decorators.py +0 -295
  383. qiskit/pulse/library/samplers/strategies.py +0 -71
  384. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  385. qiskit/pulse/library/waveform.py +0 -136
  386. qiskit/pulse/macros.py +0 -262
  387. qiskit/pulse/parameter_manager.py +0 -445
  388. qiskit/pulse/parser.py +0 -314
  389. qiskit/pulse/reference_manager.py +0 -58
  390. qiskit/pulse/schedule.py +0 -1854
  391. qiskit/pulse/transforms/__init__.py +0 -106
  392. qiskit/pulse/transforms/alignments.py +0 -406
  393. qiskit/pulse/transforms/base_transforms.py +0 -71
  394. qiskit/pulse/transforms/canonicalization.py +0 -498
  395. qiskit/pulse/transforms/dag.py +0 -122
  396. qiskit/pulse/utils.py +0 -149
  397. qiskit/qobj/__init__.py +0 -75
  398. qiskit/qobj/common.py +0 -81
  399. qiskit/qobj/converters/__init__.py +0 -18
  400. qiskit/qobj/converters/lo_config.py +0 -177
  401. qiskit/qobj/converters/pulse_instruction.py +0 -897
  402. qiskit/qobj/pulse_qobj.py +0 -709
  403. qiskit/qobj/qasm_qobj.py +0 -708
  404. qiskit/qobj/utils.py +0 -46
  405. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  406. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  407. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  408. qiskit/result/mitigation/utils.py +0 -217
  409. qiskit/scheduler/__init__.py +0 -40
  410. qiskit/scheduler/config.py +0 -37
  411. qiskit/scheduler/lowering.py +0 -187
  412. qiskit/scheduler/methods/__init__.py +0 -15
  413. qiskit/scheduler/methods/basic.py +0 -140
  414. qiskit/scheduler/schedule_circuit.py +0 -69
  415. qiskit/scheduler/sequence.py +0 -104
  416. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  417. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  418. qiskit/transpiler/passes/calibration/builders.py +0 -20
  419. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  420. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  421. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  422. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  423. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  424. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  425. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  426. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  427. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  428. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  429. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  430. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  431. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  432. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  433. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  434. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  435. qiskit/utils/deprecate_pulse.py +0 -119
  436. qiskit/utils/multiprocessing.py +0 -56
  437. qiskit/visualization/pulse_v2/__init__.py +0 -21
  438. qiskit/visualization/pulse_v2/core.py +0 -901
  439. qiskit/visualization/pulse_v2/device_info.py +0 -173
  440. qiskit/visualization/pulse_v2/drawings.py +0 -253
  441. qiskit/visualization/pulse_v2/events.py +0 -254
  442. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  443. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  444. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  445. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  446. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  447. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  448. qiskit/visualization/pulse_v2/interface.py +0 -459
  449. qiskit/visualization/pulse_v2/layouts.py +0 -387
  450. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  451. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  452. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  453. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  454. qiskit/visualization/pulse_v2/types.py +0 -242
  455. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/LICENSE.txt +0 -0
  456. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -15,12 +15,8 @@
15
15
  from __future__ import annotations
16
16
  import warnings
17
17
 
18
- from collections.abc import Iterable
19
- from typing import List, Dict, Any, Union
20
18
  import numpy as np
21
19
 
22
- from qiskit import pulse
23
- from qiskit.pulse.instruction_schedule_map import InstructionScheduleMap
24
20
  from qiskit.circuit import QuantumCircuit, Instruction
25
21
  from qiskit.circuit.controlflow import (
26
22
  IfElseOp,
@@ -37,12 +33,6 @@ from qiskit.providers import Options
37
33
  from qiskit.providers.basic_provider import BasicSimulator
38
34
  from qiskit.providers.backend import BackendV2
39
35
  from qiskit.utils import optionals as _optionals
40
- from qiskit.providers.models.pulsedefaults import Command
41
- from qiskit.qobj.converters.pulse_instruction import QobjToInstructionConverter
42
- from qiskit.pulse.calibration_entries import PulseQobjDef
43
- from qiskit.providers.models.pulsedefaults import MeasurementKernel, Discriminator
44
- from qiskit.qobj.pulse_qobj import QobjMeasurementOption
45
- from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency, deprecate_pulse_arg
46
36
 
47
37
  # Noise default values/ranges for duration and error of supported
48
38
  # instructions. There are two possible formats:
@@ -77,440 +67,13 @@ _QUBIT_PROPERTIES = {
77
67
  }
78
68
 
79
69
 
80
- class PulseDefaults:
81
- """Internal - Description of default settings for Pulse systems. These are instructions
82
- or settings that
83
- may be good starting points for the Pulse user. The user may modify these defaults for custom
84
- scheduling.
85
- """
86
-
87
- # Copy from the deprecated from qiskit.providers.models.pulsedefaults.PulseDefaults
88
-
89
- _data = {}
90
-
91
- def __init__(
92
- self,
93
- qubit_freq_est: List[float],
94
- meas_freq_est: List[float],
95
- buffer: int,
96
- pulse_library: List[PulseLibraryItem],
97
- cmd_def: List[Command],
98
- meas_kernel: MeasurementKernel = None,
99
- discriminator: Discriminator = None,
100
- **kwargs: Dict[str, Any],
101
- ):
102
- """
103
- Validate and reformat transport layer inputs to initialize.
104
- Args:
105
- qubit_freq_est: Estimated qubit frequencies in GHz.
106
- meas_freq_est: Estimated measurement cavity frequencies in GHz.
107
- buffer: Default buffer time (in units of dt) between pulses.
108
- pulse_library: Pulse name and sample definitions.
109
- cmd_def: Operation name and definition in terms of Commands.
110
- meas_kernel: The measurement kernels
111
- discriminator: The discriminators
112
- **kwargs: Other attributes for the super class.
113
- """
114
- self._data = {}
115
- self.buffer = buffer
116
- self.qubit_freq_est = [freq * 1e9 for freq in qubit_freq_est]
117
- """Qubit frequencies in Hertz."""
118
- self.meas_freq_est = [freq * 1e9 for freq in meas_freq_est]
119
- """Measurement frequencies in Hertz."""
120
- self.pulse_library = pulse_library
121
- self.cmd_def = cmd_def
122
- self.instruction_schedule_map = InstructionScheduleMap()
123
- self.converter = QobjToInstructionConverter(pulse_library)
124
-
125
- for inst in cmd_def:
126
- entry = PulseQobjDef(converter=self.converter, name=inst.name)
127
- entry.define(inst.sequence, user_provided=False)
128
- self.instruction_schedule_map._add(
129
- instruction_name=inst.name,
130
- qubits=tuple(inst.qubits),
131
- entry=entry,
132
- )
133
-
134
- if meas_kernel is not None:
135
- self.meas_kernel = meas_kernel
136
- if discriminator is not None:
137
- self.discriminator = discriminator
138
-
139
- self._data.update(kwargs)
140
-
141
- def __getattr__(self, name):
142
- try:
143
- return self._data[name]
144
- except KeyError as ex:
145
- raise AttributeError(f"Attribute {name} is not defined") from ex
146
-
147
- def to_dict(self):
148
- """Return a dictionary format representation of the PulseDefaults.
149
- Returns:
150
- dict: The dictionary form of the PulseDefaults.
151
- """
152
- out_dict = {
153
- "qubit_freq_est": self.qubit_freq_est,
154
- "meas_freq_est": self.qubit_freq_est,
155
- "buffer": self.buffer,
156
- "pulse_library": [x.to_dict() for x in self.pulse_library],
157
- "cmd_def": [x.to_dict() for x in self.cmd_def],
158
- }
159
- if hasattr(self, "meas_kernel"):
160
- out_dict["meas_kernel"] = self.meas_kernel.to_dict()
161
- if hasattr(self, "discriminator"):
162
- out_dict["discriminator"] = self.discriminator.to_dict()
163
- for key, value in self.__dict__.items():
164
- if key not in [
165
- "qubit_freq_est",
166
- "meas_freq_est",
167
- "buffer",
168
- "pulse_library",
169
- "cmd_def",
170
- "meas_kernel",
171
- "discriminator",
172
- "converter",
173
- "instruction_schedule_map",
174
- ]:
175
- out_dict[key] = value
176
- out_dict.update(self._data)
177
-
178
- out_dict["qubit_freq_est"] = [freq * 1e-9 for freq in self.qubit_freq_est]
179
- out_dict["meas_freq_est"] = [freq * 1e-9 for freq in self.meas_freq_est]
180
- return out_dict
181
-
182
- @classmethod
183
- def from_dict(cls, data):
184
- """Create a new PulseDefaults object from a dictionary.
185
-
186
- Args:
187
- data (dict): A dictionary representing the PulseDefaults
188
- to create. It will be in the same format as output by
189
- :meth:`to_dict`.
190
- Returns:
191
- PulseDefaults: The PulseDefaults from the input dictionary.
192
- """
193
- schema = {
194
- "pulse_library": PulseLibraryItem, # The class PulseLibraryItem is deprecated
195
- "cmd_def": Command,
196
- "meas_kernel": MeasurementKernel,
197
- "discriminator": Discriminator,
198
- }
199
-
200
- # Pulse defaults data is nested dictionary.
201
- # To avoid deepcopy and avoid mutating the source object, create new dict here.
202
- in_data = {}
203
- for key, value in data.items():
204
- if key in schema:
205
- with warnings.catch_warnings():
206
- # The class PulseLibraryItem is deprecated
207
- warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
208
- if isinstance(value, list):
209
- in_data[key] = list(map(schema[key].from_dict, value))
210
- else:
211
- in_data[key] = schema[key].from_dict(value)
212
- else:
213
- in_data[key] = value
214
-
215
- return cls(**in_data)
216
-
217
- def __str__(self):
218
- qubit_freqs = [freq / 1e9 for freq in self.qubit_freq_est]
219
- meas_freqs = [freq / 1e9 for freq in self.meas_freq_est]
220
- qfreq = f"Qubit Frequencies [GHz]\n{qubit_freqs}"
221
- mfreq = f"Measurement Frequencies [GHz]\n{meas_freqs} "
222
- return f"<{self.__class__.__name__}({str(self.instruction_schedule_map)}{qfreq}\n{mfreq})>"
223
-
224
-
225
- def _to_complex(value: Union[List[float], complex]) -> complex:
226
- """Convert the input value to type ``complex``.
227
- Args:
228
- value: Value to be converted.
229
- Returns:
230
- Input value in ``complex``.
231
- Raises:
232
- TypeError: If the input value is not in the expected format.
233
- """
234
- if isinstance(value, list) and len(value) == 2:
235
- return complex(value[0], value[1])
236
- elif isinstance(value, complex):
237
- return value
238
-
239
- raise TypeError(f"{value} is not in a valid complex number format.")
240
-
241
-
242
- class PulseLibraryItem:
243
- """INTERNAL - An item in a pulse library."""
244
-
245
- # Copy from the deprecated from qiskit.qobj.PulseLibraryItem
246
- def __init__(self, name, samples):
247
- """Instantiate a pulse library item.
248
-
249
- Args:
250
- name (str): A name for the pulse.
251
- samples (list[complex]): A list of complex values defining pulse
252
- shape.
253
- """
254
- self.name = name
255
- if isinstance(samples[0], list):
256
- self.samples = np.array([complex(sample[0], sample[1]) for sample in samples])
257
- else:
258
- self.samples = samples
259
-
260
- def to_dict(self):
261
- """Return a dictionary format representation of the pulse library item.
262
-
263
- Returns:
264
- dict: The dictionary form of the PulseLibraryItem.
265
- """
266
- return {"name": self.name, "samples": self.samples}
267
-
268
- @classmethod
269
- def from_dict(cls, data):
270
- """Create a new PulseLibraryItem object from a dictionary.
271
-
272
- Args:
273
- data (dict): A dictionary for the experiment config
274
-
275
- Returns:
276
- PulseLibraryItem: The object from the input dictionary.
277
- """
278
- return cls(**data)
279
-
280
- def __repr__(self):
281
- return f"PulseLibraryItem({self.name}, {repr(self.samples)})"
282
-
283
- def __str__(self):
284
- return f"Pulse Library Item:\n\tname: {self.name}\n\tsamples: {self.samples}"
285
-
286
- def __eq__(self, other):
287
- if isinstance(other, PulseLibraryItem):
288
- if self.to_dict() == other.to_dict():
289
- return True
290
- return False
291
-
292
-
293
- class PulseQobjInstruction:
294
- """Internal - A class representing a single instruction in a PulseQobj Experiment."""
295
-
296
- # Copy from the deprecated from qiskit.qobj.PulseQobjInstruction
297
-
298
- _COMMON_ATTRS = [
299
- "ch",
300
- "conditional",
301
- "val",
302
- "phase",
303
- "frequency",
304
- "duration",
305
- "qubits",
306
- "memory_slot",
307
- "register_slot",
308
- "label",
309
- "type",
310
- "pulse_shape",
311
- "parameters",
312
- ]
313
-
314
- def __init__(
315
- self,
316
- name,
317
- t0,
318
- ch=None,
319
- conditional=None,
320
- val=None,
321
- phase=None,
322
- duration=None,
323
- qubits=None,
324
- memory_slot=None,
325
- register_slot=None,
326
- kernels=None,
327
- discriminators=None,
328
- label=None,
329
- type=None, # pylint: disable=invalid-name,redefined-builtin
330
- pulse_shape=None,
331
- parameters=None,
332
- frequency=None,
333
- ):
334
- """Instantiate a new PulseQobjInstruction object.
335
-
336
- Args:
337
- name (str): The name of the instruction
338
- t0 (int): Pulse start time in integer **dt** units.
339
- ch (str): The channel to apply the pulse instruction.
340
- conditional (int): The register to use for a conditional for this
341
- instruction
342
- val (complex): Complex value to apply, bounded by an absolute value
343
- of 1.
344
- phase (float): if a ``fc`` instruction, the frame change phase in
345
- radians.
346
- frequency (float): if a ``sf`` instruction, the frequency in Hz.
347
- duration (int): The duration of the pulse in **dt** units.
348
- qubits (list): A list of ``int`` representing the qubits the
349
- instruction operates on
350
- memory_slot (list): If a ``measure`` instruction this is a list
351
- of ``int`` containing the list of memory slots to store the
352
- measurement results in (must be the same length as qubits).
353
- If a ``bfunc`` instruction this is a single ``int`` of the
354
- memory slot to store the boolean function result in.
355
- register_slot (list): If a ``measure`` instruction this is a list
356
- of ``int`` containing the list of register slots in which to
357
- store the measurement results (must be the same length as
358
- qubits). If a ``bfunc`` instruction this is a single ``int``
359
- of the register slot in which to store the result.
360
- kernels (list): List of :class:`QobjMeasurementOption` objects
361
- defining the measurement kernels and set of parameters if the
362
- measurement level is 1 or 2. Only used for ``acquire``
363
- instructions.
364
- discriminators (list): A list of :class:`QobjMeasurementOption`
365
- used to set the discriminators to be used if the measurement
366
- level is 2. Only used for ``acquire`` instructions.
367
- label (str): Label of instruction
368
- type (str): Type of instruction
369
- pulse_shape (str): The shape of the parametric pulse
370
- parameters (dict): The parameters for a parametric pulse
371
- """
372
- self.name = name
373
- self.t0 = t0
374
- if ch is not None:
375
- self.ch = ch
376
- if conditional is not None:
377
- self.conditional = conditional
378
- if val is not None:
379
- self.val = val
380
- if phase is not None:
381
- self.phase = phase
382
- if frequency is not None:
383
- self.frequency = frequency
384
- if duration is not None:
385
- self.duration = duration
386
- if qubits is not None:
387
- self.qubits = qubits
388
- if memory_slot is not None:
389
- self.memory_slot = memory_slot
390
- if register_slot is not None:
391
- self.register_slot = register_slot
392
- if kernels is not None:
393
- self.kernels = kernels
394
- if discriminators is not None:
395
- self.discriminators = discriminators
396
- if label is not None:
397
- self.label = label
398
- if type is not None:
399
- self.type = type
400
- if pulse_shape is not None:
401
- self.pulse_shape = pulse_shape
402
- if parameters is not None:
403
- self.parameters = parameters
404
-
405
- def to_dict(self):
406
- """Return a dictionary format representation of the Instruction.
407
-
408
- Returns:
409
- dict: The dictionary form of the PulseQobjInstruction.
410
- """
411
- out_dict = {"name": self.name, "t0": self.t0}
412
- for attr in self._COMMON_ATTRS:
413
- if hasattr(self, attr):
414
- out_dict[attr] = getattr(self, attr)
415
- if hasattr(self, "kernels"):
416
- out_dict["kernels"] = [x.to_dict() for x in self.kernels]
417
- if hasattr(self, "discriminators"):
418
- out_dict["discriminators"] = [x.to_dict() for x in self.discriminators]
419
- return out_dict
420
-
421
- def __repr__(self):
422
- out = f'PulseQobjInstruction(name="{self.name}", t0={self.t0}'
423
- for attr in self._COMMON_ATTRS:
424
- attr_val = getattr(self, attr, None)
425
- if attr_val is not None:
426
- if isinstance(attr_val, str):
427
- out += f', {attr}="{attr_val}"'
428
- else:
429
- out += f", {attr}={attr_val}"
430
- out += ")"
431
- return out
432
-
433
- def __str__(self):
434
- out = f"Instruction: {self.name}\n"
435
- out += f"\t\tt0: {self.t0}\n"
436
- for attr in self._COMMON_ATTRS:
437
- if hasattr(self, attr):
438
- out += f"\t\t{attr}: {getattr(self, attr)}\n"
439
- return out
440
-
441
- @classmethod
442
- def from_dict(cls, data):
443
- """Create a new PulseQobjExperimentConfig object from a dictionary.
444
-
445
- Args:
446
- data (dict): A dictionary for the experiment config
447
-
448
- Returns:
449
- PulseQobjInstruction: The object from the input dictionary.
450
- """
451
- schema = {
452
- "discriminators": QobjMeasurementOption,
453
- "kernels": QobjMeasurementOption,
454
- }
455
- skip = ["t0", "name"]
456
-
457
- # Pulse instruction data is nested dictionary.
458
- # To avoid deepcopy and avoid mutating the source object, create new dict here.
459
- in_data = {}
460
- for key, value in data.items():
461
- if key in skip:
462
- continue
463
- if key == "parameters":
464
- # This is flat dictionary of parametric pulse parameters
465
- formatted_value = value.copy()
466
- if "amp" in formatted_value:
467
- formatted_value["amp"] = _to_complex(formatted_value["amp"])
468
- in_data[key] = formatted_value
469
- continue
470
- if key in schema:
471
- if isinstance(value, list):
472
- in_data[key] = list(map(schema[key].from_dict, value))
473
- else:
474
- in_data[key] = schema[key].from_dict(value)
475
- else:
476
- in_data[key] = value
477
-
478
- return cls(data["name"], data["t0"], **in_data)
479
-
480
- def __eq__(self, other):
481
- if isinstance(other, PulseQobjInstruction):
482
- if self.to_dict() == other.to_dict():
483
- return True
484
- return False
485
-
486
-
487
- def _pulse_library():
488
- # The number of samples determines the pulse durations of the corresponding
489
- # instructions. This default defines pulses with durations in multiples of
490
- # 16 dt for consistency with the pulse granularity of real IBM devices, but
491
- # keeps the number smaller than what would be realistic for
492
- # manageability. If needed, more realistic durations could be added in the
493
- # future (order of 160dt for 1q gates, 1760dt for 2q gates and measure).
494
- return [
495
- PulseLibraryItem(
496
- name="pulse_1", samples=np.linspace(0, 1.0, 16, dtype=np.complex128)
497
- ), # 16dt
498
- PulseLibraryItem(
499
- name="pulse_2", samples=np.linspace(0, 1.0, 32, dtype=np.complex128)
500
- ), # 32dt
501
- PulseLibraryItem(
502
- name="pulse_3", samples=np.linspace(0, 1.0, 64, dtype=np.complex128)
503
- ), # 64dt
504
- ]
505
-
506
-
507
70
  class GenericBackendV2(BackendV2):
508
71
  """Generic :class:`~.BackendV2` implementation with a configurable constructor. This class will
509
72
  return a :class:`~.BackendV2` instance that runs on a local simulator (in the spirit of fake
510
73
  backends) and contains all the necessary information to test backend-interfacing components, such
511
74
  as the transpiler. A :class:`.GenericBackendV2` instance can be constructed from as little as a
512
75
  specified ``num_qubits``, but users can additionally configure the basis gates, coupling map,
513
- ability to run dynamic circuits (control flow instructions), instruction calibrations and dtm.
76
+ ability to run dynamic circuits (control flow instructions) and dtm.
514
77
  The remainder of the backend properties are generated by randomly sampling
515
78
  from default ranges extracted from historical IBM backend data. The seed for this random
516
79
  generation can be fixed to ensure the reproducibility of the backend output.
@@ -519,8 +82,6 @@ class GenericBackendV2(BackendV2):
519
82
  transpilation.
520
83
  """
521
84
 
522
- @deprecate_pulse_arg("pulse_channels")
523
- @deprecate_pulse_arg("calibrate_instructions")
524
85
  def __init__(
525
86
  self,
526
87
  num_qubits: int,
@@ -528,10 +89,9 @@ class GenericBackendV2(BackendV2):
528
89
  *,
529
90
  coupling_map: list[list[int]] | CouplingMap | None = None,
530
91
  control_flow: bool = False,
531
- calibrate_instructions: bool | InstructionScheduleMap | None = None,
532
92
  dtm: float | None = None,
93
+ dt: float | None = None,
533
94
  seed: int | None = None,
534
- pulse_channels: bool = True,
535
95
  noise_info: bool = True,
536
96
  ):
537
97
  """
@@ -563,25 +123,13 @@ class GenericBackendV2(BackendV2):
563
123
  control_flow: Flag to enable control flow directives on the target
564
124
  (defaults to False).
565
125
 
566
- calibrate_instructions: DEPRECATED. Instruction calibration settings, this argument
567
- supports both boolean and :class:`.InstructionScheduleMap` as
568
- input types, and is ``None`` by default:
569
-
570
- #. If ``calibrate_instructions==None``, no calibrations will be added to the target.
571
- #. If ``calibrate_instructions==True``, all gates will be calibrated for all
572
- qubits using the default pulse schedules generated internally.
573
- #. If ``calibrate_instructions==False``, all gates will be "calibrated" for
574
- all qubits with an empty pulse schedule.
575
- #. If an :class:`.InstructionScheduleMap` instance is given, the calibrations
576
- in this instruction schedule map will be appended to the target
577
- instead of the default pulse schedules (this allows for custom calibrations).
578
-
579
126
  dtm: System time resolution of output signals in nanoseconds.
580
127
  None by default.
581
128
 
582
- seed: Optional seed for generation of default values.
129
+ dt: System time resolution of input signals in nanoseconds.
130
+ None by default.
583
131
 
584
- pulse_channels: DEPRECATED. If true, sets default pulse channel information on the backend.
132
+ seed: Optional seed for generation of default values.
585
133
 
586
134
  noise_info: If true, associates gates and qubits with default noise information.
587
135
  """
@@ -596,15 +144,12 @@ class GenericBackendV2(BackendV2):
596
144
  self._sim = None
597
145
  self._rng = np.random.default_rng(seed=seed)
598
146
  self._dtm = dtm
147
+ self._dt = dt
599
148
  self._num_qubits = num_qubits
600
149
  self._control_flow = control_flow
601
- self._calibrate_instructions = calibrate_instructions
602
150
  self._supported_gates = get_standard_gate_name_mapping()
603
151
  self._noise_info = noise_info
604
152
 
605
- if calibrate_instructions and not noise_info:
606
- raise QiskitError("Must set parameter noise_info when calibrating instructions.")
607
-
608
153
  if coupling_map is None:
609
154
  self._coupling_map = CouplingMap().from_full(num_qubits)
610
155
  else:
@@ -627,10 +172,6 @@ class GenericBackendV2(BackendV2):
627
172
  self._basis_gates.append(name)
628
173
 
629
174
  self._build_generic_target()
630
- if pulse_channels:
631
- self._build_default_channels()
632
- else:
633
- self.channels_map = {}
634
175
 
635
176
  @property
636
177
  def target(self):
@@ -650,20 +191,6 @@ class GenericBackendV2(BackendV2):
650
191
  def meas_map(self) -> list[list[int]]:
651
192
  return self._target.concurrent_measurements
652
193
 
653
- def _build_default_channels(self) -> None:
654
- with warnings.catch_warnings():
655
- warnings.simplefilter(action="ignore", category=DeprecationWarning)
656
- # Prevent pulse deprecation warnings from being emitted
657
- channels_map = {
658
- "acquire": {(i,): [pulse.AcquireChannel(i)] for i in range(self.num_qubits)},
659
- "drive": {(i,): [pulse.DriveChannel(i)] for i in range(self.num_qubits)},
660
- "measure": {(i,): [pulse.MeasureChannel(i)] for i in range(self.num_qubits)},
661
- "control": {
662
- (edge): [pulse.ControlChannel(i)] for i, edge in enumerate(self._coupling_map)
663
- },
664
- }
665
- setattr(self, "channels_map", channels_map)
666
-
667
194
  def _get_noise_defaults(self, name: str, num_qubits: int) -> tuple:
668
195
  """Return noise default values/ranges for duration and error of supported
669
196
  instructions. There are two possible formats:
@@ -677,110 +204,9 @@ class GenericBackendV2(BackendV2):
677
204
  return _NOISE_DEFAULTS_FALLBACK["1-q"]
678
205
  return _NOISE_DEFAULTS_FALLBACK["multi-q"]
679
206
 
680
- def _get_calibration_sequence(
681
- self, inst: str, num_qubits: int, qargs: tuple[int]
682
- ) -> list[PulseQobjInstruction]:
683
- """Return calibration pulse sequence for given instruction (defined by name and num_qubits)
684
- acting on qargs.
685
- """
686
-
687
- pulse_library = _pulse_library()
688
- # Note that the calibration pulses are different for
689
- # 1q gates vs 2q gates vs measurement instructions.
690
- if inst == "measure":
691
- with warnings.catch_warnings():
692
- # The class PulseQobjInstruction is deprecated
693
- warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
694
- sequence = [
695
- PulseQobjInstruction(
696
- name="acquire",
697
- duration=1792,
698
- t0=0,
699
- qubits=qargs,
700
- memory_slot=qargs,
701
- )
702
- ] + [
703
- PulseQobjInstruction(name=pulse_library[1].name, ch=f"m{i}", t0=0)
704
- for i in qargs
705
- ]
706
- return sequence
707
- with warnings.catch_warnings():
708
- # The class PulseQobjInstruction is deprecated
709
- warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
710
- if num_qubits == 1:
711
- return [
712
- PulseQobjInstruction(name="fc", ch=f"u{qargs[0]}", t0=0, phase="-P0"),
713
- PulseQobjInstruction(name=pulse_library[0].name, ch=f"d{qargs[0]}", t0=0),
714
- ]
715
- return [
716
- PulseQobjInstruction(name=pulse_library[1].name, ch=f"d{qargs[0]}", t0=0),
717
- PulseQobjInstruction(name=pulse_library[2].name, ch=f"u{qargs[0]}", t0=0),
718
- PulseQobjInstruction(name=pulse_library[1].name, ch=f"d{qargs[1]}", t0=0),
719
- PulseQobjInstruction(name="fc", ch=f"d{qargs[1]}", t0=0, phase=2.1),
720
- ]
721
-
722
- def _generate_calibration_defaults(self) -> PulseDefaults:
723
- """Generate pulse calibration defaults as specified with `self._calibrate_instructions`.
724
- If `self._calibrate_instructions` is True, the pulse schedules will be generated from
725
- a series of default calibration sequences. If `self._calibrate_instructions` is False,
726
- the pulse schedules will contain empty calibration sequences, but still be generated and
727
- added to the target.
728
- """
729
-
730
- # If self._calibrate_instructions==True, this method
731
- # will generate default pulse schedules for all gates in self._basis_gates,
732
- # except for `delay` and `reset`.
733
- calibration_buffer = self._basis_gates.copy()
734
- for inst in ["delay", "reset"]:
735
- calibration_buffer.remove(inst)
736
-
737
- # List of calibration commands (generated from sequences of PulseQobjInstructions)
738
- # corresponding to each calibrated instruction. Note that the calibration pulses
739
- # are different for 1q gates vs 2q gates vs measurement instructions.
740
- cmd_def = []
741
- for inst in calibration_buffer:
742
- num_qubits = self._supported_gates[inst].num_qubits
743
- qarg_set = self._coupling_map if num_qubits > 1 else list(range(self.num_qubits))
744
- if inst == "measure":
745
- cmd_def.append(
746
- Command(
747
- name=inst,
748
- qubits=qarg_set,
749
- sequence=(
750
- self._get_calibration_sequence(inst, num_qubits, qarg_set)
751
- if self._calibrate_instructions
752
- else []
753
- ),
754
- )
755
- )
756
- else:
757
- for qarg in qarg_set:
758
- qubits = [qarg] if num_qubits == 1 else qarg
759
- cmd_def.append(
760
- Command(
761
- name=inst,
762
- qubits=qubits,
763
- sequence=(
764
- self._get_calibration_sequence(inst, num_qubits, qubits)
765
- if self._calibrate_instructions
766
- else []
767
- ),
768
- )
769
- )
770
-
771
- qubit_freq_est = np.random.normal(4.8, scale=0.01, size=self.num_qubits).tolist()
772
- meas_freq_est = np.linspace(6.4, 6.6, self.num_qubits).tolist()
773
- return PulseDefaults(
774
- qubit_freq_est=qubit_freq_est,
775
- meas_freq_est=meas_freq_est,
776
- buffer=0,
777
- pulse_library=_pulse_library(),
778
- cmd_def=cmd_def,
779
- )
780
-
781
207
  def _build_generic_target(self):
782
208
  """This method generates a :class:`~.Target` instance with
783
- default qubit, instruction and calibration properties.
209
+ default qubit and instruction properties.
784
210
  """
785
211
  # the qubit properties are sampled from default ranges
786
212
  properties = _QUBIT_PROPERTIES
@@ -788,7 +214,7 @@ class GenericBackendV2(BackendV2):
788
214
  self._target = Target(
789
215
  description=f"Generic Target with {self._num_qubits} qubits",
790
216
  num_qubits=self._num_qubits,
791
- dt=properties["dt"],
217
+ dt=properties["dt"] if self._dt is None else self._dt,
792
218
  qubit_properties=None,
793
219
  concurrent_measurements=[list(range(self._num_qubits))],
794
220
  )
@@ -796,7 +222,7 @@ class GenericBackendV2(BackendV2):
796
222
  self._target = Target(
797
223
  description=f"Generic Target with {self._num_qubits} qubits",
798
224
  num_qubits=self._num_qubits,
799
- dt=properties["dt"],
225
+ dt=properties["dt"] if self._dt is None else self._dt,
800
226
  qubit_properties=[
801
227
  QubitProperties(
802
228
  t1=self._rng.uniform(properties["t1"][0], properties["t1"][1]),
@@ -810,17 +236,8 @@ class GenericBackendV2(BackendV2):
810
236
  concurrent_measurements=[list(range(self._num_qubits))],
811
237
  )
812
238
 
813
- # Generate instruction schedule map with calibrations to add to target.
814
- calibration_inst_map = None
815
- if self._calibrate_instructions is not None:
816
- if isinstance(self._calibrate_instructions, InstructionScheduleMap):
817
- calibration_inst_map = self._calibrate_instructions
818
- else:
819
- defaults = self._generate_calibration_defaults()
820
- calibration_inst_map = defaults.instruction_schedule_map
821
-
822
239
  # Iterate over gates, generate noise params from defaults,
823
- # and add instructions, noise and calibrations to target.
240
+ # and add instructions and noise information to the target.
824
241
  for name in self._basis_gates:
825
242
  if name not in self._supported_gates:
826
243
  raise QiskitError(
@@ -835,7 +252,7 @@ class GenericBackendV2(BackendV2):
835
252
  )
836
253
  if self._noise_info:
837
254
  noise_params = self._get_noise_defaults(name, gate.num_qubits)
838
- self._add_noisy_instruction_to_target(gate, noise_params, calibration_inst_map)
255
+ self._add_noisy_instruction_to_target(gate, noise_params)
839
256
  else:
840
257
  qarg_set = self._coupling_map if gate.num_qubits > 1 else range(self.num_qubits)
841
258
  props = {(qarg,) if isinstance(qarg, int) else qarg: None for qarg in qarg_set}
@@ -853,7 +270,6 @@ class GenericBackendV2(BackendV2):
853
270
  self,
854
271
  instruction: Instruction,
855
272
  noise_params: tuple[float, ...] | None,
856
- calibration_inst_map: InstructionScheduleMap | None,
857
273
  ) -> None:
858
274
  """Add instruction properties to target for specified instruction.
859
275
 
@@ -861,7 +277,6 @@ class GenericBackendV2(BackendV2):
861
277
  instruction: Instance of instruction to be added to the target
862
278
  noise_params: Error and duration noise values/ranges to
863
279
  include in instruction properties.
864
- calibration_inst_map: Instruction schedule map with calibration defaults
865
280
  """
866
281
  qarg_set = self._coupling_map if instruction.num_qubits > 1 else range(self.num_qubits)
867
282
  props = {}
@@ -878,67 +293,32 @@ class GenericBackendV2(BackendV2):
878
293
  self._rng.uniform(*noise_params[2:]),
879
294
  )
880
295
  )
881
- with warnings.catch_warnings():
882
- warnings.simplefilter(action="ignore", category=DeprecationWarning)
883
- # Prevent pulse deprecations from being emitted
884
- if (
885
- calibration_inst_map is not None
886
- and instruction.name not in ["reset", "delay"]
887
- and qarg in calibration_inst_map.qubits_with_instruction(instruction.name)
888
- ):
889
- # Do NOT call .get method. This parses Qobj immediately.
890
- # This operation is computationally expensive and should be bypassed.
891
- calibration_entry = calibration_inst_map._get_calibration_entry(
892
- instruction.name, qargs
893
- )
894
- else:
895
- calibration_entry = None
896
- if duration is not None and len(noise_params) > 2:
897
- # Ensure exact conversion of duration from seconds to dt
898
- dt = _QUBIT_PROPERTIES["dt"]
899
- rounded_duration = round(duration / dt) * dt
900
- # Clamp rounded duration to be between min and max values
901
- duration = max(noise_params[0], min(rounded_duration, noise_params[1]))
902
- props.update({qargs: InstructionProperties(duration, error, calibration_entry)})
903
- self._target.add_instruction(instruction, props)
904
296
 
905
- # The "measure" instruction calibrations need to be added qubit by qubit, once the
906
- # instruction has been added to the target.
907
- if calibration_inst_map is not None and instruction.name == "measure":
908
- for qarg in calibration_inst_map.qubits_with_instruction(instruction.name):
909
- try:
910
- qargs = tuple(qarg)
911
- except TypeError:
912
- qargs = (qarg,)
913
- # Do NOT call .get method. This parses Qobj immediately.
914
- # This operation is computationally expensive and should be bypassed.
915
- calibration_entry = calibration_inst_map._get_calibration_entry(
916
- instruction.name, qargs
917
- )
918
- for qubit in qargs:
919
- if qubit < self.num_qubits:
920
- self._target[instruction.name][(qubit,)].calibration = calibration_entry
297
+ if duration is not None and len(noise_params) > 2:
298
+ # Ensure exact conversion of duration from seconds to dt
299
+ dt = _QUBIT_PROPERTIES["dt"]
300
+ rounded_duration = round(duration / dt) * dt
301
+ # Clamp rounded duration to be between min and max values
302
+ duration = max(noise_params[0], min(rounded_duration, noise_params[1]))
303
+ props.update({qargs: InstructionProperties(duration, error)})
304
+
305
+ self._target.add_instruction(instruction, props)
921
306
 
922
307
  def run(self, run_input, **options):
923
308
  """Run on the backend using a simulator.
924
309
 
925
310
  This method runs circuit jobs (an individual or a list of :class:`~.QuantumCircuit`
926
- ) and pulse jobs (an individual or a list of :class:`~.Schedule` or
927
- :class:`~.ScheduleBlock`) using :class:`~.BasicSimulator` or Aer simulator and returns a
311
+ ) using :class:`~.BasicSimulator` or Aer simulator and returns a
928
312
  :class:`~qiskit.providers.Job` object.
929
313
 
930
314
  If qiskit-aer is installed, jobs will be run using the ``AerSimulator`` with
931
315
  noise model of the backend. Otherwise, jobs will be run using the
932
316
  ``BasicSimulator`` simulator without noise.
933
317
 
934
- Noisy simulations of pulse jobs are not yet supported in :class:`~.GenericBackendV2`.
935
-
936
318
  Args:
937
- run_input (QuantumCircuit or Schedule or ScheduleBlock or list): An
938
- individual or a list of
939
- :class:`~qiskit.circuit.QuantumCircuit`,
940
- :class:`~qiskit.pulse.ScheduleBlock`, or
941
- :class:`~qiskit.pulse.Schedule` objects to run on the backend.
319
+ run_input (QuantumCircuit or list): An
320
+ individual or a list of :class:`~qiskit.circuit.QuantumCircuit`
321
+ objects to run on the backend.
942
322
  options: Any kwarg options to pass to the backend for running the
943
323
  config. If a key is also present in the options
944
324
  attribute/object, then the expectation is that the value
@@ -949,28 +329,19 @@ class GenericBackendV2(BackendV2):
949
329
  Job: The job object for the run
950
330
 
951
331
  Raises:
952
- QiskitError: If a pulse job is supplied and qiskit_aer is not installed.
332
+ QiskitError: If input is not :class:`~qiskit.circuit.QuantumCircuit` or a list of
333
+ :class:`~qiskit.circuit.QuantumCircuit` objects.
953
334
  """
954
335
  circuits = run_input
955
- pulse_job = None
956
- if isinstance(circuits, (pulse.Schedule, pulse.ScheduleBlock)):
957
- pulse_job = True
958
- elif isinstance(circuits, QuantumCircuit):
959
- pulse_job = False
960
- elif isinstance(circuits, list):
961
- if circuits:
962
- if all(isinstance(x, (pulse.Schedule, pulse.ScheduleBlock)) for x in circuits):
963
- pulse_job = True
964
- elif all(isinstance(x, QuantumCircuit) for x in circuits):
965
- pulse_job = False
966
- if pulse_job is None: # submitted job is invalid
336
+ if not isinstance(circuits, QuantumCircuit) and (
337
+ not isinstance(circuits, list)
338
+ or not all(isinstance(x, QuantumCircuit) for x in circuits)
339
+ ):
967
340
  raise QiskitError(
968
341
  f"Invalid input object {circuits}, must be either a "
969
- "QuantumCircuit, Schedule, or a list of either"
342
+ "QuantumCircuit or a list of QuantumCircuit objects"
970
343
  )
971
- if pulse_job: # pulse job
972
- raise QiskitError("Pulse simulation is currently not supported for V2 backends.")
973
- # circuit job
344
+
974
345
  if not _optionals.HAS_AER:
975
346
  warnings.warn("Aer not found using BasicSimulator and no noise", RuntimeWarning)
976
347
  if self._sim is None:
@@ -1001,35 +372,3 @@ class GenericBackendV2(BackendV2):
1001
372
  return AerSimulator._default_options()
1002
373
  else:
1003
374
  return BasicSimulator._default_options()
1004
-
1005
- @deprecate_pulse_dependency
1006
- def drive_channel(self, qubit: int):
1007
- drive_channels_map = getattr(self, "channels_map", {}).get("drive", {})
1008
- qubits = (qubit,)
1009
- if qubits in drive_channels_map:
1010
- return drive_channels_map[qubits][0]
1011
- return None
1012
-
1013
- @deprecate_pulse_dependency
1014
- def measure_channel(self, qubit: int):
1015
- measure_channels_map = getattr(self, "channels_map", {}).get("measure", {})
1016
- qubits = (qubit,)
1017
- if qubits in measure_channels_map:
1018
- return measure_channels_map[qubits][0]
1019
- return None
1020
-
1021
- @deprecate_pulse_dependency
1022
- def acquire_channel(self, qubit: int):
1023
- acquire_channels_map = getattr(self, "channels_map", {}).get("acquire", {})
1024
- qubits = (qubit,)
1025
- if qubits in acquire_channels_map:
1026
- return acquire_channels_map[qubits][0]
1027
- return None
1028
-
1029
- @deprecate_pulse_dependency
1030
- def control_channel(self, qubits: Iterable[int]):
1031
- control_channels_map = getattr(self, "channels_map", {}).get("control", {})
1032
- qubits = tuple(qubits)
1033
- if qubits in control_channels_map:
1034
- return control_channels_map[qubits]
1035
- return []