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
qiskit/qobj/pulse_qobj.py DELETED
@@ -1,709 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2019.
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
- # pylint: disable=invalid-name,redefined-builtin
14
- # pylint: disable=super-init-not-called
15
-
16
- """Module providing definitions of Pulse Qobj classes."""
17
-
18
- import copy
19
- import pprint
20
- from typing import Union, List
21
-
22
- import numpy
23
- from qiskit.qobj.common import QobjDictField
24
- from qiskit.qobj.common import QobjHeader
25
- from qiskit.qobj.common import QobjExperimentHeader
26
- from qiskit.utils import deprecate_func
27
-
28
-
29
- class QobjMeasurementOption:
30
- """An individual measurement option."""
31
-
32
- @deprecate_func(
33
- since="1.2",
34
- removal_timeline="in the 2.0 release",
35
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
36
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
37
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
38
- "should be updated to use `BackendV2`.",
39
- )
40
- def __init__(self, name, params=None):
41
- """Instantiate a new QobjMeasurementOption object.
42
-
43
- Args:
44
- name (str): The name of the measurement option
45
- params (list): The parameters of the measurement option.
46
- """
47
- self.name = name
48
- if params is not None:
49
- self.params = params
50
-
51
- def to_dict(self):
52
- """Return a dict format representation of the QobjMeasurementOption.
53
-
54
- Returns:
55
- dict: The dictionary form of the QasmMeasurementOption.
56
- """
57
- out_dict = {"name": self.name}
58
- if hasattr(self, "params"):
59
- out_dict["params"] = self.params
60
- return out_dict
61
-
62
- @classmethod
63
- def from_dict(cls, data):
64
- """Create a new QobjMeasurementOption object from a dictionary.
65
-
66
- Args:
67
- data (dict): A dictionary for the experiment config
68
-
69
- Returns:
70
- QobjMeasurementOption: The object from the input dictionary.
71
- """
72
- name = data.pop("name")
73
- return cls(name, **data)
74
-
75
- def __eq__(self, other):
76
- if isinstance(other, QobjMeasurementOption):
77
- if self.to_dict() == other.to_dict():
78
- return True
79
- return False
80
-
81
-
82
- class PulseQobjInstruction:
83
- """A class representing a single instruction in an PulseQobj Experiment."""
84
-
85
- _COMMON_ATTRS = [
86
- "ch",
87
- "conditional",
88
- "val",
89
- "phase",
90
- "frequency",
91
- "duration",
92
- "qubits",
93
- "memory_slot",
94
- "register_slot",
95
- "label",
96
- "type",
97
- "pulse_shape",
98
- "parameters",
99
- ]
100
-
101
- @deprecate_func(
102
- since="1.2",
103
- removal_timeline="in the 2.0 release",
104
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
105
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
106
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
107
- "should be updated to use `BackendV2`.",
108
- )
109
- def __init__(
110
- self,
111
- name,
112
- t0,
113
- ch=None,
114
- conditional=None,
115
- val=None,
116
- phase=None,
117
- duration=None,
118
- qubits=None,
119
- memory_slot=None,
120
- register_slot=None,
121
- kernels=None,
122
- discriminators=None,
123
- label=None,
124
- type=None,
125
- pulse_shape=None,
126
- parameters=None,
127
- frequency=None,
128
- ):
129
- """Instantiate a new PulseQobjInstruction object.
130
-
131
- Args:
132
- name (str): The name of the instruction
133
- t0 (int): Pulse start time in integer **dt** units.
134
- ch (str): The channel to apply the pulse instruction.
135
- conditional (int): The register to use for a conditional for this
136
- instruction
137
- val (complex): Complex value to apply, bounded by an absolute value
138
- of 1.
139
- phase (float): if a ``fc`` instruction, the frame change phase in
140
- radians.
141
- frequency (float): if a ``sf`` instruction, the frequency in Hz.
142
- duration (int): The duration of the pulse in **dt** units.
143
- qubits (list): A list of ``int`` representing the qubits the
144
- instruction operates on
145
- memory_slot (list): If a ``measure`` instruction this is a list
146
- of ``int`` containing the list of memory slots to store the
147
- measurement results in (must be the same length as qubits).
148
- If a ``bfunc`` instruction this is a single ``int`` of the
149
- memory slot to store the boolean function result in.
150
- register_slot (list): If a ``measure`` instruction this is a list
151
- of ``int`` containing the list of register slots in which to
152
- store the measurement results (must be the same length as
153
- qubits). If a ``bfunc`` instruction this is a single ``int``
154
- of the register slot in which to store the result.
155
- kernels (list): List of :class:`QobjMeasurementOption` objects
156
- defining the measurement kernels and set of parameters if the
157
- measurement level is 1 or 2. Only used for ``acquire``
158
- instructions.
159
- discriminators (list): A list of :class:`QobjMeasurementOption`
160
- used to set the discriminators to be used if the measurement
161
- level is 2. Only used for ``acquire`` instructions.
162
- label (str): Label of instruction
163
- type (str): Type of instruction
164
- pulse_shape (str): The shape of the parametric pulse
165
- parameters (dict): The parameters for a parametric pulse
166
- """
167
- self.name = name
168
- self.t0 = t0
169
- if ch is not None:
170
- self.ch = ch
171
- if conditional is not None:
172
- self.conditional = conditional
173
- if val is not None:
174
- self.val = val
175
- if phase is not None:
176
- self.phase = phase
177
- if frequency is not None:
178
- self.frequency = frequency
179
- if duration is not None:
180
- self.duration = duration
181
- if qubits is not None:
182
- self.qubits = qubits
183
- if memory_slot is not None:
184
- self.memory_slot = memory_slot
185
- if register_slot is not None:
186
- self.register_slot = register_slot
187
- if kernels is not None:
188
- self.kernels = kernels
189
- if discriminators is not None:
190
- self.discriminators = discriminators
191
- if label is not None:
192
- self.label = label
193
- if type is not None:
194
- self.type = type
195
- if pulse_shape is not None:
196
- self.pulse_shape = pulse_shape
197
- if parameters is not None:
198
- self.parameters = parameters
199
-
200
- def to_dict(self):
201
- """Return a dictionary format representation of the Instruction.
202
-
203
- Returns:
204
- dict: The dictionary form of the PulseQobjInstruction.
205
- """
206
- out_dict = {"name": self.name, "t0": self.t0}
207
- for attr in self._COMMON_ATTRS:
208
- if hasattr(self, attr):
209
- out_dict[attr] = getattr(self, attr)
210
- if hasattr(self, "kernels"):
211
- out_dict["kernels"] = [x.to_dict() for x in self.kernels]
212
- if hasattr(self, "discriminators"):
213
- out_dict["discriminators"] = [x.to_dict() for x in self.discriminators]
214
- return out_dict
215
-
216
- def __repr__(self):
217
- out = f'PulseQobjInstruction(name="{self.name}", t0={self.t0}'
218
- for attr in self._COMMON_ATTRS:
219
- attr_val = getattr(self, attr, None)
220
- if attr_val is not None:
221
- if isinstance(attr_val, str):
222
- out += f', {attr}="{attr_val}"'
223
- else:
224
- out += f", {attr}={attr_val}"
225
- out += ")"
226
- return out
227
-
228
- def __str__(self):
229
- out = f"Instruction: {self.name}\n"
230
- out += f"\t\tt0: {self.t0}\n"
231
- for attr in self._COMMON_ATTRS:
232
- if hasattr(self, attr):
233
- out += f"\t\t{attr}: {getattr(self, attr)}\n"
234
- return out
235
-
236
- @classmethod
237
- def from_dict(cls, data):
238
- """Create a new PulseQobjExperimentConfig object from a dictionary.
239
-
240
- Args:
241
- data (dict): A dictionary for the experiment config
242
-
243
- Returns:
244
- PulseQobjInstruction: The object from the input dictionary.
245
- """
246
- schema = {
247
- "discriminators": QobjMeasurementOption,
248
- "kernels": QobjMeasurementOption,
249
- }
250
- skip = ["t0", "name"]
251
-
252
- # Pulse instruction data is nested dictionary.
253
- # To avoid deepcopy and avoid mutating the source object, create new dict here.
254
- in_data = {}
255
- for key, value in data.items():
256
- if key in skip:
257
- continue
258
- if key == "parameters":
259
- # This is flat dictionary of parametric pulse parameters
260
- formatted_value = value.copy()
261
- if "amp" in formatted_value:
262
- formatted_value["amp"] = _to_complex(formatted_value["amp"])
263
- in_data[key] = formatted_value
264
- continue
265
- if key in schema:
266
- if isinstance(value, list):
267
- in_data[key] = list(map(schema[key].from_dict, value))
268
- else:
269
- in_data[key] = schema[key].from_dict(value)
270
- else:
271
- in_data[key] = value
272
-
273
- return cls(data["name"], data["t0"], **in_data)
274
-
275
- def __eq__(self, other):
276
- if isinstance(other, PulseQobjInstruction):
277
- if self.to_dict() == other.to_dict():
278
- return True
279
- return False
280
-
281
-
282
- def _to_complex(value: Union[List[float], complex]) -> complex:
283
- """Convert the input value to type ``complex``.
284
- Args:
285
- value: Value to be converted.
286
- Returns:
287
- Input value in ``complex``.
288
- Raises:
289
- TypeError: If the input value is not in the expected format.
290
- """
291
- if isinstance(value, list) and len(value) == 2:
292
- return complex(value[0], value[1])
293
- elif isinstance(value, complex):
294
- return value
295
-
296
- raise TypeError(f"{value} is not in a valid complex number format.")
297
-
298
-
299
- class PulseQobjConfig(QobjDictField):
300
- """A configuration for a Pulse Qobj."""
301
-
302
- @deprecate_func(
303
- since="1.2",
304
- removal_timeline="in the 2.0 release",
305
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
306
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
307
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
308
- "should be updated to use `BackendV2`.",
309
- )
310
- def __init__(
311
- self,
312
- meas_level,
313
- meas_return,
314
- pulse_library,
315
- qubit_lo_freq,
316
- meas_lo_freq,
317
- memory_slot_size=None,
318
- rep_time=None,
319
- rep_delay=None,
320
- shots=None,
321
- seed_simulator=None,
322
- memory_slots=None,
323
- **kwargs,
324
- ):
325
- """Instantiate a PulseQobjConfig object.
326
-
327
- Args:
328
- meas_level (int): The measurement level to use.
329
- meas_return (int): The level of measurement information to return.
330
- pulse_library (list): A list of :class:`PulseLibraryItem` objects
331
- which define the set of primitive pulses
332
- qubit_lo_freq (list): List of frequencies (as floats) for the qubit
333
- driver LO's in GHz.
334
- meas_lo_freq (list): List of frequencies (as floats) for the'
335
- measurement driver LO's in GHz.
336
- memory_slot_size (int): Size of each memory slot if the output is
337
- Level 0.
338
- rep_time (int): Time per program execution in sec. Must be from the list provided
339
- by the backend (``backend.configuration().rep_times``). Defaults to the first entry
340
- in ``backend.configuration().rep_times``.
341
- rep_delay (float): Delay between programs in sec. Only supported on certain
342
- backends (``backend.configuration().dynamic_reprate_enabled`` ). If supported,
343
- ``rep_delay`` will be used instead of ``rep_time`` and must be from the range
344
- supplied by the backend (``backend.configuration().rep_delay_range``). Default is
345
- ``backend.configuration().default_rep_delay``.
346
- shots (int): The number of shots
347
- seed_simulator (int): the seed to use in the simulator
348
- memory_slots (list): The number of memory slots on the device
349
- kwargs: Additional free form key value fields to add to the
350
- configuration
351
- """
352
- self.meas_level = meas_level
353
- self.meas_return = meas_return
354
- self.pulse_library = pulse_library
355
- self.qubit_lo_freq = qubit_lo_freq
356
- self.meas_lo_freq = meas_lo_freq
357
- if memory_slot_size is not None:
358
- self.memory_slot_size = memory_slot_size
359
- if rep_time is not None:
360
- self.rep_time = rep_time
361
- if rep_delay is not None:
362
- self.rep_delay = rep_delay
363
- if shots is not None:
364
- self.shots = int(shots)
365
-
366
- if seed_simulator is not None:
367
- self.seed_simulator = int(seed_simulator)
368
-
369
- if memory_slots is not None:
370
- self.memory_slots = int(memory_slots)
371
-
372
- if kwargs:
373
- self.__dict__.update(kwargs)
374
-
375
- def to_dict(self):
376
- """Return a dictionary format representation of the Pulse Qobj config.
377
-
378
- Returns:
379
- dict: The dictionary form of the PulseQobjConfig.
380
- """
381
- out_dict = copy.copy(self.__dict__)
382
- if hasattr(self, "pulse_library"):
383
- out_dict["pulse_library"] = [x.to_dict() for x in self.pulse_library]
384
-
385
- return out_dict
386
-
387
- @classmethod
388
- def from_dict(cls, data):
389
- """Create a new PulseQobjConfig object from a dictionary.
390
-
391
- Args:
392
- data (dict): A dictionary for the config
393
-
394
- Returns:
395
- PulseQobjConfig: The object from the input dictionary.
396
- """
397
- if "pulse_library" in data:
398
- pulse_lib = data.pop("pulse_library")
399
- pulse_lib_obj = [PulseLibraryItem.from_dict(x) for x in pulse_lib]
400
- data["pulse_library"] = pulse_lib_obj
401
- return cls(**data)
402
-
403
-
404
- class PulseQobjExperiment:
405
- """A Pulse Qobj Experiment.
406
-
407
- Each instance of this class is used to represent an individual Pulse
408
- experiment as part of a larger Pulse Qobj.
409
- """
410
-
411
- @deprecate_func(
412
- since="1.2",
413
- removal_timeline="in the 2.0 release",
414
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
415
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
416
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
417
- "should be updated to use `BackendV2`.",
418
- )
419
- def __init__(self, instructions, config=None, header=None):
420
- """Instantiate a PulseQobjExperiment.
421
-
422
- Args:
423
- config (PulseQobjExperimentConfig): A config object for the experiment
424
- header (PulseQobjExperimentHeader): A header object for the experiment
425
- instructions (list): A list of :class:`PulseQobjInstruction` objects
426
- """
427
- if config is not None:
428
- self.config = config
429
- if header is not None:
430
- self.header = header
431
- self.instructions = instructions
432
-
433
- def to_dict(self):
434
- """Return a dictionary format representation of the Experiment.
435
-
436
- Returns:
437
- dict: The dictionary form of the PulseQobjExperiment.
438
- """
439
- out_dict = {"instructions": [x.to_dict() for x in self.instructions]}
440
- if hasattr(self, "config"):
441
- out_dict["config"] = self.config.to_dict()
442
- if hasattr(self, "header"):
443
- out_dict["header"] = self.header.to_dict()
444
- return out_dict
445
-
446
- def __repr__(self):
447
- instructions_str = [repr(x) for x in self.instructions]
448
- instructions_repr = "[" + ", ".join(instructions_str) + "]"
449
- out = "PulseQobjExperiment("
450
- out += instructions_repr
451
- if hasattr(self, "config") or hasattr(self, "header"):
452
- out += ", "
453
- if hasattr(self, "config"):
454
- out += "config=" + str(repr(self.config)) + ", "
455
- if hasattr(self, "header"):
456
- out += "header=" + str(repr(self.header)) + ", "
457
- out += ")"
458
- return out
459
-
460
- def __str__(self):
461
- out = "\nPulse Experiment:\n"
462
- if hasattr(self, "config"):
463
- config = pprint.pformat(self.config.to_dict())
464
- else:
465
- config = "{}"
466
- if hasattr(self, "header"):
467
- header = pprint.pformat(self.header.to_dict() or {})
468
- else:
469
- header = "{}"
470
- out += f"Header:\n{header}\n"
471
- out += f"Config:\n{config}\n\n"
472
- for instruction in self.instructions:
473
- out += f"\t{instruction}\n"
474
- return out
475
-
476
- @classmethod
477
- def from_dict(cls, data):
478
- """Create a new PulseQobjExperiment object from a dictionary.
479
-
480
- Args:
481
- data (dict): A dictionary for the experiment config
482
-
483
- Returns:
484
- PulseQobjExperiment: The object from the input dictionary.
485
- """
486
- config = None
487
- if "config" in data:
488
- config = PulseQobjExperimentConfig.from_dict(data.pop("config"))
489
- header = None
490
- if "header" in data:
491
- header = QobjExperimentHeader.from_dict(data.pop("header"))
492
- instructions = None
493
- if "instructions" in data:
494
- instructions = [
495
- PulseQobjInstruction.from_dict(inst) for inst in data.pop("instructions")
496
- ]
497
- return cls(instructions, config, header)
498
-
499
- def __eq__(self, other):
500
- if isinstance(other, PulseQobjExperiment):
501
- if self.to_dict() == other.to_dict():
502
- return True
503
- return False
504
-
505
-
506
- class PulseQobjExperimentConfig(QobjDictField):
507
- """A config for a single Pulse experiment in the qobj."""
508
-
509
- @deprecate_func(
510
- since="1.2",
511
- removal_timeline="in the 2.0 release",
512
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
513
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
514
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
515
- "should be updated to use `BackendV2`.",
516
- )
517
- def __init__(self, qubit_lo_freq=None, meas_lo_freq=None, **kwargs):
518
- """Instantiate a PulseQobjExperimentConfig object.
519
-
520
- Args:
521
- qubit_lo_freq (List[float]): List of qubit LO frequencies in GHz.
522
- meas_lo_freq (List[float]): List of meas readout LO frequencies in GHz.
523
- kwargs: Additional free form key value fields to add to the configuration
524
- """
525
- if qubit_lo_freq is not None:
526
- self.qubit_lo_freq = qubit_lo_freq
527
- if meas_lo_freq is not None:
528
- self.meas_lo_freq = meas_lo_freq
529
- if kwargs:
530
- self.__dict__.update(kwargs)
531
-
532
-
533
- class PulseLibraryItem:
534
- """An item in a pulse library."""
535
-
536
- @deprecate_func(
537
- since="1.2",
538
- removal_timeline="in the 2.0 release",
539
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
540
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
541
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
542
- "should be updated to use `BackendV2`.",
543
- )
544
- def __init__(self, name, samples):
545
- """Instantiate a pulse library item.
546
-
547
- Args:
548
- name (str): A name for the pulse.
549
- samples (list[complex]): A list of complex values defining pulse
550
- shape.
551
- """
552
- self.name = name
553
- if isinstance(samples[0], list):
554
- self.samples = numpy.array([complex(sample[0], sample[1]) for sample in samples])
555
- else:
556
- self.samples = samples
557
-
558
- def to_dict(self):
559
- """Return a dictionary format representation of the pulse library item.
560
-
561
- Returns:
562
- dict: The dictionary form of the PulseLibraryItem.
563
- """
564
- return {"name": self.name, "samples": self.samples}
565
-
566
- @classmethod
567
- def from_dict(cls, data):
568
- """Create a new PulseLibraryItem object from a dictionary.
569
-
570
- Args:
571
- data (dict): A dictionary for the experiment config
572
-
573
- Returns:
574
- PulseLibraryItem: The object from the input dictionary.
575
- """
576
- return cls(**data)
577
-
578
- def __repr__(self):
579
- return f"PulseLibraryItem({self.name}, {repr(self.samples)})"
580
-
581
- def __str__(self):
582
- return f"Pulse Library Item:\n\tname: {self.name}\n\tsamples: {self.samples}"
583
-
584
- def __eq__(self, other):
585
- if isinstance(other, PulseLibraryItem):
586
- if self.to_dict() == other.to_dict():
587
- return True
588
- return False
589
-
590
-
591
- class PulseQobj:
592
- """A Pulse Qobj."""
593
-
594
- @deprecate_func(
595
- since="1.2",
596
- removal_timeline="in the 2.0 release",
597
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
598
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
599
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
600
- "should be updated to use `BackendV2`.",
601
- )
602
- def __init__(self, qobj_id, config, experiments, header=None):
603
- """Instantiate a new Pulse Qobj Object.
604
-
605
- Each Pulse Qobj object is used to represent a single payload that will
606
- be passed to a Qiskit provider. It mirrors the Qobj the published
607
- `Qobj specification <https://arxiv.org/abs/1809.03452>`_ for Pulse
608
- experiments.
609
-
610
- Args:
611
- qobj_id (str): An identifier for the qobj
612
- config (PulseQobjConfig): A config for the entire run
613
- header (QobjHeader): A header for the entire run
614
- experiments (list): A list of lists of :class:`PulseQobjExperiment`
615
- objects representing an experiment
616
- """
617
- self.qobj_id = qobj_id
618
- self.config = config
619
- self.header = header or QobjHeader()
620
- self.experiments = experiments
621
- self.type = "PULSE"
622
- self.schema_version = "1.2.0"
623
-
624
- def __repr__(self):
625
- experiments_str = [repr(x) for x in self.experiments]
626
- experiments_repr = "[" + ", ".join(experiments_str) + "]"
627
- return (
628
- f"PulseQobj(qobj_id='{self.qobj_id}', config={repr(self.config)}, "
629
- f"experiments={experiments_repr}, header={repr(self.header)})"
630
- )
631
-
632
- def __str__(self):
633
- out = f"Pulse Qobj: {self.qobj_id}:\n"
634
- config = pprint.pformat(self.config.to_dict())
635
- out += f"Config: {str(config)}\n"
636
- header = pprint.pformat(self.header.to_dict())
637
- out += f"Header: {str(header)}\n"
638
- out += "Experiments:\n"
639
- for experiment in self.experiments:
640
- out += str(experiment)
641
- return out
642
-
643
- def to_dict(self):
644
- """Return a dictionary format representation of the Pulse Qobj.
645
-
646
- Note this dict is not in the json wire format expected by IBMQ and qobj
647
- specification because complex numbers are still of type complex. Also
648
- this may contain native numpy arrays. When serializing this output
649
- for use with IBMQ you can leverage a json encoder that converts these
650
- as expected. For example:
651
-
652
- .. code-block::
653
-
654
- import json
655
- import numpy
656
-
657
- class QobjEncoder(json.JSONEncoder):
658
- def default(self, obj):
659
- if isinstance(obj, numpy.ndarray):
660
- return obj.tolist()
661
- if isinstance(obj, complex):
662
- return (obj.real, obj.imag)
663
- return json.JSONEncoder.default(self, obj)
664
-
665
- json.dumps(qobj.to_dict(), cls=QobjEncoder)
666
-
667
- Returns:
668
- dict: A dictionary representation of the PulseQobj object
669
- """
670
- out_dict = {
671
- "qobj_id": self.qobj_id,
672
- "header": self.header.to_dict(),
673
- "config": self.config.to_dict(),
674
- "schema_version": self.schema_version,
675
- "type": self.type,
676
- "experiments": [x.to_dict() for x in self.experiments],
677
- }
678
- return out_dict
679
-
680
- @classmethod
681
- def from_dict(cls, data):
682
- """Create a new PulseQobj object from a dictionary.
683
-
684
- Args:
685
- data (dict): A dictionary representing the PulseQobj to create. It
686
- will be in the same format as output by :func:`to_dict`.
687
-
688
- Returns:
689
- PulseQobj: The PulseQobj from the input dictionary.
690
- """
691
- config = None
692
- if "config" in data:
693
- config = PulseQobjConfig.from_dict(data["config"])
694
- experiments = None
695
- if "experiments" in data:
696
- experiments = [PulseQobjExperiment.from_dict(exp) for exp in data["experiments"]]
697
- header = None
698
- if "header" in data:
699
- header = QobjHeader.from_dict(data["header"])
700
-
701
- return cls(
702
- qobj_id=data.get("qobj_id"), config=config, experiments=experiments, header=header
703
- )
704
-
705
- def __eq__(self, other):
706
- if isinstance(other, PulseQobj):
707
- if self.to_dict() == other.to_dict():
708
- return True
709
- return False