qiskit 1.4.1__cp39-abi3-win_amd64.whl → 2.0.0__cp39-abi3-win_amd64.whl

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