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