qiskit 1.4.2__cp39-abi3-macosx_11_0_arm64.whl → 2.0.0__cp39-abi3-macosx_11_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (459) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +3 -9
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/circuit/__init__.py +35 -10
  5. qiskit/circuit/{add_control.py → _add_control.py} +32 -12
  6. qiskit/circuit/_classical_resource_map.py +5 -3
  7. qiskit/circuit/barrier.py +3 -7
  8. qiskit/circuit/classical/expr/__init__.py +31 -3
  9. qiskit/circuit/classical/expr/constructors.py +236 -28
  10. qiskit/circuit/classical/expr/expr.py +104 -3
  11. qiskit/circuit/classical/expr/visitors.py +75 -0
  12. qiskit/circuit/classical/types/__init__.py +12 -8
  13. qiskit/circuit/classical/types/ordering.py +14 -7
  14. qiskit/circuit/classical/types/types.py +36 -0
  15. qiskit/circuit/commutation_checker.py +34 -7
  16. qiskit/circuit/controlflow/__init__.py +32 -1
  17. qiskit/circuit/controlflow/_builder_utils.py +9 -5
  18. qiskit/circuit/controlflow/box.py +163 -0
  19. qiskit/circuit/controlflow/break_loop.py +1 -1
  20. qiskit/circuit/controlflow/builder.py +139 -39
  21. qiskit/circuit/controlflow/continue_loop.py +1 -3
  22. qiskit/circuit/controlflow/control_flow.py +10 -0
  23. qiskit/circuit/controlflow/for_loop.py +2 -1
  24. qiskit/circuit/controlflow/if_else.py +3 -16
  25. qiskit/circuit/controlflow/switch_case.py +2 -8
  26. qiskit/circuit/controlflow/while_loop.py +2 -7
  27. qiskit/circuit/controlledgate.py +2 -4
  28. qiskit/circuit/delay.py +40 -11
  29. qiskit/circuit/duration.py +0 -15
  30. qiskit/circuit/gate.py +2 -4
  31. qiskit/circuit/instruction.py +2 -141
  32. qiskit/circuit/instructionset.py +7 -54
  33. qiskit/circuit/library/__init__.py +469 -154
  34. qiskit/circuit/library/arithmetic/__init__.py +16 -10
  35. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  36. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +2 -2
  37. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
  38. qiskit/circuit/library/arithmetic/exact_reciprocal.py +64 -21
  39. qiskit/circuit/library/arithmetic/integer_comparator.py +37 -80
  40. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +169 -2
  41. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +59 -5
  42. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +154 -6
  43. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +114 -4
  44. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +191 -15
  45. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +93 -39
  46. qiskit/circuit/library/arithmetic/quadratic_form.py +168 -2
  47. qiskit/circuit/library/arithmetic/weighted_adder.py +73 -1
  48. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  49. qiskit/circuit/library/blueprintcircuit.py +52 -16
  50. qiskit/circuit/library/data_preparation/initializer.py +1 -1
  51. qiskit/circuit/library/data_preparation/pauli_feature_map.py +4 -4
  52. qiskit/circuit/library/data_preparation/state_preparation.py +1 -1
  53. qiskit/circuit/library/generalized_gates/gms.py +1 -1
  54. qiskit/circuit/library/generalized_gates/isometry.py +1 -1
  55. qiskit/circuit/library/generalized_gates/pauli.py +1 -2
  56. qiskit/circuit/library/generalized_gates/uc.py +97 -7
  57. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +1 -1
  58. qiskit/circuit/library/generalized_gates/unitary.py +4 -2
  59. qiskit/circuit/library/graph_state.py +1 -0
  60. qiskit/circuit/library/hamiltonian_gate.py +1 -1
  61. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  62. qiskit/circuit/library/n_local/n_local.py +1 -1
  63. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  64. qiskit/circuit/library/overlap.py +2 -2
  65. qiskit/circuit/library/pauli_evolution.py +39 -24
  66. qiskit/circuit/library/phase_oracle.py +130 -51
  67. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  68. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  69. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  70. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  71. qiskit/circuit/library/standard_gates/h.py +4 -9
  72. qiskit/circuit/library/standard_gates/i.py +2 -2
  73. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  74. qiskit/circuit/library/standard_gates/p.py +15 -34
  75. qiskit/circuit/library/standard_gates/r.py +7 -10
  76. qiskit/circuit/library/standard_gates/rx.py +5 -15
  77. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  78. qiskit/circuit/library/standard_gates/ry.py +5 -17
  79. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  80. qiskit/circuit/library/standard_gates/rz.py +5 -17
  81. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  82. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  83. qiskit/circuit/library/standard_gates/s.py +6 -15
  84. qiskit/circuit/library/standard_gates/swap.py +4 -11
  85. qiskit/circuit/library/standard_gates/sx.py +7 -12
  86. qiskit/circuit/library/standard_gates/t.py +6 -7
  87. qiskit/circuit/library/standard_gates/u.py +2 -10
  88. qiskit/circuit/library/standard_gates/u1.py +5 -16
  89. qiskit/circuit/library/standard_gates/u2.py +2 -6
  90. qiskit/circuit/library/standard_gates/u3.py +3 -11
  91. qiskit/circuit/library/standard_gates/x.py +14 -62
  92. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  94. qiskit/circuit/library/standard_gates/y.py +4 -9
  95. qiskit/circuit/library/standard_gates/z.py +5 -15
  96. qiskit/circuit/measure.py +11 -2
  97. qiskit/circuit/parameterexpression.py +7 -1
  98. qiskit/circuit/quantumcircuit.py +890 -564
  99. qiskit/circuit/random/utils.py +12 -6
  100. qiskit/circuit/reset.py +5 -2
  101. qiskit/circuit/singleton.py +5 -11
  102. qiskit/circuit/store.py +0 -8
  103. qiskit/compiler/__init__.py +1 -7
  104. qiskit/compiler/transpiler.py +38 -196
  105. qiskit/converters/circuit_to_dag.py +6 -4
  106. qiskit/converters/circuit_to_dagdependency.py +0 -2
  107. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  108. qiskit/converters/circuit_to_gate.py +1 -1
  109. qiskit/converters/circuit_to_instruction.py +16 -29
  110. qiskit/converters/dag_to_circuit.py +7 -8
  111. qiskit/converters/dag_to_dagdependency.py +0 -1
  112. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  113. qiskit/converters/dagdependency_to_circuit.py +0 -6
  114. qiskit/converters/dagdependency_to_dag.py +0 -6
  115. qiskit/dagcircuit/collect_blocks.py +32 -20
  116. qiskit/dagcircuit/dagdependency.py +3 -37
  117. qiskit/dagcircuit/dagdependency_v2.py +5 -82
  118. qiskit/dagcircuit/dagnode.py +14 -2
  119. qiskit/passmanager/__init__.py +24 -6
  120. qiskit/passmanager/passmanager.py +26 -24
  121. qiskit/primitives/__init__.py +44 -35
  122. qiskit/primitives/backend_estimator_v2.py +102 -23
  123. qiskit/primitives/backend_sampler_v2.py +5 -20
  124. qiskit/primitives/base/__init__.py +4 -4
  125. qiskit/primitives/base/base_estimator.py +77 -82
  126. qiskit/primitives/base/base_primitive_job.py +2 -2
  127. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  128. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  129. qiskit/primitives/base/base_sampler.py +52 -60
  130. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  131. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  132. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  133. qiskit/primitives/containers/bindings_array.py +3 -1
  134. qiskit/primitives/containers/bit_array.py +23 -0
  135. qiskit/primitives/containers/data_bin.py +3 -1
  136. qiskit/primitives/containers/observables_array.py +19 -2
  137. qiskit/primitives/statevector_sampler.py +6 -8
  138. qiskit/primitives/utils.py +14 -189
  139. qiskit/providers/__init__.py +4 -130
  140. qiskit/providers/backend.py +11 -314
  141. qiskit/providers/basic_provider/__init__.py +3 -1
  142. qiskit/providers/basic_provider/basic_provider.py +29 -9
  143. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  144. qiskit/providers/exceptions.py +0 -33
  145. qiskit/providers/fake_provider/__init__.py +0 -37
  146. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  147. qiskit/qasm2/__init__.py +21 -6
  148. qiskit/qasm2/export.py +2 -10
  149. qiskit/qasm2/parse.py +11 -25
  150. qiskit/qasm3/__init__.py +5 -1
  151. qiskit/qasm3/ast.py +44 -0
  152. qiskit/qasm3/exporter.py +65 -27
  153. qiskit/qasm3/printer.py +35 -4
  154. qiskit/qpy/__init__.py +162 -19
  155. qiskit/qpy/binary_io/__init__.py +0 -1
  156. qiskit/qpy/binary_io/circuits.py +98 -130
  157. qiskit/qpy/binary_io/schedules.py +69 -439
  158. qiskit/qpy/binary_io/value.py +154 -31
  159. qiskit/qpy/common.py +10 -7
  160. qiskit/qpy/formats.py +41 -0
  161. qiskit/qpy/interface.py +34 -81
  162. qiskit/qpy/type_keys.py +58 -221
  163. qiskit/quantum_info/analysis/distance.py +3 -1
  164. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  165. qiskit/quantum_info/operators/operator.py +6 -2
  166. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  167. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  168. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  169. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  170. qiskit/quantum_info/states/densitymatrix.py +16 -6
  171. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  172. qiskit/quantum_info/states/statevector.py +16 -6
  173. qiskit/result/__init__.py +5 -17
  174. qiskit/result/models.py +18 -11
  175. qiskit/result/result.py +38 -134
  176. qiskit/result/sampled_expval.py +1 -2
  177. qiskit/result/utils.py +3 -4
  178. qiskit/synthesis/__init__.py +21 -1
  179. qiskit/synthesis/arithmetic/__init__.py +3 -1
  180. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  181. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  182. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  183. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  184. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  185. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  186. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  187. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  188. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  189. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  190. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  191. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  192. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  193. qiskit/synthesis/evolution/lie_trotter.py +10 -7
  194. qiskit/synthesis/evolution/product_formula.py +44 -35
  195. qiskit/synthesis/evolution/qdrift.py +17 -24
  196. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  197. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  198. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  199. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  200. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  201. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  202. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  203. qiskit/synthesis/two_qubit/__init__.py +1 -0
  204. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  205. qiskit/transpiler/__init__.py +32 -232
  206. qiskit/transpiler/basepasses.py +20 -51
  207. qiskit/transpiler/layout.py +1 -1
  208. qiskit/transpiler/passes/__init__.py +4 -40
  209. qiskit/transpiler/passes/basis/basis_translator.py +5 -4
  210. qiskit/transpiler/passes/basis/decompose.py +1 -15
  211. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  212. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  213. qiskit/transpiler/passes/layout/apply_layout.py +4 -0
  214. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  215. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +3 -4
  216. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  217. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  218. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  219. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  220. qiskit/transpiler/passes/optimization/__init__.py +2 -3
  221. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  222. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  223. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  224. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  225. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  226. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  227. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  228. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  229. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  230. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  231. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  232. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  233. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  234. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  235. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -0
  236. qiskit/transpiler/passes/routing/__init__.py +0 -1
  237. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  238. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  239. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  240. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  241. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  242. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  243. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  244. qiskit/transpiler/passes/scheduling/padding/base_padding.py +32 -4
  245. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +25 -63
  246. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +12 -4
  247. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  248. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  249. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  250. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +134 -62
  251. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  252. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  253. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  254. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  255. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  256. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  257. qiskit/transpiler/passes/utils/__init__.py +0 -1
  258. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  259. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  260. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  261. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  262. qiskit/transpiler/passmanager.py +13 -0
  263. qiskit/transpiler/passmanager_config.py +5 -81
  264. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  265. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  266. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +107 -322
  267. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  268. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  269. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  270. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  271. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  272. qiskit/transpiler/target.py +78 -524
  273. qiskit/user_config.py +8 -4
  274. qiskit/utils/__init__.py +13 -12
  275. qiskit/utils/deprecation.py +4 -112
  276. qiskit/utils/optionals.py +11 -4
  277. qiskit/utils/parallel.py +214 -87
  278. qiskit/utils/units.py +4 -1
  279. qiskit/visualization/__init__.py +3 -7
  280. qiskit/visualization/array.py +4 -1
  281. qiskit/visualization/bloch.py +1 -1
  282. qiskit/visualization/circuit/_utils.py +19 -19
  283. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  284. qiskit/visualization/circuit/matplotlib.py +13 -23
  285. qiskit/visualization/circuit/text.py +7 -3
  286. qiskit/visualization/counts_visualization.py +4 -0
  287. qiskit/visualization/dag_visualization.py +2 -1
  288. qiskit/visualization/gate_map.py +39 -154
  289. qiskit/visualization/library.py +4 -1
  290. qiskit/visualization/pass_manager_visualization.py +6 -2
  291. qiskit/visualization/state_visualization.py +19 -2
  292. qiskit/visualization/timeline/core.py +19 -13
  293. qiskit/visualization/timeline/interface.py +19 -18
  294. qiskit/visualization/timeline/plotters/matplotlib.py +4 -1
  295. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/METADATA +4 -3
  296. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/RECORD +300 -447
  297. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/WHEEL +2 -1
  298. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/entry_points.txt +8 -2
  299. qiskit/assembler/__init__.py +0 -42
  300. qiskit/assembler/assemble_circuits.py +0 -451
  301. qiskit/assembler/assemble_schedules.py +0 -367
  302. qiskit/assembler/disassemble.py +0 -310
  303. qiskit/assembler/run_config.py +0 -77
  304. qiskit/circuit/bit.py +0 -106
  305. qiskit/circuit/classicalfunction/__init__.py +0 -152
  306. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  307. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  308. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  309. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  310. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  311. qiskit/circuit/classicalfunction/types.py +0 -18
  312. qiskit/circuit/classicalfunction/utils.py +0 -91
  313. qiskit/circuit/classicalregister.py +0 -57
  314. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  315. qiskit/circuit/quantumregister.py +0 -75
  316. qiskit/circuit/register.py +0 -246
  317. qiskit/compiler/assembler.py +0 -689
  318. qiskit/compiler/scheduler.py +0 -109
  319. qiskit/compiler/sequencer.py +0 -71
  320. qiskit/primitives/backend_estimator.py +0 -486
  321. qiskit/primitives/backend_sampler.py +0 -222
  322. qiskit/primitives/estimator.py +0 -172
  323. qiskit/primitives/sampler.py +0 -162
  324. qiskit/providers/backend_compat.py +0 -507
  325. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  326. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  327. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  328. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  329. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  330. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  332. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  333. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  335. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  336. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  337. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  338. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  339. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  340. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  341. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  342. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  343. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  344. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  345. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  346. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  347. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  348. qiskit/providers/fake_provider/fake_1q.py +0 -91
  349. qiskit/providers/fake_provider/fake_backend.py +0 -165
  350. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  351. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  352. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  353. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  354. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  355. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  356. qiskit/providers/models/__init__.py +0 -89
  357. qiskit/providers/models/backendconfiguration.py +0 -1040
  358. qiskit/providers/models/backendproperties.py +0 -535
  359. qiskit/providers/models/backendstatus.py +0 -104
  360. qiskit/providers/models/jobstatus.py +0 -77
  361. qiskit/providers/models/pulsedefaults.py +0 -305
  362. qiskit/providers/provider.py +0 -95
  363. qiskit/pulse/__init__.py +0 -158
  364. qiskit/pulse/builder.py +0 -2262
  365. qiskit/pulse/calibration_entries.py +0 -381
  366. qiskit/pulse/channels.py +0 -227
  367. qiskit/pulse/configuration.py +0 -245
  368. qiskit/pulse/exceptions.py +0 -45
  369. qiskit/pulse/filters.py +0 -309
  370. qiskit/pulse/instruction_schedule_map.py +0 -424
  371. qiskit/pulse/instructions/__init__.py +0 -67
  372. qiskit/pulse/instructions/acquire.py +0 -150
  373. qiskit/pulse/instructions/delay.py +0 -71
  374. qiskit/pulse/instructions/directives.py +0 -154
  375. qiskit/pulse/instructions/frequency.py +0 -135
  376. qiskit/pulse/instructions/instruction.py +0 -270
  377. qiskit/pulse/instructions/phase.py +0 -152
  378. qiskit/pulse/instructions/play.py +0 -99
  379. qiskit/pulse/instructions/reference.py +0 -100
  380. qiskit/pulse/instructions/snapshot.py +0 -82
  381. qiskit/pulse/library/__init__.py +0 -97
  382. qiskit/pulse/library/continuous.py +0 -430
  383. qiskit/pulse/library/pulse.py +0 -148
  384. qiskit/pulse/library/samplers/__init__.py +0 -15
  385. qiskit/pulse/library/samplers/decorators.py +0 -295
  386. qiskit/pulse/library/samplers/strategies.py +0 -71
  387. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  388. qiskit/pulse/library/waveform.py +0 -136
  389. qiskit/pulse/macros.py +0 -262
  390. qiskit/pulse/parameter_manager.py +0 -445
  391. qiskit/pulse/parser.py +0 -314
  392. qiskit/pulse/reference_manager.py +0 -58
  393. qiskit/pulse/schedule.py +0 -1854
  394. qiskit/pulse/transforms/__init__.py +0 -106
  395. qiskit/pulse/transforms/alignments.py +0 -406
  396. qiskit/pulse/transforms/base_transforms.py +0 -71
  397. qiskit/pulse/transforms/canonicalization.py +0 -498
  398. qiskit/pulse/transforms/dag.py +0 -122
  399. qiskit/pulse/utils.py +0 -149
  400. qiskit/qobj/__init__.py +0 -75
  401. qiskit/qobj/common.py +0 -81
  402. qiskit/qobj/converters/__init__.py +0 -18
  403. qiskit/qobj/converters/lo_config.py +0 -177
  404. qiskit/qobj/converters/pulse_instruction.py +0 -897
  405. qiskit/qobj/pulse_qobj.py +0 -709
  406. qiskit/qobj/qasm_qobj.py +0 -708
  407. qiskit/qobj/utils.py +0 -46
  408. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  409. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  410. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  411. qiskit/result/mitigation/utils.py +0 -217
  412. qiskit/scheduler/__init__.py +0 -40
  413. qiskit/scheduler/config.py +0 -37
  414. qiskit/scheduler/lowering.py +0 -187
  415. qiskit/scheduler/methods/__init__.py +0 -15
  416. qiskit/scheduler/methods/basic.py +0 -140
  417. qiskit/scheduler/schedule_circuit.py +0 -69
  418. qiskit/scheduler/sequence.py +0 -104
  419. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  420. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  421. qiskit/transpiler/passes/calibration/builders.py +0 -20
  422. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  423. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  424. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  425. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  426. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  427. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  428. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  429. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  430. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  431. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  432. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  433. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  434. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  435. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  436. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  437. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  438. qiskit/utils/deprecate_pulse.py +0 -119
  439. qiskit/utils/multiprocessing.py +0 -56
  440. qiskit/visualization/pulse_v2/__init__.py +0 -21
  441. qiskit/visualization/pulse_v2/core.py +0 -901
  442. qiskit/visualization/pulse_v2/device_info.py +0 -173
  443. qiskit/visualization/pulse_v2/drawings.py +0 -253
  444. qiskit/visualization/pulse_v2/events.py +0 -254
  445. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  446. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  447. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  448. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  449. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  450. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  451. qiskit/visualization/pulse_v2/interface.py +0 -459
  452. qiskit/visualization/pulse_v2/layouts.py +0 -387
  453. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  454. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  455. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  456. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  457. qiskit/visualization/pulse_v2/types.py +0 -242
  458. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
  459. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/top_level.txt +0 -0
qiskit/qobj/qasm_qobj.py DELETED
@@ -1,708 +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
- """Module providing definitions of OpenQASM 2 Qobj classes."""
14
-
15
- import copy
16
- import pprint
17
- from types import SimpleNamespace
18
- from qiskit.circuit.parameterexpression import ParameterExpression
19
- from qiskit.qobj.pulse_qobj import PulseQobjInstruction, PulseLibraryItem
20
- from qiskit.qobj.common import QobjDictField, QobjHeader
21
- from qiskit.utils import deprecate_func
22
-
23
-
24
- class QasmQobjInstruction:
25
- """A class representing a single instruction in an QasmQobj Experiment."""
26
-
27
- @deprecate_func(
28
- since="1.2",
29
- removal_timeline="in the 2.0 release",
30
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
31
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
32
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
33
- "should be updated to use `BackendV2`.",
34
- )
35
- def __init__(
36
- self,
37
- name,
38
- params=None,
39
- qubits=None,
40
- register=None,
41
- memory=None,
42
- condition=None,
43
- conditional=None,
44
- label=None,
45
- mask=None,
46
- relation=None,
47
- val=None,
48
- snapshot_type=None,
49
- ):
50
- """Instantiate a new QasmQobjInstruction object.
51
-
52
- Args:
53
- name (str): The name of the instruction
54
- params (list): The list of parameters for the gate
55
- qubits (list): A list of ``int`` representing the qubits the
56
- instruction operates on
57
- register (list): If a ``measure`` instruction this is a list
58
- of ``int`` containing the list of register slots in which to
59
- store the measurement results (must be the same length as
60
- qubits). If a ``bfunc`` instruction this is a single ``int``
61
- of the register slot in which to store the result.
62
- memory (list): If a ``measure`` instruction this is a list
63
- of ``int`` containing the list of memory slots to store the
64
- measurement results in (must be the same length as qubits).
65
- If a ``bfunc`` instruction this is a single ``int`` of the
66
- memory slot to store the boolean function result in.
67
- condition (tuple): A tuple of the form ``(int, int)`` where the
68
- first ``int`` is the control register and the second ``int`` is
69
- the control value if the gate has a condition.
70
- conditional (int): The register index of the condition
71
- label (str): An optional label assigned to the instruction
72
- mask (int): For a ``bfunc`` instruction the hex value which is
73
- applied as an ``AND`` to the register bits.
74
- relation (str): Relational operator for comparing the masked
75
- register to the ``val`` kwarg. Can be either ``==`` (equals) or
76
- ``!=`` (not equals).
77
- val (int): Value to which to compare the masked register. In other
78
- words, the output of the function is ``(register AND mask)``
79
- snapshot_type (str): For snapshot instructions the type of snapshot
80
- to use
81
- """
82
- self.name = name
83
- if params is not None:
84
- self.params = params
85
- if qubits is not None:
86
- self.qubits = qubits
87
- if register is not None:
88
- self.register = register
89
- if memory is not None:
90
- self.memory = memory
91
- if condition is not None:
92
- self._condition = condition
93
- if conditional is not None:
94
- self.conditional = conditional
95
- if label is not None:
96
- self.label = label
97
- if mask is not None:
98
- self.mask = mask
99
- if relation is not None:
100
- self.relation = relation
101
- if val is not None:
102
- self.val = val
103
- if snapshot_type is not None:
104
- self.snapshot_type = snapshot_type
105
-
106
- def to_dict(self):
107
- """Return a dictionary format representation of the Instruction.
108
-
109
- Returns:
110
- dict: The dictionary form of the QasmQobjInstruction.
111
- """
112
- out_dict = {"name": self.name}
113
- for attr in [
114
- "params",
115
- "qubits",
116
- "register",
117
- "memory",
118
- "_condition",
119
- "conditional",
120
- "label",
121
- "mask",
122
- "relation",
123
- "val",
124
- "snapshot_type",
125
- ]:
126
- if hasattr(self, attr):
127
- # TODO: Remove the param type conversion when Aer understands
128
- # ParameterExpression type
129
- if attr == "params":
130
- params = []
131
- for param in list(getattr(self, attr)):
132
- if isinstance(param, ParameterExpression):
133
- params.append(float(param))
134
- else:
135
- params.append(param)
136
- out_dict[attr] = params
137
- else:
138
- out_dict[attr] = getattr(self, attr)
139
-
140
- return out_dict
141
-
142
- def __repr__(self):
143
- out = f"QasmQobjInstruction(name='{self.name}'"
144
- for attr in [
145
- "params",
146
- "qubits",
147
- "register",
148
- "memory",
149
- "_condition",
150
- "conditional",
151
- "label",
152
- "mask",
153
- "relation",
154
- "val",
155
- "snapshot_type",
156
- ]:
157
- attr_val = getattr(self, attr, None)
158
- if attr_val is not None:
159
- if isinstance(attr_val, str):
160
- out += f', {attr}="{attr_val}"'
161
- else:
162
- out += f", {attr}={attr_val}"
163
- out += ")"
164
- return out
165
-
166
- def __str__(self):
167
- out = f"Instruction: {self.name}\n"
168
- for attr in [
169
- "params",
170
- "qubits",
171
- "register",
172
- "memory",
173
- "_condition",
174
- "conditional",
175
- "label",
176
- "mask",
177
- "relation",
178
- "val",
179
- "snapshot_type",
180
- ]:
181
- if hasattr(self, attr):
182
- out += f"\t\t{attr}: {getattr(self, attr)}\n"
183
- return out
184
-
185
- @classmethod
186
- def from_dict(cls, data):
187
- """Create a new QasmQobjInstruction object from a dictionary.
188
-
189
- Args:
190
- data (dict): A dictionary for the experiment config
191
-
192
- Returns:
193
- QasmQobjInstruction: The object from the input dictionary.
194
- """
195
- name = data.pop("name")
196
- return cls(name, **data)
197
-
198
- def __eq__(self, other):
199
- if isinstance(other, QasmQobjInstruction):
200
- if self.to_dict() == other.to_dict():
201
- return True
202
- return False
203
-
204
-
205
- class QasmQobjExperiment:
206
- """An OpenQASM 2 Qobj Experiment.
207
-
208
- Each instance of this class is used to represent an OpenQASM 2 experiment as
209
- part of a larger OpenQASM 2 qobj.
210
- """
211
-
212
- @deprecate_func(
213
- since="1.2",
214
- removal_timeline="in the 2.0 release",
215
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
216
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
217
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
218
- "should be updated to use `BackendV2`.",
219
- )
220
- def __init__(self, config=None, header=None, instructions=None):
221
- """Instantiate a QasmQobjExperiment.
222
-
223
- Args:
224
- config (QasmQobjExperimentConfig): A config object for the experiment
225
- header (QasmQobjExperimentHeader): A header object for the experiment
226
- instructions (list): A list of :class:`QasmQobjInstruction` objects
227
- """
228
- self.config = config or QasmQobjExperimentConfig()
229
- self.header = header or QasmQobjExperimentHeader()
230
- self.instructions = instructions or []
231
-
232
- def __repr__(self):
233
- instructions_str = [repr(x) for x in self.instructions]
234
- instructions_repr = "[" + ", ".join(instructions_str) + "]"
235
- return (
236
- f"QasmQobjExperiment(config={repr(self.config)}, header={repr(self.header)},"
237
- f" instructions={instructions_repr})"
238
- )
239
-
240
- def __str__(self):
241
- out = "\nOpenQASM2 Experiment:\n"
242
- config = pprint.pformat(self.config.to_dict())
243
- header = pprint.pformat(self.header.to_dict())
244
- out += f"Header:\n{header}\n"
245
- out += f"Config:\n{config}\n\n"
246
- for instruction in self.instructions:
247
- out += f"\t{instruction}\n"
248
- return out
249
-
250
- def to_dict(self):
251
- """Return a dictionary format representation of the Experiment.
252
-
253
- Returns:
254
- dict: The dictionary form of the QasmQObjExperiment.
255
- """
256
- out_dict = {
257
- "config": self.config.to_dict(),
258
- "header": self.header.to_dict(),
259
- "instructions": [x.to_dict() for x in self.instructions],
260
- }
261
- return out_dict
262
-
263
- @classmethod
264
- def from_dict(cls, data):
265
- """Create a new QasmQobjExperiment object from a dictionary.
266
-
267
- Args:
268
- data (dict): A dictionary for the experiment config
269
-
270
- Returns:
271
- QasmQobjExperiment: The object from the input dictionary.
272
- """
273
- config = None
274
- if "config" in data:
275
- config = QasmQobjExperimentConfig.from_dict(data.pop("config"))
276
- header = None
277
- if "header" in data:
278
- header = QasmQobjExperimentHeader.from_dict(data.pop("header"))
279
- instructions = None
280
- if "instructions" in data:
281
- instructions = [
282
- QasmQobjInstruction.from_dict(inst) for inst in data.pop("instructions")
283
- ]
284
- return cls(config, header, instructions)
285
-
286
- def __eq__(self, other):
287
- if isinstance(other, QasmQobjExperiment):
288
- if self.to_dict() == other.to_dict():
289
- return True
290
- return False
291
-
292
-
293
- class QasmQobjConfig(SimpleNamespace):
294
- """A configuration for an OpenQASM 2 Qobj."""
295
-
296
- @deprecate_func(
297
- since="1.2",
298
- removal_timeline="in the 2.0 release",
299
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
300
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
301
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
302
- "should be updated to use `BackendV2`.",
303
- )
304
- def __init__(
305
- self,
306
- shots=None,
307
- seed_simulator=None,
308
- memory=None,
309
- parameter_binds=None,
310
- meas_level=None,
311
- meas_return=None,
312
- memory_slots=None,
313
- n_qubits=None,
314
- pulse_library=None,
315
- calibrations=None,
316
- rep_delay=None,
317
- qubit_lo_freq=None,
318
- meas_lo_freq=None,
319
- **kwargs,
320
- ):
321
- """Model for RunConfig.
322
-
323
- Args:
324
- shots (int): the number of shots.
325
- seed_simulator (int): the seed to use in the simulator
326
- memory (bool): whether to request memory from backend (per-shot readouts)
327
- parameter_binds (list[dict]): List of parameter bindings
328
- meas_level (int): Measurement level 0, 1, or 2
329
- meas_return (str): For measurement level < 2, whether single or avg shots are returned
330
- memory_slots (int): The number of memory slots on the device
331
- n_qubits (int): The number of qubits on the device
332
- pulse_library (list): List of :class:`PulseLibraryItem`.
333
- calibrations (QasmExperimentCalibrations): Information required for Pulse gates.
334
- rep_delay (float): Delay between programs in sec. Only supported on certain
335
- backends (``backend.configuration().dynamic_reprate_enabled`` ). Must be from the
336
- range supplied by the backend (``backend.configuration().rep_delay_range``). Default
337
- is ``backend.configuration().default_rep_delay``.
338
- qubit_lo_freq (list): List of frequencies (as floats) for the qubit driver LO's in GHz.
339
- meas_lo_freq (list): List of frequencies (as floats) for the measurement driver LO's in
340
- GHz.
341
- kwargs: Additional free form key value fields to add to the
342
- configuration.
343
- """
344
- if shots is not None:
345
- self.shots = int(shots)
346
-
347
- if seed_simulator is not None:
348
- self.seed_simulator = int(seed_simulator)
349
-
350
- if memory is not None:
351
- self.memory = bool(memory)
352
-
353
- if parameter_binds is not None:
354
- self.parameter_binds = parameter_binds
355
-
356
- if meas_level is not None:
357
- self.meas_level = meas_level
358
-
359
- if meas_return is not None:
360
- self.meas_return = meas_return
361
-
362
- if memory_slots is not None:
363
- self.memory_slots = memory_slots
364
-
365
- if n_qubits is not None:
366
- self.n_qubits = n_qubits
367
-
368
- if pulse_library is not None:
369
- self.pulse_library = pulse_library
370
-
371
- if calibrations is not None:
372
- self.calibrations = calibrations
373
-
374
- if rep_delay is not None:
375
- self.rep_delay = rep_delay
376
-
377
- if qubit_lo_freq is not None:
378
- self.qubit_lo_freq = qubit_lo_freq
379
-
380
- if meas_lo_freq is not None:
381
- self.meas_lo_freq = meas_lo_freq
382
-
383
- if kwargs:
384
- self.__dict__.update(kwargs)
385
-
386
- def to_dict(self):
387
- """Return a dictionary format representation of the OpenQASM 2 Qobj config.
388
-
389
- Returns:
390
- dict: The dictionary form of the QasmQobjConfig.
391
- """
392
- out_dict = copy.copy(self.__dict__)
393
- if hasattr(self, "pulse_library"):
394
- out_dict["pulse_library"] = [x.to_dict() for x in self.pulse_library]
395
-
396
- if hasattr(self, "calibrations"):
397
- out_dict["calibrations"] = self.calibrations.to_dict()
398
-
399
- return out_dict
400
-
401
- @classmethod
402
- def from_dict(cls, data):
403
- """Create a new QasmQobjConfig object from a dictionary.
404
-
405
- Args:
406
- data (dict): A dictionary for the config
407
-
408
- Returns:
409
- QasmQobjConfig: The object from the input dictionary.
410
- """
411
- if "pulse_library" in data:
412
- pulse_lib = data.pop("pulse_library")
413
- pulse_lib_obj = [PulseLibraryItem.from_dict(x) for x in pulse_lib]
414
- data["pulse_library"] = pulse_lib_obj
415
-
416
- if "calibrations" in data:
417
- calibrations = data.pop("calibrations")
418
- data["calibrations"] = QasmExperimentCalibrations.from_dict(calibrations)
419
-
420
- return cls(**data)
421
-
422
- def __eq__(self, other):
423
- if isinstance(other, QasmQobjConfig):
424
- if self.to_dict() == other.to_dict():
425
- return True
426
- return False
427
-
428
-
429
- class QasmQobjExperimentHeader(QobjDictField):
430
- """A header for a single OpenQASM 2 experiment in the qobj."""
431
-
432
- pass
433
-
434
-
435
- class QasmQobjExperimentConfig(QobjDictField):
436
- """Configuration for a single OpenQASM 2 experiment in the qobj."""
437
-
438
- @deprecate_func(
439
- since="1.2",
440
- removal_timeline="in the 2.0 release",
441
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
442
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
443
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
444
- "should be updated to use `BackendV2`.",
445
- )
446
- def __init__(self, calibrations=None, qubit_lo_freq=None, meas_lo_freq=None, **kwargs):
447
- """
448
- Args:
449
- calibrations (QasmExperimentCalibrations): Information required for Pulse gates.
450
- qubit_lo_freq (List[float]): List of qubit LO frequencies in GHz.
451
- meas_lo_freq (List[float]): List of meas readout LO frequencies in GHz.
452
- kwargs: Additional free form key value fields to add to the configuration
453
- """
454
- if calibrations:
455
- self.calibrations = calibrations
456
- if qubit_lo_freq is not None:
457
- self.qubit_lo_freq = qubit_lo_freq
458
- if meas_lo_freq is not None:
459
- self.meas_lo_freq = meas_lo_freq
460
-
461
- super().__init__(**kwargs)
462
-
463
- def to_dict(self):
464
- out_dict = copy.copy(self.__dict__)
465
- if hasattr(self, "calibrations"):
466
- out_dict["calibrations"] = self.calibrations.to_dict()
467
- return out_dict
468
-
469
- @classmethod
470
- def from_dict(cls, data):
471
- if "calibrations" in data:
472
- calibrations = data.pop("calibrations")
473
- data["calibrations"] = QasmExperimentCalibrations.from_dict(calibrations)
474
- return cls(**data)
475
-
476
-
477
- class QasmExperimentCalibrations:
478
- """A container for any calibrations data. The gates attribute contains a list of
479
- GateCalibrations.
480
- """
481
-
482
- @deprecate_func(
483
- since="1.2",
484
- removal_timeline="in the 2.0 release",
485
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
486
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
487
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
488
- "should be updated to use `BackendV2`.",
489
- )
490
- def __init__(self, gates):
491
- """
492
- Initialize a container for calibrations.
493
-
494
- Args:
495
- gates (list(GateCalibration))
496
- """
497
- self.gates = gates
498
-
499
- def to_dict(self):
500
- """Return a dictionary format representation of the calibrations.
501
-
502
- Returns:
503
- dict: The dictionary form of the GateCalibration.
504
-
505
- """
506
- out_dict = copy.copy(self.__dict__)
507
- out_dict["gates"] = [x.to_dict() for x in self.gates]
508
- return out_dict
509
-
510
- @classmethod
511
- def from_dict(cls, data):
512
- """Create a new GateCalibration object from a dictionary.
513
-
514
- Args:
515
- data (dict): A dictionary representing the QasmExperimentCalibrations to
516
- create. It will be in the same format as output by :func:`to_dict`.
517
-
518
- Returns:
519
- QasmExperimentCalibrations: The QasmExperimentCalibrations from the input dictionary.
520
- """
521
- gates = data.pop("gates")
522
- data["gates"] = [GateCalibration.from_dict(x) for x in gates]
523
- return cls(**data)
524
-
525
-
526
- class GateCalibration:
527
- """Each calibration specifies a unique gate by name, qubits and params, and
528
- contains the Pulse instructions to implement it."""
529
-
530
- @deprecate_func(
531
- since="1.2",
532
- removal_timeline="in the 2.0 release",
533
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
534
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
535
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
536
- "should be updated to use `BackendV2`.",
537
- )
538
- def __init__(self, name, qubits, params, instructions):
539
- """
540
- Initialize a single gate calibration. Instructions may reference waveforms which should be
541
- made available in the pulse_library.
542
-
543
- Args:
544
- name (str): Gate name.
545
- qubits (list(int)): Qubits the gate applies to.
546
- params (list(complex)): Gate parameter values, if any.
547
- instructions (list(PulseQobjInstruction)): The gate implementation.
548
- """
549
- self.name = name
550
- self.qubits = qubits
551
- self.params = params
552
- self.instructions = instructions
553
-
554
- def __hash__(self):
555
- return hash(
556
- (
557
- self.name,
558
- tuple(self.qubits),
559
- tuple(self.params),
560
- tuple(str(inst) for inst in self.instructions),
561
- )
562
- )
563
-
564
- def to_dict(self):
565
- """Return a dictionary format representation of the Gate Calibration.
566
-
567
- Returns:
568
- dict: The dictionary form of the GateCalibration.
569
- """
570
- out_dict = copy.copy(self.__dict__)
571
- out_dict["instructions"] = [x.to_dict() for x in self.instructions]
572
- return out_dict
573
-
574
- @classmethod
575
- def from_dict(cls, data):
576
- """Create a new GateCalibration object from a dictionary.
577
-
578
- Args:
579
- data (dict): A dictionary representing the GateCalibration to create. It
580
- will be in the same format as output by :func:`to_dict`.
581
-
582
- Returns:
583
- GateCalibration: The GateCalibration from the input dictionary.
584
- """
585
- instructions = data.pop("instructions")
586
- data["instructions"] = [PulseQobjInstruction.from_dict(x) for x in instructions]
587
- return cls(**data)
588
-
589
-
590
- class QasmQobj:
591
- """An OpenQASM 2 Qobj."""
592
-
593
- @deprecate_func(
594
- since="1.2",
595
- removal_timeline="in the 2.0 release",
596
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
597
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
598
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
599
- "should be updated to use `BackendV2`.",
600
- )
601
- def __init__(self, qobj_id=None, config=None, experiments=None, header=None):
602
- """Instantiate a new OpenQASM 2 Qobj Object.
603
-
604
- Each OpenQASM 2 Qobj object is used to represent a single payload that will
605
- be passed to a Qiskit provider. It mirrors the Qobj the published
606
- `Qobj specification <https://arxiv.org/abs/1809.03452>`_ for OpenQASM
607
- experiments.
608
-
609
- Args:
610
- qobj_id (str): An identifier for the qobj
611
- config (QasmQobjRunConfig): A config for the entire run
612
- header (QobjHeader): A header for the entire run
613
- experiments (list): A list of lists of :class:`QasmQobjExperiment`
614
- objects representing an experiment
615
- """
616
- self.header = header or QobjHeader()
617
- self.config = config or QasmQobjConfig()
618
- self.experiments = experiments or []
619
- self.qobj_id = qobj_id
620
- self.type = "QASM"
621
- self.schema_version = "1.3.0"
622
-
623
- def __repr__(self):
624
- experiments_str = [repr(x) for x in self.experiments]
625
- experiments_repr = "[" + ", ".join(experiments_str) + "]"
626
- return (
627
- f"QasmQobj(qobj_id='{self.qobj_id}', config={repr(self.config)},"
628
- f" experiments={experiments_repr}, header={repr(self.header)})"
629
- )
630
-
631
- def __str__(self):
632
- out = f"QASM Qobj: {self.qobj_id}:\n"
633
- config = pprint.pformat(self.config.to_dict())
634
- out += f"Config: {str(config)}\n"
635
- header = pprint.pformat(self.header.to_dict())
636
- out += f"Header: {str(header)}\n"
637
- out += "Experiments:\n"
638
- for experiment in self.experiments:
639
- out += str(experiment)
640
- return out
641
-
642
- def to_dict(self):
643
- """Return a dictionary format representation of the OpenQASM 2 Qobj.
644
-
645
- Note this dict is not in the json wire format expected by IBM and Qobj
646
- specification because complex numbers are still of type complex. Also,
647
- this may contain native numpy arrays. When serializing this output
648
- for use with IBM systems, you can leverage a json encoder that converts these
649
- as expected. For example:
650
-
651
- .. code-block::
652
-
653
- import json
654
- import numpy
655
-
656
- class QobjEncoder(json.JSONEncoder):
657
- def default(self, obj):
658
- if isinstance(obj, numpy.ndarray):
659
- return obj.tolist()
660
- if isinstance(obj, complex):
661
- return (obj.real, obj.imag)
662
- return json.JSONEncoder.default(self, obj)
663
-
664
- json.dumps(qobj.to_dict(), cls=QobjEncoder)
665
-
666
- Returns:
667
- dict: A dictionary representation of the QasmQobj object
668
- """
669
- out_dict = {
670
- "qobj_id": self.qobj_id,
671
- "header": self.header.to_dict(),
672
- "config": self.config.to_dict(),
673
- "schema_version": self.schema_version,
674
- "type": "QASM",
675
- "experiments": [x.to_dict() for x in self.experiments],
676
- }
677
- return out_dict
678
-
679
- @classmethod
680
- def from_dict(cls, data):
681
- """Create a new QASMQobj object from a dictionary.
682
-
683
- Args:
684
- data (dict): A dictionary representing the QasmQobj to create. It
685
- will be in the same format as output by :func:`to_dict`.
686
-
687
- Returns:
688
- QasmQobj: The QasmQobj from the input dictionary.
689
- """
690
- config = None
691
- if "config" in data:
692
- config = QasmQobjConfig.from_dict(data["config"])
693
- experiments = None
694
- if "experiments" in data:
695
- experiments = [QasmQobjExperiment.from_dict(exp) for exp in data["experiments"]]
696
- header = None
697
- if "header" in data:
698
- header = QobjHeader.from_dict(data["header"])
699
-
700
- return cls(
701
- qobj_id=data.get("qobj_id"), config=config, experiments=experiments, header=header
702
- )
703
-
704
- def __eq__(self, other):
705
- if isinstance(other, QasmQobj):
706
- if self.to_dict() == other.to_dict():
707
- return True
708
- return False