qiskit 1.4.2__cp39-abi3-win_amd64.whl → 2.0.0rc2__cp39-abi3-win_amd64.whl

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